[arch-commits] Commit in (7 files)

Jan Steffens heftig at gemini.archlinux.org
Wed Jul 13 18:25:55 UTC 2022


    Date: Wednesday, July 13, 2022 @ 18:25:55
  Author: heftig
Revision: 1252589

extra2community: Moving js78 from extra to community

Added:
  js78/
  js78/repos/
  js78/trunk/
  js78/trunk/0001-Fixes-for-LTO-PGO-support.patch
  js78/trunk/0002-Fixes-for-Python-3.10.patch
  js78/trunk/0003-Fixes-for-Rust-1.56.patch
  js78/trunk/PKGBUILD

--------------------------------------+
 0001-Fixes-for-LTO-PGO-support.patch |  103 +++
 0002-Fixes-for-Python-3.10.patch     | 1013 +++++++++++++++++++++++++++++++++
 0003-Fixes-for-Rust-1.56.patch       |  447 ++++++++++++++
 PKGBUILD                             |  140 ++++
 4 files changed, 1703 insertions(+)

Added: js78/trunk/0001-Fixes-for-LTO-PGO-support.patch
===================================================================
--- js78/trunk/0001-Fixes-for-LTO-PGO-support.patch	                        (rev 0)
+++ js78/trunk/0001-Fixes-for-LTO-PGO-support.patch	2022-07-13 18:25:55 UTC (rev 1252589)
@@ -0,0 +1,103 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: "Jan Alexander Steffens (heftig)" <jan.steffens at gmail.com>
+Date: Tue, 17 Nov 2020 22:45:47 +0100
+Subject: [PATCH] Fixes for LTO+PGO support
+
+Cherry-picked from Firefox Nightly.
+---
+ build/moz.configure/lto-pgo.configure |  7 +++++--
+ config/makefiles/rust.mk              | 21 +++++++++++++++++----
+ 2 files changed, 22 insertions(+), 6 deletions(-)
+
+diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure
+index 366c6691f7d1..e5342a037ee9 100644
+--- a/build/moz.configure/lto-pgo.configure
++++ b/build/moz.configure/lto-pgo.configure
+@@ -229,7 +229,10 @@ def lto(value, c_compiler, ld64_known_good, target, instrumented_build):
+             # instruction sets.
+         else:
+             num_cores = multiprocessing.cpu_count()
+-            cflags.append("-flto")
++            if len(value) and value[0].lower() == 'full':
++                cflags.append("-flto")
++            else:
++                cflags.append("-flto=thin")
+             cflags.append("-flifetime-dse=1")
+ 
+             ldflags.append("-flto=%s" % num_cores)
+@@ -258,6 +261,6 @@ set_config('MOZ_LTO', lto.enabled)
+ set_define('MOZ_LTO', lto.enabled)
+ set_config('MOZ_LTO_CFLAGS', lto.cflags)
+ set_config('MOZ_LTO_LDFLAGS', lto.ldflags)
+-set_config('MOZ_LTO_RUST', lto.rust_lto)
++set_config('MOZ_LTO_RUST_CROSS', lto.rust_lto)
+ add_old_configure_assignment('MOZ_LTO_CFLAGS', lto.cflags)
+ add_old_configure_assignment('MOZ_LTO_LDFLAGS', lto.ldflags)
+diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk
+index f4475054f897..f19dfbc72fad 100644
+--- a/config/makefiles/rust.mk
++++ b/config/makefiles/rust.mk
+@@ -59,17 +59,19 @@ cargo_rustc_flags = $(CARGO_RUSTCFLAGS)
+ ifndef DEVELOPER_OPTIONS
+ ifndef MOZ_DEBUG_RUST
+ # Enable link-time optimization for release builds, but not when linking
+-# gkrust_gtest.
++# gkrust_gtest. And not when doing cross-language LTO.
++ifndef MOZ_LTO_RUST_CROSS
+ ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
+ cargo_rustc_flags += -Clto
+ endif
+ # Versions of rust >= 1.45 need -Cembed-bitcode=yes for all crates when
+ # using -Clto.
+ ifeq (,$(filter 1.38.% 1.39.% 1.40.% 1.41.% 1.42.% 1.43.% 1.44.%,$(RUSTC_VERSION)))
+ RUSTFLAGS += -Cembed-bitcode=yes
+ endif
+ endif
+ endif
++endif
+ 
+ ifdef CARGO_INCREMENTAL
+ export CARGO_INCREMENTAL
+@@ -195,10 +197,19 @@ target_rust_ltoable := force-cargo-library-build
+ target_rust_nonltoable := force-cargo-test-run force-cargo-library-check $(foreach b,build check,force-cargo-program-$(b))
+ 
+ ifdef MOZ_PGO_RUST
+-rust_pgo_flags := $(if $(MOZ_PROFILE_GENERATE),-C profile-generate=$(topobjdir)) $(if $(MOZ_PROFILE_USE),-C profile-use=$(PGO_PROFILE_PATH))
++ifdef MOZ_PROFILE_GENERATE
++rust_pgo_flags := -C profile-generate=$(topobjdir)
++# The C compiler may be passed extra llvm flags for PGO that we also want to pass to rust as well.
++# In PROFILE_GEN_CFLAGS, they look like "-mllvm foo", and we want "-C llvm-args=foo", so first turn
++# "-mllvm foo" into "-mllvm:foo" so that it becomes a unique argument, that we can then filter for,
++# excluding other flags, and then turn into the right string.
++rust_pgo_flags += $(patsubst -mllvm:%,-C llvm-args=%,$(filter -mllvm:%,$(subst -mllvm ,-mllvm:,$(PROFILE_GEN_CFLAGS))))
++else # MOZ_PROFILE_USE
++rust_pgo_flags := -C profile-use=$(PGO_PROFILE_PATH)
++endif
+ endif
+ 
+-$(target_rust_ltoable): RUSTFLAGS:=$(rustflags_override) $(rustflags_sancov) $(RUSTFLAGS) $(if $(MOZ_LTO_RUST),-Clinker-plugin-lto) $(rust_pgo_flags)
++$(target_rust_ltoable): RUSTFLAGS:=$(rustflags_override) $(rustflags_sancov) $(RUSTFLAGS) $(if $(MOZ_LTO_RUST_CROSS),-Clinker-plugin-lto) $(rust_pgo_flags)
+ $(target_rust_nonltoable): RUSTFLAGS:=$(rustflags_override) $(rustflags_sancov) $(RUSTFLAGS)
+ 
+ TARGET_RECIPES := $(target_rust_ltoable) $(target_rust_nonltoable)
+@@ -312,17 +323,19 @@ $(RUST_LIBRARY_FILE): force-cargo-library-build
+ # When we are building in --enable-release mode; we add an additional check to confirm
+ # that we are not importing any networking-related functions in rust code. This reduces
+ # the chance of proxy bypasses originating from rust code.
+-# The check only works when rust code is built with -Clto.
++# The check only works when rust code is built with -Clto but without MOZ_LTO_RUST_CROSS.
+ # Sanitizers and sancov also fail because compiler-rt hooks network functions.
+ ifndef MOZ_PROFILE_GENERATE
+ ifeq ($(OS_ARCH), Linux)
+ ifeq (,$(rustflags_sancov)$(MOZ_ASAN)$(MOZ_TSAN)$(MOZ_UBSAN))
++ifndef MOZ_LTO_RUST_CROSS
+ ifneq (,$(filter -Clto,$(cargo_rustc_flags)))
+ 	$(call py_action,check_binary,--target --networking $@)
+ endif
+ endif
+ endif
+ endif
++endif
+ 
+ force-cargo-library-check:
+ 	$(call CARGO_CHECK) --lib $(cargo_target_flag) $(rust_features_flag)

Added: js78/trunk/0002-Fixes-for-Python-3.10.patch
===================================================================
--- js78/trunk/0002-Fixes-for-Python-3.10.patch	                        (rev 0)
+++ js78/trunk/0002-Fixes-for-Python-3.10.patch	2022-07-13 18:25:55 UTC (rev 1252589)
@@ -0,0 +1,1013 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: "Jan Alexander Steffens (heftig)" <jan.steffens at gmail.com>
+Date: Tue, 11 Jan 2022 19:26:43 +0100
+Subject: [PATCH] Fixes for Python 3.10
+
+Bug 1719144 cherry-picked from Firefox Nightly.
+---
+ python/mach/mach/config.py                    |   5 +-
+ python/mach/mach/decorators.py                |   3 +-
+ python/mach/mach/main.py                      |   2 +-
+ .../mozbuild/backend/configenvironment.py     |   3 +-
+ python/mozbuild/mozbuild/makeutil.py          |   2 +-
+ python/mozbuild/mozbuild/util.py              |   3 +-
+ taskcluster/taskgraph/util/schema.py          |   3 +-
+ .../manifestparser/manifestparser/filters.py  |   3 +-
+ third_party/python/gyp/pylib/gyp/common.py    |   3 +-
+ third_party/python/requirements.in            |   2 +-
+ third_party/python/requirements.txt           |   6 +-
+ .../{ => voluptuous-0.12.1.dist-info}/COPYING |   0
+ .../METADATA}                                 | 114 +++++++---
+ .../voluptuous-0.12.1.dist-info/RECORD        |  11 +
+ .../voluptuous-0.12.1.dist-info/WHEEL         |  11 +
+ .../top_level.txt                             |   0
+ .../python/voluptuous/voluptuous/__init__.py  |   2 +-
+ .../python/voluptuous/voluptuous/error.py     |   4 +-
+ .../voluptuous/voluptuous/schema_builder.py   |  25 ++-
+ .../python/voluptuous/voluptuous/util.py      |  18 +-
+ .../voluptuous/voluptuous/validators.py       | 198 ++++++++++++------
+ 21 files changed, 300 insertions(+), 118 deletions(-)
+ copy third_party/python/voluptuous/{ => voluptuous-0.12.1.dist-info}/COPYING (100%)
+ rename third_party/python/voluptuous/{README.md => voluptuous-0.12.1.dist-info/METADATA} (83%)
+ create mode 100644 third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD
+ create mode 100644 third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL
+ rename third_party/python/{psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info => voluptuous/voluptuous-0.12.1.dist-info}/top_level.txt (100%)
+
+diff --git a/python/mach/mach/config.py b/python/mach/mach/config.py
+index 7210eca82308..6605e381b310 100644
+--- a/python/mach/mach/config.py
++++ b/python/mach/mach/config.py
+@@ -17,6 +17,7 @@ settings are available.
+ from __future__ import absolute_import, unicode_literals
+ 
+ import collections
++import collections.abc
+ import os
+ import sys
+ import six
+@@ -144,7 +145,7 @@ def reraise_attribute_error(func):
+     return _
+ 
+ 
+-class ConfigSettings(collections.Mapping):
++class ConfigSettings(collections.abc.Mapping):
+     """Interface for configuration settings.
+ 
+     This is the main interface to the configuration.
+@@ -190,7 +191,7 @@ class ConfigSettings(collections.Mapping):
+     will result in exceptions being raised.
+     """
+ 
+-    class ConfigSection(collections.MutableMapping, object):
++    class ConfigSection(collections.abc.MutableMapping, object):
+         """Represents an individual config section."""
+         def __init__(self, config, name, settings):
+             object.__setattr__(self, '_config', config)
+diff --git a/python/mach/mach/decorators.py b/python/mach/mach/decorators.py
+index 27f7f34a6ddc..8b1a49c76dc2 100644
+--- a/python/mach/mach/decorators.py
++++ b/python/mach/mach/decorators.py
+@@ -6,6 +6,7 @@ from __future__ import absolute_import, unicode_literals
+ 
+ import argparse
+ import collections
++import collections.abc
+ 
+ from .base import MachError
+ from .registrar import Registrar
+@@ -140,7 +141,7 @@ def CommandProvider(cls):
+               'Conditions argument must take a list ' + \
+               'of functions. Found %s instead.'
+ 
+-        if not isinstance(command.conditions, collections.Iterable):
++        if not isinstance(command.conditions, collections.abc.Iterable):
+             msg = msg % (command.name, type(command.conditions))
+             raise MachError(msg)
+ 
+diff --git a/python/mach/mach/main.py b/python/mach/mach/main.py
+index a7311806d0a4..0f2c6a16d9d2 100644
+--- a/python/mach/mach/main.py
++++ b/python/mach/mach/main.py
+@@ -16,7 +16,7 @@ import os
+ import sys
+ import traceback
+ import uuid
+-from collections import Iterable
++from collections.abc import Iterable
+ 
+ from six import string_types
+ 
+diff --git a/python/mozbuild/mozbuild/backend/configenvironment.py b/python/mozbuild/mozbuild/backend/configenvironment.py
+index 20d1a9fa69da..898cabb73b0b 100644
+--- a/python/mozbuild/mozbuild/backend/configenvironment.py
++++ b/python/mozbuild/mozbuild/backend/configenvironment.py
+@@ -9,7 +9,8 @@ import six
+ import sys
+ import json
+ 
+-from collections import Iterable, OrderedDict
++from collections.abc import Iterable
++from collections import OrderedDict
+ from types import ModuleType
+ 
+ import mozpack.path as mozpath
+diff --git a/python/mozbuild/mozbuild/makeutil.py b/python/mozbuild/mozbuild/makeutil.py
+index 4da1a3b268e5..4ce56848cd6c 100644
+--- a/python/mozbuild/mozbuild/makeutil.py
++++ b/python/mozbuild/mozbuild/makeutil.py
+@@ -7,7 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals
+ import os
+ import re
+ import six
+-from collections import Iterable
++from collections.abc import Iterable
+ 
+ 
+ class Makefile(object):
+diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py
+index 044cf645c1f1..ed30088c0059 100644
+--- a/python/mozbuild/mozbuild/util.py
++++ b/python/mozbuild/mozbuild/util.py
+@@ -9,6 +9,7 @@ from __future__ import absolute_import, print_function, unicode_literals
+ 
+ import argparse
+ import collections
++import collections.abc
+ import ctypes
+ import difflib
+ import errno
+@@ -782,7 +783,7 @@ class HierarchicalStringList(object):
+         self._strings = StrictOrderingOnAppendList()
+         self._children = {}
+ 
+-    class StringListAdaptor(collections.Sequence):
++    class StringListAdaptor(collections.abc.Sequence):
+         def __init__(self, hsl):
+             self._hsl = hsl
+ 
+diff --git a/taskcluster/taskgraph/util/schema.py b/taskcluster/taskgraph/util/schema.py
+index 0b15d3d5fd6f..29e36793f336 100644
+--- a/taskcluster/taskgraph/util/schema.py
++++ b/taskcluster/taskgraph/util/schema.py
+@@ -7,6 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals
+ import re
+ import pprint
+ import collections
++import collections.abc
+ import voluptuous
+ 
+ from six import text_type, iteritems
+@@ -160,7 +161,7 @@ def check_schema(schema):
+                     'Unexpected type in YAML schema: {} @ {}'.format(
+                         type(k).__name__, path))
+ 
+-        if isinstance(sch, collections.Mapping):
++        if isinstance(sch, collections.abc.Mapping):
+             for k, v in iteritems(sch):
+                 child = "{}[{!r}]".format(path, k)
+                 check_identifier(child, k)
+diff --git a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py
+index 287ee033b222..b1d6080031f6 100644
+--- a/testing/mozbase/manifestparser/manifestparser/filters.py
++++ b/testing/mozbase/manifestparser/manifestparser/filters.py
+@@ -12,7 +12,8 @@ from __future__ import absolute_import
+ 
+ import itertools
+ import os
+-from collections import defaultdict, MutableSequence
++from collections import defaultdict
++from collections.abc import MutableSequence
+ 
+ import six
+ from six import string_types
+diff --git a/third_party/python/gyp/pylib/gyp/common.py b/third_party/python/gyp/pylib/gyp/common.py
+index b268d229a483..2195e1e458e3 100644
+--- a/third_party/python/gyp/pylib/gyp/common.py
++++ b/third_party/python/gyp/pylib/gyp/common.py
+@@ -5,6 +5,7 @@
+ from __future__ import with_statement
+ 
+ import collections
++import collections.abc
+ import errno
+ import filecmp
+ import os.path
+@@ -494,7 +495,7 @@ def uniquer(seq, idfun=None):
+ 
+ 
+ # Based on http://code.activestate.com/recipes/576694/.
+-class OrderedSet(collections.MutableSet):
++class OrderedSet(collections.abc.MutableSet):
+   def __init__(self, iterable=None):
+     self.end = end = []
+     end += [None, end, end]         # sentinel node for doubly linked list
+diff --git a/third_party/python/requirements.in b/third_party/python/requirements.in
+index b65c92e30c09..1127ab280c84 100644
+--- a/third_party/python/requirements.in
++++ b/third_party/python/requirements.in
+@@ -42,4 +42,4 @@ requests==2.9.1
+ responses==0.10.6
+ sentry-sdk==0.14.3
+ six==1.13.0
+-voluptuous==0.11.5
++voluptuous==0.12.1
+diff --git a/third_party/python/requirements.txt b/third_party/python/requirements.txt
+index fd0b6cb1a181..5742c9cdb771 100644
+--- a/third_party/python/requirements.txt
++++ b/third_party/python/requirements.txt
+@@ -172,9 +172,9 @@ urllib3==1.25.9 \
+     --hash=sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527 \
+     --hash=sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115 \
+     # via sentry-sdk
+-voluptuous==0.11.5 \
+-    --hash=sha256:303542b3fc07fb52ec3d7a1c614b329cdbee13a9d681935353d8ea56a7bfa9f1 \
+-    --hash=sha256:567a56286ef82a9d7ae0628c5842f65f516abcb496e74f3f59f1d7b28df314ef \
++voluptuous==0.12.1 \
++    --hash=sha256:663572419281ddfaf4b4197fd4942d181630120fb39b333e3adad70aeb56444b \
++    --hash=sha256:8ace33fcf9e6b1f59406bfaf6b8ec7bcc44266a9f29080b4deb4fe6ff2492386
+     # via -r requirements-mach-vendor-python.in
+ 
+ # WARNING: The following packages were not pinned, but pip requires them to be
+diff --git a/third_party/python/voluptuous/COPYING b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/COPYING
+similarity index 100%
+copy from third_party/python/voluptuous/COPYING
+copy to third_party/python/voluptuous/voluptuous-0.12.1.dist-info/COPYING
+diff --git a/third_party/python/voluptuous/README.md b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA
+similarity index 83%
+rename from third_party/python/voluptuous/README.md
+rename to third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA
+index 46e2288f4bea..914a5761d63a 100644
+--- a/third_party/python/voluptuous/README.md
++++ b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA
+@@ -1,7 +1,67 @@
++<<<<<<<< HEAD:third_party/python/voluptuous/README.md
++|||||||| parent of 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.11.5.dist-info/METADATA
++Metadata-Version: 2.1
++Name: voluptuous
++Version: 0.11.5
++Summary: # Voluptuous is a Python data validation library
++Home-page: https://github.com/alecthomas/voluptuous
++Author: Alec Thomas
++Author-email: alec at swapoff.org
++License: BSD
++Download-URL: https://pypi.python.org/pypi/voluptuous
++Platform: any
++Classifier: Development Status :: 5 - Production/Stable
++Classifier: Intended Audience :: Developers
++Classifier: License :: OSI Approved :: BSD License
++Classifier: Operating System :: OS Independent
++Classifier: Programming Language :: Python :: 2
++Classifier: Programming Language :: Python :: 2.7
++Classifier: Programming Language :: Python :: 3
++Classifier: Programming Language :: Python :: 3.6
++Classifier: Programming Language :: Python :: 3.7
++Description-Content-Type: text/markdown
++
++========
++Metadata-Version: 2.1
++Name: voluptuous
++Version: 0.12.1
++Summary: UNKNOWN
++Home-page: https://github.com/alecthomas/voluptuous
++Author: Alec Thomas
++Author-email: alec at swapoff.org
++License: BSD
++Download-URL: https://pypi.python.org/pypi/voluptuous
++Platform: any
++Classifier: Development Status :: 5 - Production/Stable
++Classifier: Intended Audience :: Developers
++Classifier: License :: OSI Approved :: BSD License
++Classifier: Operating System :: OS Independent
++Classifier: Programming Language :: Python :: 2
++Classifier: Programming Language :: Python :: 2.7
++Classifier: Programming Language :: Python :: 3
++Classifier: Programming Language :: Python :: 3.6
++Classifier: Programming Language :: Python :: 3.7
++Classifier: Programming Language :: Python :: 3.8
++Classifier: Programming Language :: Python :: 3.9
++Description-Content-Type: text/markdown
++
++
++# CONTRIBUTIONS ONLY
++
++**What does this mean?** I do not have time to fix issues myself. The only way fixes or new features will be added is by people submitting PRs.
++
++**Current status:** Voluptuous is largely feature stable. There hasn't been a need to add new features in a while, but there are some bugs that should be fixed.
++
++**Why?** I no longer use Voluptuous personally (in fact I no longer regularly write Python code). Rather than leave the project in a limbo of people filing issues and wondering why they're not being worked on, I believe this notice will more clearly set expectations.
++
++>>>>>>>> 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA
+ # Voluptuous is a Python data validation library
+ 
+-[![Build Status](https://travis-ci.org/alecthomas/voluptuous.png)](https://travis-ci.org/alecthomas/voluptuous)
+-[![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.png)](https://gitter.im/alecthomas/Lobby)
++[![image](https://img.shields.io/pypi/v/voluptuous.svg)](https://python.org/pypi/voluptuous)
++[![image](https://img.shields.io/pypi/l/voluptuous.svg)](https://python.org/pypi/voluptuous)
++[![image](https://img.shields.io/pypi/pyversions/voluptuous.svg)](https://python.org/pypi/voluptuous)
++[![Build Status](https://travis-ci.org/alecthomas/voluptuous.svg)](https://travis-ci.org/alecthomas/voluptuous)
++[![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.svg)](https://gitter.im/alecthomas/Lobby)
+ 
+ Voluptuous, *despite* the name, is a Python data validation library. It
+ is primarily intended for validating data coming into Python as JSON,
+@@ -32,6 +92,28 @@ The documentation is provided [here](http://alecthomas.github.io/voluptuous/).
+ 
+ See [CHANGELOG.md](https://github.com/alecthomas/voluptuous/blob/master/CHANGELOG.md).
+ 
++## Why use Voluptuous over another validation library?
++
++**Validators are simple callables:**
++No need to subclass anything, just use a function.
++
++**Errors are simple exceptions:**
++A validator can just `raise Invalid(msg)` and expect the user to get
++useful messages.
++
++**Schemas are basic Python data structures:**
++Should your data be a dictionary of integer keys to strings?
++`{int: str}` does what you expect. List of integers, floats or
++strings? `[int, float, str]`.
++
++**Designed from the ground up for validating more than just forms:**
++Nested data structures are treated in the same way as any other
++type. Need a list of dictionaries? `[{}]`
++
++**Consistency:**
++Types in the schema are checked as types. Values are compared as
++values. Callables are called to validate. Simple.
++
+ ## Show me an example
+ 
+ Twitter's [user search API](https://dev.twitter.com/rest/reference/get/users/search) accepts
+@@ -189,9 +271,9 @@ True
+ 
+ ```
+ 
+-### URL's
++### URLs
+ 
+-URL's in the schema are matched by using `urlparse` library.
++URLs in the schema are matched by using `urlparse` library.
+ 
+ ```pycon
+ >>> from voluptuous import Url
+@@ -679,35 +761,13 @@ cross-field validator will not run:
+ s({'password':'123', 'password_again': 1337})
+ ```
+ 
+-## Running tests.
++## Running tests
+ 
+ Voluptuous is using nosetests:
+ 
+     $ nosetests
+ 
+ 
+-## Why use Voluptuous over another validation library?
+-
+-**Validators are simple callables**
+-:   No need to subclass anything, just use a function.
+-
+-**Errors are simple exceptions.**
+-:   A validator can just `raise Invalid(msg)` and expect the user to get
+-useful messages.
+-
+-**Schemas are basic Python data structures.**
+-:   Should your data be a dictionary of integer keys to strings?
+-`{int: str}` does what you expect. List of integers, floats or
+-strings? `[int, float, str]`.
+-
+-**Designed from the ground up for validating more than just forms.**
+-:   Nested data structures are treated in the same way as any other
+-type. Need a list of dictionaries? `[{}]`
+-
+-**Consistency.**
+-:   Types in the schema are checked as types. Values are compared as
+-values. Callables are called to validate. Simple.
+-
+ ## Other libraries and inspirations
+ 
+ Voluptuous is heavily inspired by
+diff --git a/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD
+new file mode 100644
+index 000000000000..5f7fde6e52bc
+--- /dev/null
++++ b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD
+@@ -0,0 +1,11 @@
++voluptuous/__init__.py,sha256=tSYWPAIWee6YwcMK8hxmaiagG_swokUMeH8MluJLWZM,203
++voluptuous/error.py,sha256=fLRmJwKp0bqRGgBM34ztg9MTxhEOf465sbQcvJlEtAk,4026
++voluptuous/humanize.py,sha256=hZlhdN4aVeGDIXdtSTeyEbmku65SDPRuut3mOfuRQP0,1606
++voluptuous/schema_builder.py,sha256=xVJpf3uJMyS1CKwzDw3rEK39ebqDiF_A2Kbq4VnZ3Aw,43677
++voluptuous/util.py,sha256=RXLZ2b5y-A4az3teG6UpCx2UZcXpS11sIVCdORyKar8,3150
++voluptuous/validators.py,sha256=xZgyKH-EVqUHCHral5gzViXq4HfEjJEsGdQy7z6llc0,32798
++voluptuous-0.12.1.dist-info/COPYING,sha256=JHtJdren-k2J2Vh8qlCVVh60bcVFfyJ59ipitUUq3qk,1486
++voluptuous-0.12.1.dist-info/METADATA,sha256=OdEydy5NydPFFzAhP8qj_YqJsQPQvoIt5ZT1t8B14Ok,20120
++voluptuous-0.12.1.dist-info/WHEEL,sha256=S6zePDbUAjzMmpYOg2cHDxuYFWw7WiOXt6ogM6hIB5Q,92
++voluptuous-0.12.1.dist-info/top_level.txt,sha256=TTdVb7M-vndb67UqTmAxuVjpAUakrlAWJYqvo3w4Iqc,11
++voluptuous-0.12.1.dist-info/RECORD,,
+diff --git a/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL
+new file mode 100644
+index 000000000000..4c2552761e69
+--- /dev/null
++++ b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL
+@@ -0,0 +1,11 @@
++Wheel-Version: 1.0
++<<<<<<<< HEAD:testing/web-platform/tests/tools/third_party/six/six-1.13.0.dist-info/WHEEL
++Generator: bdist_wheel (0.32.1)
++|||||||| parent of 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.11.5.dist-info/WHEEL
++Generator: bdist_wheel (0.31.1)
++========
++Generator: bdist_wheel (0.36.1)
++>>>>>>>> 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL
++Root-Is-Purelib: true
++Tag: py3-none-any
++
+diff --git a/third_party/python/psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info/top_level.txt b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/top_level.txt
+similarity index 100%
+rename from third_party/python/psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info/top_level.txt
+rename to third_party/python/voluptuous/voluptuous-0.12.1.dist-info/top_level.txt
+diff --git a/third_party/python/voluptuous/voluptuous/__init__.py b/third_party/python/voluptuous/voluptuous/__init__.py
+index 10236d5a6670..4d09fe670fd4 100644
+--- a/third_party/python/voluptuous/voluptuous/__init__.py
++++ b/third_party/python/voluptuous/voluptuous/__init__.py
+@@ -5,5 +5,5 @@ from voluptuous.validators import *
+ from voluptuous.util import *
+ from voluptuous.error import *
+ 
+-__version__ = '0.11.5'
++__version__ = '0.12.1'
+ __author__ = 'alecthomas'
+diff --git a/third_party/python/voluptuous/voluptuous/error.py b/third_party/python/voluptuous/voluptuous/error.py
+index 86c4e0a35933..97f37d2c7c4b 100644
+--- a/third_party/python/voluptuous/voluptuous/error.py
++++ b/third_party/python/voluptuous/voluptuous/error.py
+@@ -142,11 +142,11 @@ class BooleanInvalid(Invalid):
+ 
+ 
+ class UrlInvalid(Invalid):
+-    """The value is not a url."""
++    """The value is not a URL."""
+ 
+ 
+ class EmailInvalid(Invalid):
+-    """The value is not a email."""
++    """The value is not an email address."""
+ 
+ 
+ class FileInvalid(Invalid):
+diff --git a/third_party/python/voluptuous/voluptuous/schema_builder.py b/third_party/python/voluptuous/voluptuous/schema_builder.py
+index 8d7a81a3e3e5..df19c8da2ddf 100644
+--- a/third_party/python/voluptuous/voluptuous/schema_builder.py
++++ b/third_party/python/voluptuous/voluptuous/schema_builder.py
+@@ -22,6 +22,11 @@ else:
+     def iteritems(d):
+         return d.iteritems()
+ 
++if sys.version_info >= (3, 3):
++    _Mapping = collections.abc.Mapping
++else:
++    _Mapping = collections.Mapping
++
+ """Schema validation for Python data structures.
+ 
+ Given eg. a nested data structure like this:
+@@ -280,7 +285,7 @@ class Schema(object):
+             return schema.__voluptuous_compile__(self)
+         if isinstance(schema, Object):
+             return self._compile_object(schema)
+-        if isinstance(schema, collections.Mapping):
++        if isinstance(schema, _Mapping):
+             return self._compile_dict(schema)
+         elif isinstance(schema, list):
+             return self._compile_list(schema)
+@@ -610,11 +615,11 @@ class Schema(object):
+             if not isinstance(data, seq_type):
+                 raise er.SequenceTypeInvalid('expected a %s' % seq_type_name, path)
+ 
+-            # Empty seq schema, allow any data.
++            # Empty seq schema, reject any data.
+             if not schema:
+                 if data:
+                     raise er.MultipleInvalid([
+-                        er.ValueInvalid('not a valid value', [value]) for value in data
++                        er.ValueInvalid('not a valid value', path if path else data)
+                     ])
+                 return data
+ 
+@@ -735,7 +740,7 @@ class Schema(object):
+ 
+         result = self.schema.copy()
+ 
+-        # returns the key that may have been passed as arugment to Marker constructor
++        # returns the key that may have been passed as an argument to Marker constructor
+         def key_literal(key):
+             return (key.schema if isinstance(key, Marker) else key)
+ 
+@@ -771,9 +776,10 @@ class Schema(object):
+                 result[key] = value
+ 
+         # recompile and send old object
++        result_cls = type(self)
+         result_required = (required if required is not None else self.required)
+         result_extra = (extra if extra is not None else self.extra)
+-        return Schema(result, required=result_required, extra=result_extra)
++        return result_cls(result, required=result_required, extra=result_extra)
+ 
+ 
+ def _compile_scalar(schema):
+@@ -809,7 +815,7 @@ def _compile_scalar(schema):
+         def validate_callable(path, data):
+             try:
+                 return schema(data)
+-            except ValueError as e:
++            except ValueError:
+                 raise er.ValueInvalid('not a valid value', path)
+             except er.Invalid as e:
+                 e.prepend(path)
+@@ -1121,8 +1127,11 @@ class Inclusive(Optional):
+     True
+     """
+ 
+-    def __init__(self, schema, group_of_inclusion, msg=None):
+-        super(Inclusive, self).__init__(schema, msg=msg)
++    def __init__(self, schema, group_of_inclusion,
++                 msg=None, description=None, default=UNDEFINED):
++        super(Inclusive, self).__init__(schema, msg=msg,
++                                        default=default,
++                                        description=description)
+         self.group_of_inclusion = group_of_inclusion
+ 
+ 
+diff --git a/third_party/python/voluptuous/voluptuous/util.py b/third_party/python/voluptuous/voluptuous/util.py
+index 434c360c7e95..e0ff43f8500a 100644
+--- a/third_party/python/voluptuous/voluptuous/util.py
++++ b/third_party/python/voluptuous/voluptuous/util.py
+@@ -7,54 +7,62 @@ from voluptuous import validators
+ __author__ = 'tusharmakkar08'
+ 
+ 
++def _fix_str(v):
++    if sys.version_info[0] == 2 and isinstance(v, unicode):
++        s = v
++    else:
++        s = str(v)
++    return s
++
++
+ def Lower(v):
+     """Transform a string to lower case.
+ 
+     >>> s = Schema(Lower)
+     >>> s('HI')
+     'hi'
+     """
+-    return str(v).lower()
++    return _fix_str(v).lower()
+ 
+ 
+ def Upper(v):
+     """Transform a string to upper case.
+ 
+     >>> s = Schema(Upper)
+     >>> s('hi')
+     'HI'
+     """
+-    return str(v).upper()
++    return _fix_str(v).upper()
+ 
+ 
+ def Capitalize(v):
+     """Capitalise a string.
+ 
+     >>> s = Schema(Capitalize)
+     >>> s('hello world')
+     'Hello world'
+     """
+-    return str(v).capitalize()
++    return _fix_str(v).capitalize()
+ 
+ 
+ def Title(v):
+     """Title case a string.
+ 
+     >>> s = Schema(Title)
+     >>> s('hello world')
+     'Hello World'
+     """
+-    return str(v).title()
++    return _fix_str(v).title()
+ 
+ 
+ def Strip(v):
+     """Strip whitespace from a string.
+ 
+     >>> s = Schema(Strip)
+     >>> s('  hello world  ')
+     'hello world'
+     """
+-    return str(v).strip()
++    return _fix_str(v).strip()
+ 
+ 
+ class DefaultTo(object):
+diff --git a/third_party/python/voluptuous/voluptuous/validators.py b/third_party/python/voluptuous/voluptuous/validators.py
+index d5e3ed598051..fac9cc7717c0 100644
+--- a/third_party/python/voluptuous/voluptuous/validators.py
++++ b/third_party/python/voluptuous/voluptuous/validators.py
+@@ -192,33 +192,44 @@ class _WithSubValidators(object):
+     def __init__(self, *validators, **kwargs):
+         self.validators = validators
+         self.msg = kwargs.pop('msg', None)
++        self.required = kwargs.pop('required', False)
++        self.discriminant = kwargs.pop('discriminant', None)
+ 
+     def __voluptuous_compile__(self, schema):
+-        self._compiled = [
+-            schema._compile(v)
+-            for v in self.validators
+-        ]
++        self._compiled = []
++        old_required = schema.required
++        self.schema = schema
++        for v in self.validators:
++            schema.required = self.required
++            self._compiled.append(schema._compile(v))
++        schema.required = old_required
+         return self._run
+ 
+     def _run(self, path, value):
++        if self.discriminant is not None:
++            self._compiled = [
++                self.schema._compile(v)
++                for v in self.discriminant(value, self.validators)
++            ]
++
+         return self._exec(self._compiled, value, path)
+ 
+     def __call__(self, v):
+         return self._exec((Schema(val) for val in self.validators), v)
+ 
+     def __repr__(self):
+         return '%s(%s, msg=%r)' % (
+             self.__class__.__name__,
+             ", ".join(repr(v) for v in self.validators),
+             self.msg
+         )
+ 
+ 
+ class Any(_WithSubValidators):
+     """Use the first validated value.
+ 
+     :param msg: Message to deliver to user if validation fails.
+-    :param kwargs: All other keyword arguments are passed to the sub-Schema constructors.
++    :param kwargs: All other keyword arguments are passed to the sub-schema constructors.
+     :returns: Return value of the first validator that passes.
+ 
+     >>> validate = Schema(Any('true', 'false',
+@@ -262,13 +273,57 @@ class Any(_WithSubValidators):
+ Or = Any
+ 
+ 
++class Union(_WithSubValidators):
++    """Use the first validated value among those selected by discriminant.
++
++    :param msg: Message to deliver to user if validation fails.
++    :param discriminant(value, validators): Returns the filtered list of validators based on the value.
++    :param kwargs: All other keyword arguments are passed to the sub-schema constructors.
++    :returns: Return value of the first validator that passes.
++
++    >>> validate = Schema(Union({'type':'a', 'a_val':'1'},{'type':'b', 'b_val':'2'},
++    ...                         discriminant=lambda val, alt: filter(
++    ...                         lambda v : v['type'] == val['type'] , alt)))
++    >>> validate({'type':'a', 'a_val':'1'}) == {'type':'a', 'a_val':'1'}
++    True
++    >>> with raises(MultipleInvalid, "not a valid value for dictionary value @ data['b_val']"):
++    ...   validate({'type':'b', 'b_val':'5'})
++
++    ```discriminant({'type':'b', 'a_val':'5'}, [{'type':'a', 'a_val':'1'},{'type':'b', 'b_val':'2'}])``` is invoked
++
++    Without the discriminant, the exception would be "extra keys not allowed @ data['b_val']"
++    """
++
++    def _exec(self, funcs, v, path=None):
++        error = None
++        for func in funcs:
++            try:
++                if path is None:
++                    return func(v)
++                else:
++                    return func(path, v)
++            except Invalid as e:
++                if error is None or len(e.path) > len(error.path):
++                    error = e
++        else:
++            if error:
++                raise error if self.msg is None else AnyInvalid(
++                    self.msg, path=path)
++            raise AnyInvalid(self.msg or 'no valid value found',
++                             path=path)
++
++
++# Convenience alias
++Switch = Union
++
++
+ class All(_WithSubValidators):
+     """Value must pass all validators.
+ 
+     The output of each validator is passed as input to the next.
+ 
+     :param msg: Message to deliver to user if validation fails.
+-    :param kwargs: All other keyword arguments are passed to the sub-Schema constructors.
++    :param kwargs: All other keyword arguments are passed to the sub-schema constructors.
+ 
+     >>> validate = Schema(All('10', Coerce(int)))
+     >>> validate('10')
+@@ -303,7 +358,7 @@ class Match(object):
+     >>> with raises(MultipleInvalid, 'expected string or buffer'):
+     ...   validate(123)
+ 
+-    Pattern may also be a _compiled regular expression:
++    Pattern may also be a compiled regular expression:
+ 
+     >>> validate = Schema(Match(re.compile(r'0x[A-F0-9]+', re.I)))
+     >>> validate('0x123ef4')
+@@ -361,38 +416,38 @@ def _url_validation(v):
+     return parsed
+ 
+ 
+- at message('expected an Email', cls=EmailInvalid)
++ at message('expected an email address', cls=EmailInvalid)
+ def Email(v):
+-    """Verify that the value is an Email or not.
++    """Verify that the value is an email address or not.
+ 
+     >>> s = Schema(Email())
+-    >>> with raises(MultipleInvalid, 'expected an Email'):
++    >>> with raises(MultipleInvalid, 'expected an email address'):
+     ...   s("a.com")
+-    >>> with raises(MultipleInvalid, 'expected an Email'):
++    >>> with raises(MultipleInvalid, 'expected an email address'):
+     ...   s("a at .com")
+-    >>> with raises(MultipleInvalid, 'expected an Email'):
++    >>> with raises(MultipleInvalid, 'expected an email address'):
+     ...   s("a at .com")
+     >>> s('t at x.com')
+     't at x.com'
+     """
+     try:
+         if not v or "@" not in v:
+-            raise EmailInvalid("Invalid Email")
++            raise EmailInvalid("Invalid email address")
+         user_part, domain_part = v.rsplit('@', 1)
+ 
+         if not (USER_REGEX.match(user_part) and DOMAIN_REGEX.match(domain_part)):
+-            raise EmailInvalid("Invalid Email")
++            raise EmailInvalid("Invalid email address")
+         return v
+     except:
+         raise ValueError
+ 
+ 
+- at message('expected a Fully qualified domain name URL', cls=UrlInvalid)
++ at message('expected a fully qualified domain name URL', cls=UrlInvalid)
+ def FqdnUrl(v):
+-    """Verify that the value is a Fully qualified domain name URL.
++    """Verify that the value is a fully qualified domain name URL.
+ 
+     >>> s = Schema(FqdnUrl())
+-    >>> with raises(MultipleInvalid, 'expected a Fully qualified domain name URL'):
++    >>> with raises(MultipleInvalid, 'expected a fully qualified domain name URL'):
+     ...   s("http://localhost/")
+     >>> s('http://w3.org')
+     'http://w3.org'
+@@ -423,29 +478,29 @@ def Url(v):
+         raise ValueError
+ 
+ 
+- at message('not a file', cls=FileInvalid)
++ at message('Not a file', cls=FileInvalid)
+ @truth
+ def IsFile(v):
+     """Verify the file exists.
+ 
+     >>> os.path.basename(IsFile()(__file__)).startswith('validators.py')
+     True
+-    >>> with raises(FileInvalid, 'not a file'):
++    >>> with raises(FileInvalid, 'Not a file'):
+     ...   IsFile()("random_filename_goes_here.py")
+     >>> with raises(FileInvalid, 'Not a file'):
+     ...   IsFile()(None)
+     """
+     try:
+         if v:
+             v = str(v)
+             return os.path.isfile(v)
+         else:
+             raise FileInvalid('Not a file')
+     except TypeError:
+         raise FileInvalid('Not a file')
+ 
+ 
+- at message('not a directory', cls=DirInvalid)
++ at message('Not a directory', cls=DirInvalid)
+ @truth
+ def IsDir(v):
+     """Verify the directory exists.
+@@ -487,20 +542,20 @@ def PathExists(v):
+         raise PathInvalid("Not a Path")
+ 
+ 
+-def Maybe(validator):
++def Maybe(validator, msg=None):
+     """Validate that the object matches given validator or is None.
+ 
+-    :raises Invalid: if the value does not match the given validator and is not
+-        None
++    :raises Invalid: If the value does not match the given validator and is not
++        None.
+ 
+     >>> s = Schema(Maybe(int))
+     >>> s(10)
+     10
+     >>> with raises(Invalid):
+     ...  s("string")
+ 
+     """
+-    return Any(None, validator)
++    return Any(validator, None, msg=msg)
+ 
+ 
+ class Range(object):
+@@ -533,23 +588,30 @@ class Range(object):
+         self.msg = msg
+ 
+     def __call__(self, v):
+-        if self.min_included:
+-            if self.min is not None and not v >= self.min:
+-                raise RangeInvalid(
+-                    self.msg or 'value must be at least %s' % self.min)
+-        else:
+-            if self.min is not None and not v > self.min:
+-                raise RangeInvalid(
+-                    self.msg or 'value must be higher than %s' % self.min)
+-        if self.max_included:
+-            if self.max is not None and not v <= self.max:
+-                raise RangeInvalid(
+-                    self.msg or 'value must be at most %s' % self.max)
+-        else:
+-            if self.max is not None and not v < self.max:
+-                raise RangeInvalid(
+-                    self.msg or 'value must be lower than %s' % self.max)
+-        return v
++        try:
++            if self.min_included:
++                if self.min is not None and not v >= self.min:
++                    raise RangeInvalid(
++                        self.msg or 'value must be at least %s' % self.min)
++            else:
++                if self.min is not None and not v > self.min:
++                    raise RangeInvalid(
++                        self.msg or 'value must be higher than %s' % self.min)
++            if self.max_included:
++                if self.max is not None and not v <= self.max:
++                    raise RangeInvalid(
++                        self.msg or 'value must be at most %s' % self.max)
++            else:
++                if self.max is not None and not v < self.max:
++                    raise RangeInvalid(
++                        self.msg or 'value must be lower than %s' % self.max)
++
++            return v
++
++        # Objects that lack a partial ordering, e.g. None or strings will raise TypeError
++        except TypeError:
++            raise RangeInvalid(
++                self.msg or 'invalid value or type (must have a partial ordering)')
+ 
+     def __repr__(self):
+         return ('Range(min=%r, max=%r, min_included=%r,'
+@@ -579,32 +641,44 @@ class Clamp(object):
+         self.msg = msg
+ 
+     def __call__(self, v):
+-        if self.min is not None and v < self.min:
+-            v = self.min
+-        if self.max is not None and v > self.max:
+-            v = self.max
+-        return v
++        try:
++            if self.min is not None and v < self.min:
++                v = self.min
++            if self.max is not None and v > self.max:
++                v = self.max
++            return v
++
++        # Objects that lack a partial ordering, e.g. None or strings will raise TypeError
++        except TypeError:
++            raise RangeInvalid(
++                self.msg or 'invalid value or type (must have a partial ordering)')
+ 
+     def __repr__(self):
+         return 'Clamp(min=%s, max=%s)' % (self.min, self.max)
+ 
+ 
+ class Length(object):
+     """The length of a value must be in a certain range."""
+ 
+     def __init__(self, min=None, max=None, msg=None):
+         self.min = min
+         self.max = max
+         self.msg = msg
+ 
+     def __call__(self, v):
+-        if self.min is not None and len(v) < self.min:
+-            raise LengthInvalid(
+-                self.msg or 'length of value must be at least %s' % self.min)
+-        if self.max is not None and len(v) > self.max:
+-            raise LengthInvalid(
+-                self.msg or 'length of value must be at most %s' % self.max)
+-        return v
++        try:
++            if self.min is not None and len(v) < self.min:
++                raise LengthInvalid(
++                    self.msg or 'length of value must be at least %s' % self.min)
++            if self.max is not None and len(v) > self.max:
++                raise LengthInvalid(
++                    self.msg or 'length of value must be at most %s' % self.max)
++            return v
++
++        # Objects that havbe no length e.g. None or strings will raise TypeError
++        except TypeError:
++            raise RangeInvalid(
++                self.msg or 'invalid value or type')
+ 
+     def __repr__(self):
+         return 'Length(min=%s, max=%s)' % (self.min, self.max)
+@@ -663,27 +737,29 @@ class In(object):
+         except TypeError:
+             check = True
+         if check:
+-            raise InInvalid(self.msg or 'value is not allowed')
++            raise InInvalid(self.msg or 
++                            'value must be one of {}'.format(sorted(self.container)))
+         return v
+ 
+     def __repr__(self):
+         return 'In(%s)' % (self.container,)
+ 
+ 
+ class NotIn(object):
+     """Validate that a value is not in a collection."""
+ 
+     def __init__(self, container, msg=None):
+         self.container = container
+         self.msg = msg
+ 
+     def __call__(self, v):
+         try:
+             check = v in self.container
+         except TypeError:
+             check = True
+         if check:
+-            raise NotInInvalid(self.msg or 'value is not allowed')
++            raise NotInInvalid(self.msg or 
++                               'value must not be one of {}'.format(sorted(self.container)))
+         return v
+ 
+     def __repr__(self):
+@@ -722,7 +798,7 @@ class ExactSequence(object):
+     the validators.
+ 
+     :param msg: Message to deliver to user if validation fails.
+-    :param kwargs: All other keyword arguments are passed to the sub-Schema
++    :param kwargs: All other keyword arguments are passed to the sub-schema
+         constructors.
+ 
+     >>> from voluptuous import Schema, ExactSequence
+@@ -887,7 +963,7 @@ class Unordered(object):
+ class Number(object):
+     """
+     Verify the number of digits that are present in the number(Precision),
+-    and the decimal places(Scale)
++    and the decimal places(Scale).
+ 
+     :raises Invalid: If the value does not match the provided Precision and Scale.
+ 
+@@ -951,13 +1027,13 @@ class SomeOf(_WithSubValidators):
+     The output of each validator is passed as input to the next.
+ 
+     :param min_valid: Minimum number of valid schemas.
+-    :param validators: a list of schemas or validators to match input against
++    :param validators: List of schemas or validators to match input against.
+     :param max_valid: Maximum number of valid schemas.
+     :param msg: Message to deliver to user if validation fails.
+-    :param kwargs: All other keyword arguments are passed to the sub-Schema constructors.
++    :param kwargs: All other keyword arguments are passed to the sub-schema constructors.
+ 
+-    :raises NotEnoughValid: if the minimum number of validations isn't met
+-    :raises TooManyValid: if the more validations than the given amount is met
++    :raises NotEnoughValid: If the minimum number of validations isn't met.
++    :raises TooManyValid: If the maximum number of validations is exceeded.
+ 
+     >>> validate = Schema(SomeOf(min_valid=2, validators=[Range(1, 5), Any(float, int), 6.6]))
+     >>> validate(6.6)

Added: js78/trunk/0003-Fixes-for-Rust-1.56.patch
===================================================================
--- js78/trunk/0003-Fixes-for-Rust-1.56.patch	                        (rev 0)
+++ js78/trunk/0003-Fixes-for-Rust-1.56.patch	2022-07-13 18:25:55 UTC (rev 1252589)
@@ -0,0 +1,447 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Henri Sivonen <hsivonen at hsivonen.fi>
+Date: Thu, 15 Jul 2021 08:42:08 +0000
+Subject: [PATCH] Fixes for Rust 1.56
+
+packed_simd updates cherry-picked from Firefox Nightly.
+---
+ .cargo/config.in                              |   2 +-
+ Cargo.lock                                    |   2 +-
+ Cargo.toml                                    |   2 +-
+ .../rust/packed_simd/.cargo-checksum.json     |   2 +-
+ third_party/rust/packed_simd/Cargo.toml       |   6 +-
+ third_party/rust/packed_simd/build.rs         |  28 ++++-
+ .../rust/packed_simd/src/api/shuffle.rs       | 116 ------------------
+ .../rust/packed_simd/src/codegen/llvm.rs      |  62 ----------
+ third_party/rust/packed_simd/src/lib.rs       |   6 +-
+ 9 files changed, 35 insertions(+), 191 deletions(-)
+
+diff --git a/.cargo/config.in b/.cargo/config.in
+index 37fac6a1008a..1597f123c65c 100644
+--- a/.cargo/config.in
++++ b/.cargo/config.in
+@@ -50,7 +50,7 @@ tag = "v0.3.0"
+ [source."https://github.com/hsivonen/packed_simd"]
+ git = "https://github.com/hsivonen/packed_simd"
+ replace-with = "vendored-sources"
+-rev = "07d285ba65d9a4e3b9d76eacbf4c6489e125127d"
++rev = "8b4bd7d8229660a749dbe419a57ea01df9de5453"
+ 
+ [source."https://github.com/djg/cubeb-pulse-rs"]
+ git = "https://github.com/djg/cubeb-pulse-rs"
+diff --git a/Cargo.lock b/Cargo.lock
+index 990d6a4a582b..fae4794d9478 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -3426,7 +3426,7 @@ dependencies = [
+ [[package]]
+ name = "packed_simd"
+ version = "0.3.4"
+-source = "git+https://github.com/hsivonen/packed_simd?rev=07d285ba65d9a4e3b9d76eacbf4c6489e125127d#07d285ba65d9a4e3b9d76eacbf4c6489e125127d"
++source = "git+https://github.com/hsivonen/packed_simd?rev=8b4bd7d8229660a749dbe419a57ea01df9de5453#8b4bd7d8229660a749dbe419a57ea01df9de5453"
+ dependencies = [
+  "cfg-if",
+  "rustc_version",
+diff --git a/Cargo.toml b/Cargo.toml
+index 897daad41bed..171de100291a 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -66,7 +66,7 @@ panic = "abort"
+ 
+ [patch.crates-io]
+ libudev-sys = { path = "dom/webauthn/libudev-sys" }
+-packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="07d285ba65d9a4e3b9d76eacbf4c6489e125127d" }
++packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="8b4bd7d8229660a749dbe419a57ea01df9de5453" }
+ rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" }
+ nix = { git = "https://github.com/shravanrn/nix/", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" }
+ spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3" }
+diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json
+index 5d5b8e066ecb..51a1cee537e3 100644
+--- a/third_party/rust/packed_simd/.cargo-checksum.json
++++ b/third_party/rust/packed_simd/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"d56de6531d3c4880e3aada85ac8e6d7388e5d781871e181cb8ade2a746d5d5f5","Cargo.toml":"c7124d80c769e792e6a39f523e72b845ed43d6e3a68dd37af4579fbf58b50828","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"49d01e49a33393af64fa6c813b6a724f68a4d1abfbedcb96413651ed105aa820","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"d344fca66796a5ec1ee681edb1aec7ae3c999262a2f215c26f87e9b1ba00ac94","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52
 352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b9
 7755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","ci/docker/s390x-unknown-linux-gnu/Do
 ckerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","ci/linux-s390x.
 sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0
 b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db
 678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","r
 ustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"2107ea6a426a0fe37a0aa6a03a579ff0bdeb5a1599ea76e2d81734a82f41276d","src/api/cast/v16.rs":"d785cf93b8e61200c9ae1c32b9f5e9d9518e87c261c56bcaf92f2e47b0009eb4","src/api/cast/v256.rs":"b81fcfd367a5de532d922dedf18579e53666facef7957c0e1bc827825e500ae6","src/api/cast/v32.rs":"2aac9ec0a67a97328ba908b13a1ff98da3dcd7781910d592d31f9207cbd9a7d2","src/api/cast/v512.rs":"33b33de818f8d4eccc982bc2f3951a8b3d03e9762ec02789b3df82e3f5ed3fc3","src/api/cast/v64.rs":"ec878917d52
 a8c952633251b3a938a2cbe0a63fee6d12c15840d9f1343d1f394","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f
 214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"4acab22af90112072a2608fafc66fccf18cbf2e641b72af28404d30833cfe5c6","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"3c502b9ce85bfcc727d6f053d49030b0ba9f46bd8e9fa5aa109382a2033f9f87","src/api/into_bi
 ts/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"c24c3676707a0feb868dabe00766d74deab176794f905f79056337198c7cf790","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"7cd89005215a9326eed8a742125dcbf981cba1aca72a313478eabf3df71b1160","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae348
 3783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/i
 uf.rs":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e
 2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"138b02b0fa1fdd785b95fc7048488be7e3ef277e0bc6ac5affb26af6a11d41a6","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"3997125f87c7bac07fffda3a1d81
 4e0e6c77ca83099546a9e2fb8dc92231129f","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"d40ccad10220ae5982785015bef92e4b0749583c2b060cad0aa4f92d99491c3b","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"71da1f2d9ab082d70cb3ed98a43649f2e9306d69c51edc861b984b907cce018d","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"53691dc9958dec4180004a42d140552b405e8cd875caa282e89af378dd63c8bc","src/api/slice/write_to_slice.rs":"3dd2e511af43dc6fa911dd0b12f6f00323e0acd1202a01365db400557d52a89b","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codege
 n.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"17ecebcff1f080e712fea5eb51602a73f4201ed56a198220342c8eb55bb92692","src/codegen/llvm.rs":"e05be80c33ed8c65a03abd5bd4a9b748c6903ca1583036968360e187f98d5868","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a
 4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e25147
 46d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"4c0457b6276f9809223590092a4c77e73812330326cdabd28df06820de10a310","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"5a827c6f8e1074e324f6e4c778942badb6c09d747a
 7142de01cadec1240b3428","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"99a0b52c2470097b028af134221099baba383446a01c7dc3ae560209880bcdb7","src/codegen/shuffle1_dyn.rs":"abbc95305dad815ab2ded3e8357791bcff080414668b55a4d397558a1d202d01","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"711c753a08d53a2879c4fb87a0
 762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"2924d414fe7d32bb5f0bb92596a5af654f934d92f81dc1fd9b1a6c580388e5bd","src/masks.rs":"be05e923ac58fe6eb61311561b5583cd306574f206dc09fe8e3c7de3dd0c1433","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"5ec6a47b836f364ec6dede19750a19eaac704162327d03041eb0f007d5f8d75c","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945
 bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"7db22078f31fe1421fc2d21f2e6b9df5eb0bdc99c10f6985d3a74c0df8f205dc"},"package":null}
+\ No newline at end of file
++{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"d56de6531d3c4880e3aada85ac8e6d7388e5d781871e181cb8ade2a746d5d5f5","Cargo.toml":"b6f063e65c1f8d71c51204444d4e93cd514cb310dedfd1e85b731c1acc63ab4a","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"49d01e49a33393af64fa6c813b6a724f68a4d1abfbedcb96413651ed105aa820","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"9d7f69238f5dfefa3c49744159c2f484feb4c32c9aefe79696ebe97a89b2957f","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52
 352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b9
 7755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","ci/docker/s390x-unknown-linux-gnu/Do
 ckerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","ci/linux-s390x.
 sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0
 b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db
 678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","r
 ustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"2107ea6a426a0fe37a0aa6a03a579ff0bdeb5a1599ea76e2d81734a82f41276d","src/api/cast/v16.rs":"d785cf93b8e61200c9ae1c32b9f5e9d9518e87c261c56bcaf92f2e47b0009eb4","src/api/cast/v256.rs":"b81fcfd367a5de532d922dedf18579e53666facef7957c0e1bc827825e500ae6","src/api/cast/v32.rs":"2aac9ec0a67a97328ba908b13a1ff98da3dcd7781910d592d31f9207cbd9a7d2","src/api/cast/v512.rs":"33b33de818f8d4eccc982bc2f3951a8b3d03e9762ec02789b3df82e3f5ed3fc3","src/api/cast/v64.rs":"ec878917d52
 a8c952633251b3a938a2cbe0a63fee6d12c15840d9f1343d1f394","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f
 214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"4acab22af90112072a2608fafc66fccf18cbf2e641b72af28404d30833cfe5c6","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"3c502b9ce85bfcc727d6f053d49030b0ba9f46bd8e9fa5aa109382a2033f9f87","src/api/into_bi
 ts/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"c24c3676707a0feb868dabe00766d74deab176794f905f79056337198c7cf790","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"7cd89005215a9326eed8a742125dcbf981cba1aca72a313478eabf3df71b1160","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae348
 3783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/i
 uf.rs":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e
 2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"138b02b0fa1fdd785b95fc7048488be7e3ef277e0bc6ac5affb26af6a11d41a6","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"3997125f87c7bac07fffda3a1d81
 4e0e6c77ca83099546a9e2fb8dc92231129f","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"d40ccad10220ae5982785015bef92e4b0749583c2b060cad0aa4f92d99491c3b","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"6d1e5970b9fc8555a667c2924151070dd21584e81da8a9668d6bfe16f4a0db82","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"53691dc9958dec4180004a42d140552b405e8cd875caa282e89af378dd63c8bc","src/api/slice/write_to_slice.rs":"3dd2e511af43dc6fa911dd0b12f6f00323e0acd1202a01365db400557d52a89b","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codege
 n.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"17ecebcff1f080e712fea5eb51602a73f4201ed56a198220342c8eb55bb92692","src/codegen/llvm.rs":"5bc6751293f9f184cf23d5df448c7d58b58b799e41c7a91f8ca41a5ba56e64ec","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a
 4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e25147
 46d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"4c0457b6276f9809223590092a4c77e73812330326cdabd28df06820de10a310","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"5a827c6f8e1074e324f6e4c778942badb6c09d747a
 7142de01cadec1240b3428","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"99a0b52c2470097b028af134221099baba383446a01c7dc3ae560209880bcdb7","src/codegen/shuffle1_dyn.rs":"abbc95305dad815ab2ded3e8357791bcff080414668b55a4d397558a1d202d01","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"711c753a08d53a2879c4fb87a0
 762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"41c2a5c5fb42225ce9c6a267653870fdb8af30f933b3b8534d57a15fb96ebb39","src/masks.rs":"be05e923ac58fe6eb61311561b5583cd306574f206dc09fe8e3c7de3dd0c1433","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"5ec6a47b836f364ec6dede19750a19eaac704162327d03041eb0f007d5f8d75c","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945
 bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"7db22078f31fe1421fc2d21f2e6b9df5eb0bdc99c10f6985d3a74c0df8f205dc"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml
+index 08b11881d413..1e52297b7ec8 100644
+--- a/third_party/rust/packed_simd/Cargo.toml
++++ b/third_party/rust/packed_simd/Cargo.toml
+@@ -29,13 +29,13 @@ default = []
+ into_bits = []
+ libcore_neon = []
+ 
++[build-dependencies]
++rustc_version = "0.2"
++
+ [dev-dependencies]
+ paste = "^0.1.3"
+ arrayvec = { version = "^0.5", default-features = false }
+ 
+-[build-dependencies]
+-rustc_version = "0.2"
+-
+ [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys]
+ version = "0.1.2"
+ optional = true
+diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs
+index 4a1b33620085..571139204e8f 100644
+--- a/third_party/rust/packed_simd/build.rs
++++ b/third_party/rust/packed_simd/build.rs
+@@ -1,14 +1,34 @@
+-use rustc_version::{version, Version};
++use rustc_version::{version_meta, Channel, Version};
+ 
+ fn main() {
+     println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1");
+     let target = std::env::var("TARGET")
+         .expect("TARGET environment variable not defined");
+     if target.contains("neon") {
+         println!("cargo:rustc-cfg=libcore_neon");
+     }
+-    let ver = version().unwrap();
+-    if ver >= Version::parse("1.54.0-alpha").unwrap() {
+-        println!("cargo:rustc-cfg=use_const_generics");
++    let ver_meta = version_meta().unwrap();
++    let old_const_generics =
++        if ver_meta.semver < Version::parse("1.56.0-alpha").unwrap() {
++            true
++        } else if ver_meta.semver >= Version::parse("1.57.0-alpha").unwrap() {
++            false
++        } else {
++            match ver_meta.channel {
++                Channel::Stable | Channel::Beta => false,
++                Channel::Nightly | Channel::Dev
++                    if ver_meta
++                        .commit_date
++                        .as_deref()
++                        .map(|d| d < "2021-08-31")
++                        .unwrap_or(false) =>
++                {
++                    true
++                }
++                _ => false,
++            }
++        };
++    if old_const_generics {
++        println!("cargo:rustc-cfg=const_generics");
+     }
+ }
+diff --git a/third_party/rust/packed_simd/src/api/shuffle.rs b/third_party/rust/packed_simd/src/api/shuffle.rs
+index e8de49923c58..3fe1ad5f2701 100644
+--- a/third_party/rust/packed_simd/src/api/shuffle.rs
++++ b/third_party/rust/packed_simd/src/api/shuffle.rs
+@@ -74,7 +74,6 @@
+ /// // At most 2 * the number of lanes in the input vector.
+ /// # }
+ /// ```
+-#[cfg(use_const_generics)]
+ #[macro_export]
+ macro_rules! shuffle {
+     ($vec0:expr, $vec1:expr, [$l0:expr, $l1:expr]) => {{
+@@ -187,118 +186,3 @@ macro_rules! shuffle {
+         }
+     };
+ }
+-#[cfg(not(use_const_generics))]
+-#[macro_export]
+-macro_rules! shuffle {
+-    ($vec0:expr, $vec1:expr, [$l0:expr, $l1:expr]) => {{
+-        #[allow(unused_unsafe)]
+-        unsafe {
+-            $crate::Simd($crate::__shuffle_vector2(
+-                $vec0.0,
+-                $vec1.0,
+-                [$l0, $l1],
+-            ))
+-        }
+-    }};
+-    ($vec0:expr, $vec1:expr, [$l0:expr, $l1:expr, $l2:expr, $l3:expr]) => {{
+-        #[allow(unused_unsafe)]
+-        unsafe {
+-            $crate::Simd($crate::__shuffle_vector4(
+-                $vec0.0,
+-                $vec1.0,
+-                [$l0, $l1, $l2, $l3],
+-            ))
+-        }
+-    }};
+-    ($vec0:expr, $vec1:expr,
+-     [$l0:expr, $l1:expr, $l2:expr, $l3:expr,
+-      $l4:expr, $l5:expr, $l6:expr, $l7:expr]) => {{
+-        #[allow(unused_unsafe)]
+-        unsafe {
+-            $crate::Simd($crate::__shuffle_vector8(
+-                $vec0.0,
+-                $vec1.0,
+-                [$l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7],
+-            ))
+-        }
+-    }};
+-    ($vec0:expr, $vec1:expr,
+-     [$l0:expr, $l1:expr, $l2:expr, $l3:expr,
+-      $l4:expr, $l5:expr, $l6:expr, $l7:expr,
+-      $l8:expr, $l9:expr, $l10:expr, $l11:expr,
+-      $l12:expr, $l13:expr, $l14:expr, $l15:expr]) => {{
+-        #[allow(unused_unsafe)]
+-        unsafe {
+-            $crate::Simd($crate::__shuffle_vector16(
+-                $vec0.0,
+-                $vec1.0,
+-                [
+-                    $l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7, $l8, $l9, $l10,
+-                    $l11, $l12, $l13, $l14, $l15,
+-                ],
+-            ))
+-        }
+-    }};
+-    ($vec0:expr, $vec1:expr,
+-     [$l0:expr, $l1:expr, $l2:expr, $l3:expr,
+-      $l4:expr, $l5:expr, $l6:expr, $l7:expr,
+-      $l8:expr, $l9:expr, $l10:expr, $l11:expr,
+-      $l12:expr, $l13:expr, $l14:expr, $l15:expr,
+-      $l16:expr, $l17:expr, $l18:expr, $l19:expr,
+-      $l20:expr, $l21:expr, $l22:expr, $l23:expr,
+-      $l24:expr, $l25:expr, $l26:expr, $l27:expr,
+-      $l28:expr, $l29:expr, $l30:expr, $l31:expr]) => {{
+-        #[allow(unused_unsafe)]
+-        unsafe {
+-            $crate::Simd($crate::__shuffle_vector32(
+-                $vec0.0,
+-                $vec1.0,
+-                [
+-                    $l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7, $l8, $l9, $l10,
+-                    $l11, $l12, $l13, $l14, $l15, $l16, $l17, $l18, $l19,
+-                    $l20, $l21, $l22, $l23, $l24, $l25, $l26, $l27, $l28,
+-                    $l29, $l30, $l31,
+-                ],
+-            ))
+-        }
+-    }};
+-    ($vec0:expr, $vec1:expr,
+-     [$l0:expr, $l1:expr, $l2:expr, $l3:expr,
+-      $l4:expr, $l5:expr, $l6:expr, $l7:expr,
+-      $l8:expr, $l9:expr, $l10:expr, $l11:expr,
+-      $l12:expr, $l13:expr, $l14:expr, $l15:expr,
+-      $l16:expr, $l17:expr, $l18:expr, $l19:expr,
+-      $l20:expr, $l21:expr, $l22:expr, $l23:expr,
+-      $l24:expr, $l25:expr, $l26:expr, $l27:expr,
+-      $l28:expr, $l29:expr, $l30:expr, $l31:expr,
+-      $l32:expr, $l33:expr, $l34:expr, $l35:expr,
+-      $l36:expr, $l37:expr, $l38:expr, $l39:expr,
+-      $l40:expr, $l41:expr, $l42:expr, $l43:expr,
+-      $l44:expr, $l45:expr, $l46:expr, $l47:expr,
+-      $l48:expr, $l49:expr, $l50:expr, $l51:expr,
+-      $l52:expr, $l53:expr, $l54:expr, $l55:expr,
+-      $l56:expr, $l57:expr, $l58:expr, $l59:expr,
+-      $l60:expr, $l61:expr, $l62:expr, $l63:expr]) => {{
+-        #[allow(unused_unsafe)]
+-        unsafe {
+-            $crate::Simd($crate::__shuffle_vector64(
+-                $vec0.0,
+-                $vec1.0,
+-                [
+-                    $l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7, $l8, $l9, $l10,
+-                    $l11, $l12, $l13, $l14, $l15, $l16, $l17, $l18, $l19,
+-                    $l20, $l21, $l22, $l23, $l24, $l25, $l26, $l27, $l28,
+-                    $l29, $l30, $l31, $l32, $l33, $l34, $l35, $l36, $l37,
+-                    $l38, $l39, $l40, $l41, $l42, $l43, $l44, $l45, $l46,
+-                    $l47, $l48, $l49, $l50, $l51, $l52, $l53, $l54, $l55,
+-                    $l56, $l57, $l58, $l59, $l60, $l61, $l62, $l63,
+-                ],
+-            ))
+-        }
+-     }};
+-    ($vec:expr, [$($l:expr),*]) => {
+-        match $vec {
+-            v => shuffle!(v, v, [$($l),*])
+-        }
+-    };
+-}
+diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs
+index 141cf0d2bc01..52b11a95b917 100644
+--- a/third_party/rust/packed_simd/src/codegen/llvm.rs
++++ b/third_party/rust/packed_simd/src/codegen/llvm.rs
+@@ -6,137 +6,75 @@ use crate::sealed::Shuffle;
+ use crate::sealed::Simd;
+ 
+ // Shuffle intrinsics: expanded in users' crates, therefore public.
+-#[cfg(use_const_generics)]
+ extern "platform-intrinsic" {
+     pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U;
+     pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U;
+     pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U;
+     pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U;
+     pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U;
+     pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U;
+ }
+ 
+-#[cfg(use_const_generics)]
+ #[allow(clippy::missing_safety_doc)]
+ #[inline]
+ pub unsafe fn __shuffle_vector2<const IDX: [u32; 2], T, U>(x: T, y: T) -> U
+ where
+     T: Simd,
+     <T as Simd>::Element: Shuffle<[u32; 2], Output = U>,
+ {
+     simd_shuffle2(x, y, IDX)
+ }
+ 
+-#[cfg(use_const_generics)]
+ #[allow(clippy::missing_safety_doc)]
+ #[inline]
+ pub unsafe fn __shuffle_vector4<const IDX: [u32; 4], T, U>(x: T, y: T) -> U
+ where
+     T: Simd,
+     <T as Simd>::Element: Shuffle<[u32; 4], Output = U>,
+ {
+     simd_shuffle4(x, y, IDX)
+ }
+ 
+-#[cfg(use_const_generics)]
+ #[allow(clippy::missing_safety_doc)]
+ #[inline]
+ pub unsafe fn __shuffle_vector8<const IDX: [u32; 8], T, U>(x: T, y: T) -> U
+ where
+     T: Simd,
+     <T as Simd>::Element: Shuffle<[u32; 8], Output = U>,
+ {
+     simd_shuffle8(x, y, IDX)
+ }
+ 
+-#[cfg(use_const_generics)]
+ #[allow(clippy::missing_safety_doc)]
+ #[inline]
+ pub unsafe fn __shuffle_vector16<const IDX: [u32; 16], T, U>(x: T, y: T) -> U
+ where
+     T: Simd,
+     <T as Simd>::Element: Shuffle<[u32; 16], Output = U>,
+ {
+     simd_shuffle16(x, y, IDX)
+ }
+ 
+-#[cfg(use_const_generics)]
+ #[allow(clippy::missing_safety_doc)]
+ #[inline]
+ pub unsafe fn __shuffle_vector32<const IDX: [u32; 32], T, U>(x: T, y: T) -> U
+ where
+     T: Simd,
+     <T as Simd>::Element: Shuffle<[u32; 32], Output = U>,
+ {
+     simd_shuffle32(x, y, IDX)
+ }
+ 
+-#[cfg(use_const_generics)]
+ #[allow(clippy::missing_safety_doc)]
+ #[inline]
+ pub unsafe fn __shuffle_vector64<const IDX: [u32; 64], T, U>(x: T, y: T) -> U
+ where
+     T: Simd,
+     <T as Simd>::Element: Shuffle<[u32; 64], Output = U>,
+ {
+     simd_shuffle64(x, y, IDX)
+ }
+ 
+-#[cfg(not(use_const_generics))]
+-extern "platform-intrinsic" {
+-    // FIXME: Passing this intrinsics an `idx` array with an index that is
+-    // out-of-bounds will produce a monomorphization-time error.
+-    // https://github.com/rust-lang-nursery/packed_simd/issues/21
+-    #[rustc_args_required_const(2)]
+-    pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U
+-    where
+-        T: Simd,
+-        <T as Simd>::Element: Shuffle<[u32; 2], Output = U>;
+-
+-    #[rustc_args_required_const(2)]
+-    pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U
+-    where
+-        T: Simd,
+-        <T as Simd>::Element: Shuffle<[u32; 4], Output = U>;
+-
+-    #[rustc_args_required_const(2)]
+-    pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U
+-    where
+-        T: Simd,
+-        <T as Simd>::Element: Shuffle<[u32; 8], Output = U>;
+-
+-    #[rustc_args_required_const(2)]
+-    pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U
+-    where
+-        T: Simd,
+-        <T as Simd>::Element: Shuffle<[u32; 16], Output = U>;
+-
+-    #[rustc_args_required_const(2)]
+-    pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U
+-    where
+-        T: Simd,
+-        <T as Simd>::Element: Shuffle<[u32; 32], Output = U>;
+-
+-    #[rustc_args_required_const(2)]
+-    pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U
+-    where
+-        T: Simd,
+-        <T as Simd>::Element: Shuffle<[u32; 64], Output = U>;
+-}
+-
+-#[cfg(not(use_const_generics))]
+-pub use self::simd_shuffle16 as __shuffle_vector16;
+-#[cfg(not(use_const_generics))]
+-pub use self::simd_shuffle2 as __shuffle_vector2;
+-#[cfg(not(use_const_generics))]
+-pub use self::simd_shuffle32 as __shuffle_vector32;
+-#[cfg(not(use_const_generics))]
+-pub use self::simd_shuffle4 as __shuffle_vector4;
+-#[cfg(not(use_const_generics))]
+-pub use self::simd_shuffle64 as __shuffle_vector64;
+-#[cfg(not(use_const_generics))]
+-pub use self::simd_shuffle8 as __shuffle_vector8;
+-
+ extern "platform-intrinsic" {
+     crate fn simd_eq<T, U>(x: T, y: T) -> U;
+     crate fn simd_ne<T, U>(x: T, y: T) -> U;
+diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs
+index dd6b8a1e8e38..e3a747025f43 100644
+--- a/third_party/rust/packed_simd/src/lib.rs
++++ b/third_party/rust/packed_simd/src/lib.rs
+@@ -199,35 +199,37 @@
+ //!   Numeric casts are not very "precise": sometimes lossy, sometimes value
+ //!   preserving, etc.
+ 
+-#![cfg_attr(use_const_generics, feature(const_generics))]
+-#![cfg_attr(use_const_generics, allow(incomplete_features, clippy::from_over_into))]
++#![cfg_attr(const_generics, feature(const_generics))]
++#![cfg_attr(not(const_generics), feature(adt_const_params))]
+ #![feature(
+     repr_simd,
+     rustc_attrs,
+     platform_intrinsics,
+     stdsimd,
+     aarch64_target_feature,
+     arm_target_feature,
+     link_llvm_intrinsics,
+     core_intrinsics,
+     stmt_expr_attributes,
+     crate_visibility_modifier,
+     custom_inner_attributes
+ )]
+ #![allow(non_camel_case_types, non_snake_case,
+         // FIXME: these types are unsound in C FFI already
+         // See https://github.com/rust-lang/rust/issues/53346
+         improper_ctypes_definitions,
++        incomplete_features,
+         clippy::cast_possible_truncation,
+         clippy::cast_lossless,
+         clippy::cast_possible_wrap,
+         clippy::cast_precision_loss,
+         // TODO: manually add the `#[must_use]` attribute where appropriate
+         clippy::must_use_candidate,
+         // This lint is currently broken for generic code
+         // See https://github.com/rust-lang/rust-clippy/issues/3410
+         clippy::use_self,
+         clippy::wrong_self_convention,
++        clippy::from_over_into,
+ )]
+ #![cfg_attr(test, feature(hashmap_internals))]
+ #![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)]

Added: js78/trunk/PKGBUILD
===================================================================
--- js78/trunk/PKGBUILD	                        (rev 0)
+++ js78/trunk/PKGBUILD	2022-07-13 18:25:55 UTC (rev 1252589)
@@ -0,0 +1,140 @@
+# Maintainer: Jan Alexander Steffens (heftig) <heftig at archlinux.org>
+
+pkgname=js78
+pkgver=78.15.0
+pkgrel=4
+pkgdesc="JavaScript interpreter and libraries - Version 78"
+arch=(x86_64)
+url="https://spidermonkey.dev/"
+license=(MPL)
+depends=(gcc-libs readline zlib sh)
+makedepends=(zip autoconf2.13 python-setuptools python-psutil rust llvm clang lld)
+checkdepends=(mercurial git)
+options=(!lto debug)
+_relver=${pkgver}esr
+source=(https://archive.mozilla.org/pub/firefox/releases/$_relver/source/firefox-$_relver.source.tar.xz{,.asc}
+        0001-Fixes-for-LTO-PGO-support.patch
+        0002-Fixes-for-Python-3.10.patch
+        0003-Fixes-for-Rust-1.56.patch)
+sha256sums=('a4438d84d95171a6d4fea9c9f02c2edbf0475a9c614d968ebe2eedc25a672151'
+            'SKIP'
+            '606ef0a2faeffd52cd3d4564146a95eef2b0e58e610d3af8d203753ed27e5a00'
+            'b723277864c8afad1db007963f8e1090b352ced7bb312b2e7e2f11f448e8432d'
+            'cb5f1a0551f55c12562c1f384e9d0a011dd13993039e65aa69b5345a5951af9f')
+validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases <release at mozilla.com>
+
+# Make sure the duplication between bin and lib is found
+COMPRESSZST+=(--long)
+
+prepare() {
+  mkdir mozbuild
+  cd firefox-$pkgver
+
+  # Post-78 fixes to fix LTO with LLVM 11
+  patch -Np1 -i ../0001-Fixes-for-LTO-PGO-support.patch
+
+  # Fix build with Python 3.10
+  patch -Np1 -i ../0002-Fixes-for-Python-3.10.patch
+
+  # Fix build with Rust 1.56
+  patch -Np1 -i ../0003-Fixes-for-Rust-1.56.patch
+
+  cat >../mozconfig <<END
+ac_add_options --enable-application=js
+mk_add_options MOZ_OBJDIR=${PWD at Q}/obj
+
+ac_add_options --prefix=/usr
+ac_add_options --enable-release
+ac_add_options --enable-hardening
+ac_add_options --enable-optimize
+ac_add_options --enable-rust-simd
+ac_add_options --enable-linker=lld
+ac_add_options --disable-debug
+ac_add_options --disable-debug-symbols
+ac_add_options --disable-jemalloc
+ac_add_options --disable-strip
+
+# System libraries
+ac_add_options --with-system-zlib
+ac_add_options --without-system-icu
+
+# Features
+ac_add_options --enable-readline
+ac_add_options --enable-shared-js
+ac_add_options --enable-tests
+ac_add_options --with-intl-api
+END
+}
+
+build() {
+  cd firefox-$pkgver
+
+  export MOZ_NOSPAM=1
+  export MOZBUILD_STATE_PATH="$srcdir/mozbuild"
+
+  # Do 3-tier PGO
+  echo "Building instrumented JS..."
+  cat >.mozconfig ../mozconfig - <<END
+ac_add_options --enable-profile-generate=cross
+END
+  ./mach build
+
+  echo "Profiling instrumented JS..."
+  (
+    local js="$PWD/obj/dist/bin/js"
+    export LLVM_PROFILE_FILE="$PWD/js-%p-%m.profraw"
+
+    cd js/src/octane
+    "$js" run.js
+
+    cd ../../../third_party/webkit/PerformanceTests/ARES-6
+    "$js" cli.js
+
+    cd ../SunSpider/sunspider-0.9.1
+    "$js" sunspider-standalone-driver.js
+  )
+
+  llvm-profdata merge -o merged.profdata *.profraw
+
+  stat -c "Profile data found (%s bytes)" merged.profdata
+  test -s merged.profdata
+
+  echo "Removing instrumented JS..."
+  ./mach clobber
+
+  echo "Building optimized JS..."
+  cat >.mozconfig ../mozconfig - <<END
+ac_add_options --enable-lto=cross
+ac_add_options --enable-profile-use=cross
+ac_add_options --with-pgo-profile-path=${PWD at Q}/merged.profdata
+END
+  ./mach build
+}
+
+check() {
+  local jstests_extra_args=(
+    --format=none
+    --exclude-random
+    --wpt=disabled
+  ) jittest_extra_args=(
+    --format=none
+    --timeout 300
+  ) jittest_test_args=(
+    basic
+  )
+
+  cd firefox-$pkgver/obj
+  make -C js/src check-jstests check-jit-test \
+    JSTESTS_EXTRA_ARGS="${jstests_extra_args[*]}" \
+    JITTEST_EXTRA_ARGS="${jittest_extra_args[*]}" \
+    JITTEST_TEST_ARGS="${jittest_test_args[*]}"
+}
+
+package() {
+  cd firefox-$pkgver/obj
+  make DESTDIR="$pkgdir" install
+  rm "$pkgdir"/usr/lib/*.ajs
+  find "$pkgdir"/usr/{lib/pkgconfig,include} -type f -exec chmod -c a-x {} +
+}
+
+# vim:set sw=2 et:



More information about the arch-commits mailing list