Bug 1414254 - Vendor Rust dependencies r=jgraham
authorAndreas Tolfsen <ato@sny.no>
Fri, 03 Nov 2017 13:39:05 +0000
changeset 443335 257f99d6b09d6d9e3669c9472df3b4838fb906e7
parent 443334 9db8abc42b90a2d2f8998e5053376641813c5e4f
child 443336 371962185c20a1215281f0b129403990143584ed
push id1618
push userCallek@gmail.com
push dateThu, 11 Jan 2018 17:45:48 +0000
treeherdermozilla-release@882ca853e05a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjgraham
bugs1414254
milestone58.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1414254 - Vendor Rust dependencies r=jgraham MozReview-Commit-ID: CnT3DLl2KBR
third_party/rust/aho-corasick-0.6.2/.cargo-checksum.json
third_party/rust/aho-corasick-0.6.2/.travis.yml
third_party/rust/aho-corasick-0.6.2/COPYING
third_party/rust/aho-corasick-0.6.2/Cargo.toml
third_party/rust/aho-corasick-0.6.2/LICENSE-MIT
third_party/rust/aho-corasick-0.6.2/Makefile
third_party/rust/aho-corasick-0.6.2/README.md
third_party/rust/aho-corasick-0.6.2/UNLICENSE
third_party/rust/aho-corasick-0.6.2/benches/bench.rs
third_party/rust/aho-corasick-0.6.2/benches/random.txt
third_party/rust/aho-corasick-0.6.2/ctags.rust
third_party/rust/aho-corasick-0.6.2/examples/dict-search.rs
third_party/rust/aho-corasick-0.6.2/session.vim
third_party/rust/aho-corasick-0.6.2/src/autiter.rs
third_party/rust/aho-corasick-0.6.2/src/full.rs
third_party/rust/aho-corasick-0.6.2/src/lib.rs
third_party/rust/aho-corasick-0.6.2/src/main.rs
third_party/rust/base64-0.5.2/.cargo-checksum.json
third_party/rust/base64-0.5.2/Cargo.toml
third_party/rust/base64-0.5.2/LICENSE-APACHE
third_party/rust/base64-0.5.2/LICENSE-MIT
third_party/rust/base64-0.5.2/README.md
third_party/rust/base64-0.5.2/benches/benchmarks.rs
third_party/rust/base64-0.5.2/examples/make_tables.rs
third_party/rust/base64-0.5.2/src/lib.rs
third_party/rust/base64-0.5.2/src/tables.rs
third_party/rust/base64-0.5.2/tests/tests.rs
third_party/rust/bzip2-sys/.cargo-checksum.json
third_party/rust/bzip2-sys/Cargo.toml
third_party/rust/bzip2-sys/build.rs
third_party/rust/bzip2-sys/lib.rs
third_party/rust/cc/.cargo-checksum.json
third_party/rust/cc/.travis.yml
third_party/rust/cc/Cargo.toml
third_party/rust/cc/LICENSE-APACHE
third_party/rust/cc/LICENSE-MIT
third_party/rust/cc/README.md
third_party/rust/cc/appveyor.yml
third_party/rust/cc/src/bin/gcc-shim.rs
third_party/rust/cc/src/com.rs
third_party/rust/cc/src/lib.rs
third_party/rust/cc/src/registry.rs
third_party/rust/cc/src/setup_config.rs
third_party/rust/cc/src/winapi.rs
third_party/rust/cc/src/windows_registry.rs
third_party/rust/cc/tests/cc_env.rs
third_party/rust/cc/tests/support/mod.rs
third_party/rust/cc/tests/test.rs
third_party/rust/clap-2.24.2/.cargo-checksum.json
third_party/rust/clap-2.24.2/.clog.toml
third_party/rust/clap-2.24.2/.github/CONTRIBUTING.md
third_party/rust/clap-2.24.2/.github/ISSUE_TEMPLATE.md
third_party/rust/clap-2.24.2/.travis.yml
third_party/rust/clap-2.24.2/CHANGELOG.md
third_party/rust/clap-2.24.2/CONTRIBUTORS.md
third_party/rust/clap-2.24.2/Cargo.toml
third_party/rust/clap-2.24.2/LICENSE-MIT
third_party/rust/clap-2.24.2/README.md
third_party/rust/clap-2.24.2/appveyor.yml
third_party/rust/clap-2.24.2/clap-test.rs
third_party/rust/clap-2.24.2/index.html
third_party/rust/clap-2.24.2/justfile
third_party/rust/clap-2.24.2/rustfmt.toml
third_party/rust/clap-2.24.2/src/app/help.rs
third_party/rust/clap-2.24.2/src/app/macros.rs
third_party/rust/clap-2.24.2/src/app/meta.rs
third_party/rust/clap-2.24.2/src/app/mod.rs
third_party/rust/clap-2.24.2/src/app/parser.rs
third_party/rust/clap-2.24.2/src/app/settings.rs
third_party/rust/clap-2.24.2/src/app/usage.rs
third_party/rust/clap-2.24.2/src/app/validator.rs
third_party/rust/clap-2.24.2/src/args/any_arg.rs
third_party/rust/clap-2.24.2/src/args/arg.rs
third_party/rust/clap-2.24.2/src/args/arg_builder/base.rs
third_party/rust/clap-2.24.2/src/args/arg_builder/flag.rs
third_party/rust/clap-2.24.2/src/args/arg_builder/mod.rs
third_party/rust/clap-2.24.2/src/args/arg_builder/option.rs
third_party/rust/clap-2.24.2/src/args/arg_builder/positional.rs
third_party/rust/clap-2.24.2/src/args/arg_builder/switched.rs
third_party/rust/clap-2.24.2/src/args/arg_builder/valued.rs
third_party/rust/clap-2.24.2/src/args/arg_matcher.rs
third_party/rust/clap-2.24.2/src/args/arg_matches.rs
third_party/rust/clap-2.24.2/src/args/group.rs
third_party/rust/clap-2.24.2/src/args/macros.rs
third_party/rust/clap-2.24.2/src/args/matched_arg.rs
third_party/rust/clap-2.24.2/src/args/mod.rs
third_party/rust/clap-2.24.2/src/args/settings.rs
third_party/rust/clap-2.24.2/src/args/subcommand.rs
third_party/rust/clap-2.24.2/src/completions/bash.rs
third_party/rust/clap-2.24.2/src/completions/fish.rs
third_party/rust/clap-2.24.2/src/completions/macros.rs
third_party/rust/clap-2.24.2/src/completions/mod.rs
third_party/rust/clap-2.24.2/src/completions/powershell.rs
third_party/rust/clap-2.24.2/src/completions/shell.rs
third_party/rust/clap-2.24.2/src/completions/zsh.rs
third_party/rust/clap-2.24.2/src/errors.rs
third_party/rust/clap-2.24.2/src/fmt.rs
third_party/rust/clap-2.24.2/src/lib.rs
third_party/rust/clap-2.24.2/src/macros.rs
third_party/rust/clap-2.24.2/src/osstringext.rs
third_party/rust/clap-2.24.2/src/strext.rs
third_party/rust/clap-2.24.2/src/suggestions.rs
third_party/rust/clap-2.24.2/src/usage_parser.rs
third_party/rust/clap-2.25.0/.appveyor.yml
third_party/rust/clap-2.25.0/.cargo-checksum.json
third_party/rust/clap-2.25.0/.clog.toml
third_party/rust/clap-2.25.0/.github/CONTRIBUTING.md
third_party/rust/clap-2.25.0/.github/ISSUE_TEMPLATE.md
third_party/rust/clap-2.25.0/.mention-bot
third_party/rust/clap-2.25.0/.travis.yml
third_party/rust/clap-2.25.0/CHANGELOG.md
third_party/rust/clap-2.25.0/CONTRIBUTORS.md
third_party/rust/clap-2.25.0/Cargo.toml
third_party/rust/clap-2.25.0/LICENSE-MIT
third_party/rust/clap-2.25.0/README.md
third_party/rust/clap-2.25.0/clap-test.rs
third_party/rust/clap-2.25.0/index.html
third_party/rust/clap-2.25.0/justfile
third_party/rust/clap-2.25.0/rustfmt.toml
third_party/rust/clap-2.25.0/src/app/help.rs
third_party/rust/clap-2.25.0/src/app/macros.rs
third_party/rust/clap-2.25.0/src/app/meta.rs
third_party/rust/clap-2.25.0/src/app/mod.rs
third_party/rust/clap-2.25.0/src/app/parser.rs
third_party/rust/clap-2.25.0/src/app/settings.rs
third_party/rust/clap-2.25.0/src/app/usage.rs
third_party/rust/clap-2.25.0/src/app/validator.rs
third_party/rust/clap-2.25.0/src/args/any_arg.rs
third_party/rust/clap-2.25.0/src/args/arg.rs
third_party/rust/clap-2.25.0/src/args/arg_builder/base.rs
third_party/rust/clap-2.25.0/src/args/arg_builder/flag.rs
third_party/rust/clap-2.25.0/src/args/arg_builder/mod.rs
third_party/rust/clap-2.25.0/src/args/arg_builder/option.rs
third_party/rust/clap-2.25.0/src/args/arg_builder/positional.rs
third_party/rust/clap-2.25.0/src/args/arg_builder/switched.rs
third_party/rust/clap-2.25.0/src/args/arg_builder/valued.rs
third_party/rust/clap-2.25.0/src/args/arg_matcher.rs
third_party/rust/clap-2.25.0/src/args/arg_matches.rs
third_party/rust/clap-2.25.0/src/args/group.rs
third_party/rust/clap-2.25.0/src/args/macros.rs
third_party/rust/clap-2.25.0/src/args/matched_arg.rs
third_party/rust/clap-2.25.0/src/args/mod.rs
third_party/rust/clap-2.25.0/src/args/settings.rs
third_party/rust/clap-2.25.0/src/args/subcommand.rs
third_party/rust/clap-2.25.0/src/completions/bash.rs
third_party/rust/clap-2.25.0/src/completions/fish.rs
third_party/rust/clap-2.25.0/src/completions/macros.rs
third_party/rust/clap-2.25.0/src/completions/mod.rs
third_party/rust/clap-2.25.0/src/completions/powershell.rs
third_party/rust/clap-2.25.0/src/completions/shell.rs
third_party/rust/clap-2.25.0/src/completions/zsh.rs
third_party/rust/clap-2.25.0/src/errors.rs
third_party/rust/clap-2.25.0/src/fmt.rs
third_party/rust/clap-2.25.0/src/lib.rs
third_party/rust/clap-2.25.0/src/macros.rs
third_party/rust/clap-2.25.0/src/osstringext.rs
third_party/rust/clap-2.25.0/src/strext.rs
third_party/rust/clap-2.25.0/src/suggestions.rs
third_party/rust/clap-2.25.0/src/usage_parser.rs
third_party/rust/clap/.cargo-checksum.json
third_party/rust/clap/.github/ISSUE_TEMPLATE.md
third_party/rust/clap/.travis.yml
third_party/rust/clap/CHANGELOG.md
third_party/rust/clap/CONTRIBUTORS.md
third_party/rust/clap/Cargo.toml
third_party/rust/clap/README.md
third_party/rust/clap/SPONSORS.md
third_party/rust/clap/src/app/help.rs
third_party/rust/clap/src/app/macros.rs
third_party/rust/clap/src/app/mod.rs
third_party/rust/clap/src/app/parser.rs
third_party/rust/clap/src/app/settings.rs
third_party/rust/clap/src/app/validator.rs
third_party/rust/clap/src/args/any_arg.rs
third_party/rust/clap/src/args/arg.rs
third_party/rust/clap/src/args/arg_builder/flag.rs
third_party/rust/clap/src/args/arg_builder/option.rs
third_party/rust/clap/src/args/arg_builder/positional.rs
third_party/rust/clap/src/args/arg_builder/valued.rs
third_party/rust/clap/src/args/arg_matcher.rs
third_party/rust/clap/src/args/arg_matches.rs
third_party/rust/clap/src/completions/fish.rs
third_party/rust/clap/src/completions/zsh.rs
third_party/rust/clap/src/lib.rs
third_party/rust/clap/src/macros.rs
third_party/rust/clap/src/map.rs
third_party/rust/clap/src/suggestions.rs
third_party/rust/clap/src/usage_parser.rs
third_party/rust/flate2/.cargo-checksum.json
third_party/rust/flate2/.travis.yml
third_party/rust/flate2/Cargo.toml
third_party/rust/flate2/README.md
third_party/rust/flate2/appveyor.yml
third_party/rust/flate2/examples/deflatedecoder-bufread.rs
third_party/rust/flate2/examples/deflatedecoder-read.rs
third_party/rust/flate2/examples/deflatedecoder-write.rs
third_party/rust/flate2/examples/deflateencoder-bufread.rs
third_party/rust/flate2/examples/deflateencoder-read.rs
third_party/rust/flate2/examples/deflateencoder-write.rs
third_party/rust/flate2/examples/flatereadext.rs
third_party/rust/flate2/examples/gzbuilder.rs
third_party/rust/flate2/examples/gzdecoder-bufread.rs
third_party/rust/flate2/examples/gzdecoder-read.rs
third_party/rust/flate2/examples/gzencoder-bufread.rs
third_party/rust/flate2/examples/gzencoder-read.rs
third_party/rust/flate2/examples/gzencoder-write.rs
third_party/rust/flate2/examples/gzmultidecoder-bufread.rs
third_party/rust/flate2/examples/gzmultidecoder-read.rs
third_party/rust/flate2/examples/hello_world.txt
third_party/rust/flate2/examples/zlibdecoder-bufread.rs
third_party/rust/flate2/examples/zlibdecoder-read.rs
third_party/rust/flate2/examples/zlibdecoder-write.rs
third_party/rust/flate2/examples/zlibencoder-bufread.rs
third_party/rust/flate2/examples/zlibencoder-read.rs
third_party/rust/flate2/examples/zlibencoder-write.rs
third_party/rust/flate2/src/bufreader.rs
third_party/rust/flate2/src/crc.rs
third_party/rust/flate2/src/deflate.rs
third_party/rust/flate2/src/deflate/bufread.rs
third_party/rust/flate2/src/deflate/mod.rs
third_party/rust/flate2/src/deflate/read.rs
third_party/rust/flate2/src/deflate/write.rs
third_party/rust/flate2/src/ffi.rs
third_party/rust/flate2/src/gz.rs
third_party/rust/flate2/src/gz/bufread.rs
third_party/rust/flate2/src/gz/mod.rs
third_party/rust/flate2/src/gz/read.rs
third_party/rust/flate2/src/gz/write.rs
third_party/rust/flate2/src/lib.rs
third_party/rust/flate2/src/mem.rs
third_party/rust/flate2/src/zio.rs
third_party/rust/flate2/src/zlib.rs
third_party/rust/flate2/src/zlib/bufread.rs
third_party/rust/flate2/src/zlib/mod.rs
third_party/rust/flate2/src/zlib/read.rs
third_party/rust/flate2/src/zlib/write.rs
third_party/rust/flate2/tests/early-flush.rs
third_party/rust/flate2/tests/zero-write.rs
third_party/rust/gcc-0.3.42/.cargo-checksum.json
third_party/rust/gcc-0.3.42/.travis.yml
third_party/rust/gcc-0.3.42/Cargo.toml
third_party/rust/gcc-0.3.42/LICENSE-APACHE
third_party/rust/gcc-0.3.42/LICENSE-MIT
third_party/rust/gcc-0.3.42/README.md
third_party/rust/gcc-0.3.42/appveyor.yml
third_party/rust/gcc-0.3.42/src/bin/gcc-shim.rs
third_party/rust/gcc-0.3.42/src/lib.rs
third_party/rust/gcc-0.3.42/src/registry.rs
third_party/rust/gcc-0.3.42/src/windows_registry.rs
third_party/rust/gcc-0.3.42/tests/cc_env.rs
third_party/rust/gcc-0.3.42/tests/support/mod.rs
third_party/rust/gcc-0.3.42/tests/test.rs
third_party/rust/httparse-1.2.2/.cargo-checksum.json
third_party/rust/httparse-1.2.2/.travis.yml
third_party/rust/httparse-1.2.2/.travis_after.sh
third_party/rust/httparse-1.2.2/Cargo.toml
third_party/rust/httparse-1.2.2/LICENSE-APACHE
third_party/rust/httparse-1.2.2/LICENSE-MIT
third_party/rust/httparse-1.2.2/README.md
third_party/rust/httparse-1.2.2/benches/parse.rs
third_party/rust/httparse-1.2.2/src/iter.rs
third_party/rust/httparse-1.2.2/src/lib.rs
third_party/rust/hyper-0.10.10/.cargo-checksum.json
third_party/rust/hyper-0.10.10/Cargo.toml
third_party/rust/hyper-0.10.10/LICENSE
third_party/rust/hyper-0.10.10/build.rs
third_party/rust/hyper-0.10.10/src/buffer.rs
third_party/rust/hyper-0.10.10/src/client/mod.rs
third_party/rust/hyper-0.10.10/src/client/pool.rs
third_party/rust/hyper-0.10.10/src/client/proxy.rs
third_party/rust/hyper-0.10.10/src/client/request.rs
third_party/rust/hyper-0.10.10/src/client/response.rs
third_party/rust/hyper-0.10.10/src/error.rs
third_party/rust/hyper-0.10.10/src/header/common/accept.rs
third_party/rust/hyper-0.10.10/src/header/common/accept_charset.rs
third_party/rust/hyper-0.10.10/src/header/common/accept_encoding.rs
third_party/rust/hyper-0.10.10/src/header/common/accept_language.rs
third_party/rust/hyper-0.10.10/src/header/common/accept_ranges.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_allow_credentials.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_allow_headers.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_allow_methods.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_allow_origin.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_expose_headers.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_max_age.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_request_headers.rs
third_party/rust/hyper-0.10.10/src/header/common/access_control_request_method.rs
third_party/rust/hyper-0.10.10/src/header/common/allow.rs
third_party/rust/hyper-0.10.10/src/header/common/authorization.rs
third_party/rust/hyper-0.10.10/src/header/common/cache_control.rs
third_party/rust/hyper-0.10.10/src/header/common/connection.rs
third_party/rust/hyper-0.10.10/src/header/common/content_disposition.rs
third_party/rust/hyper-0.10.10/src/header/common/content_encoding.rs
third_party/rust/hyper-0.10.10/src/header/common/content_language.rs
third_party/rust/hyper-0.10.10/src/header/common/content_length.rs
third_party/rust/hyper-0.10.10/src/header/common/content_range.rs
third_party/rust/hyper-0.10.10/src/header/common/content_type.rs
third_party/rust/hyper-0.10.10/src/header/common/cookie.rs
third_party/rust/hyper-0.10.10/src/header/common/date.rs
third_party/rust/hyper-0.10.10/src/header/common/etag.rs
third_party/rust/hyper-0.10.10/src/header/common/expect.rs
third_party/rust/hyper-0.10.10/src/header/common/expires.rs
third_party/rust/hyper-0.10.10/src/header/common/from.rs
third_party/rust/hyper-0.10.10/src/header/common/host.rs
third_party/rust/hyper-0.10.10/src/header/common/if_match.rs
third_party/rust/hyper-0.10.10/src/header/common/if_modified_since.rs
third_party/rust/hyper-0.10.10/src/header/common/if_none_match.rs
third_party/rust/hyper-0.10.10/src/header/common/if_range.rs
third_party/rust/hyper-0.10.10/src/header/common/if_unmodified_since.rs
third_party/rust/hyper-0.10.10/src/header/common/last-event-id.rs
third_party/rust/hyper-0.10.10/src/header/common/last_modified.rs
third_party/rust/hyper-0.10.10/src/header/common/location.rs
third_party/rust/hyper-0.10.10/src/header/common/mod.rs
third_party/rust/hyper-0.10.10/src/header/common/origin.rs
third_party/rust/hyper-0.10.10/src/header/common/pragma.rs
third_party/rust/hyper-0.10.10/src/header/common/prefer.rs
third_party/rust/hyper-0.10.10/src/header/common/preference_applied.rs
third_party/rust/hyper-0.10.10/src/header/common/range.rs
third_party/rust/hyper-0.10.10/src/header/common/referer.rs
third_party/rust/hyper-0.10.10/src/header/common/referrer_policy.rs
third_party/rust/hyper-0.10.10/src/header/common/server.rs
third_party/rust/hyper-0.10.10/src/header/common/set_cookie.rs
third_party/rust/hyper-0.10.10/src/header/common/strict_transport_security.rs
third_party/rust/hyper-0.10.10/src/header/common/transfer_encoding.rs
third_party/rust/hyper-0.10.10/src/header/common/upgrade.rs
third_party/rust/hyper-0.10.10/src/header/common/user_agent.rs
third_party/rust/hyper-0.10.10/src/header/common/vary.rs
third_party/rust/hyper-0.10.10/src/header/internals/cell.rs
third_party/rust/hyper-0.10.10/src/header/internals/item.rs
third_party/rust/hyper-0.10.10/src/header/internals/mod.rs
third_party/rust/hyper-0.10.10/src/header/internals/vec_map.rs
third_party/rust/hyper-0.10.10/src/header/mod.rs
third_party/rust/hyper-0.10.10/src/header/parsing.rs
third_party/rust/hyper-0.10.10/src/header/shared/charset.rs
third_party/rust/hyper-0.10.10/src/header/shared/encoding.rs
third_party/rust/hyper-0.10.10/src/header/shared/entity.rs
third_party/rust/hyper-0.10.10/src/header/shared/httpdate.rs
third_party/rust/hyper-0.10.10/src/header/shared/mod.rs
third_party/rust/hyper-0.10.10/src/header/shared/quality_item.rs
third_party/rust/hyper-0.10.10/src/http/h1.rs
third_party/rust/hyper-0.10.10/src/http/message.rs
third_party/rust/hyper-0.10.10/src/http/mod.rs
third_party/rust/hyper-0.10.10/src/lib.rs
third_party/rust/hyper-0.10.10/src/method.rs
third_party/rust/hyper-0.10.10/src/mock.rs
third_party/rust/hyper-0.10.10/src/net.rs
third_party/rust/hyper-0.10.10/src/server/listener.rs
third_party/rust/hyper-0.10.10/src/server/mod.rs
third_party/rust/hyper-0.10.10/src/server/request.rs
third_party/rust/hyper-0.10.10/src/server/response.rs
third_party/rust/hyper-0.10.10/src/status.rs
third_party/rust/hyper-0.10.10/src/uri.rs
third_party/rust/hyper-0.10.10/src/version.rs
third_party/rust/isatty/.cargo-checksum.json
third_party/rust/isatty/.travis.yml
third_party/rust/isatty/Cargo.toml
third_party/rust/isatty/README.md
third_party/rust/isatty/appveyor.yml
third_party/rust/isatty/src/lib.rs
third_party/rust/lazy_static-0.2.2/.cargo-checksum.json
third_party/rust/lazy_static-0.2.2/.travis.yml
third_party/rust/lazy_static-0.2.2/Cargo.toml
third_party/rust/lazy_static-0.2.2/LICENSE
third_party/rust/lazy_static-0.2.2/README.md
third_party/rust/lazy_static-0.2.2/src/core_lazy.rs
third_party/rust/lazy_static-0.2.2/src/lazy.rs
third_party/rust/lazy_static-0.2.2/src/lib.rs
third_party/rust/lazy_static-0.2.2/src/nightly_lazy.rs
third_party/rust/lazy_static-0.2.2/tests/no_std.rs
third_party/rust/lazy_static-0.2.2/tests/test.rs
third_party/rust/libc-0.2.30/.cargo-checksum.json
third_party/rust/libc-0.2.30/.travis.yml
third_party/rust/libc-0.2.30/Cargo.toml
third_party/rust/libc-0.2.30/LICENSE-APACHE
third_party/rust/libc-0.2.30/LICENSE-MIT
third_party/rust/libc-0.2.30/README.md
third_party/rust/libc-0.2.30/appveyor.yml
third_party/rust/libc-0.2.30/ci/README.md
third_party/rust/libc-0.2.30/ci/android-accept-licenses.sh
third_party/rust/libc-0.2.30/ci/android-install-ndk.sh
third_party/rust/libc-0.2.30/ci/android-install-sdk.sh
third_party/rust/libc-0.2.30/ci/android-sysimage.sh
third_party/rust/libc-0.2.30/ci/docker/aarch64-linux-android/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/arm-linux-androideabi/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/asmjs-unknown-emscripten/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/i686-linux-android/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/i686-unknown-linux-gnu/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/i686-unknown-linux-musl/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/mips-unknown-linux-gnu/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/mips-unknown-linux-musl/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/mipsel-unknown-linux-musl/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/s390x-unknown-linux-gnu/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/wasm32-unknown-emscripten/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/wasm32-unknown-emscripten/node-wrapper.sh
third_party/rust/libc-0.2.30/ci/docker/x86_64-linux-android/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/x86_64-rumprun-netbsd/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/x86_64-rumprun-netbsd/runtest.rs
third_party/rust/libc-0.2.30/ci/docker/x86_64-unknown-freebsd/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
third_party/rust/libc-0.2.30/ci/docker/x86_64-unknown-linux-musl/Dockerfile
third_party/rust/libc-0.2.30/ci/dox.sh
third_party/rust/libc-0.2.30/ci/emscripten-entry.sh
third_party/rust/libc-0.2.30/ci/emscripten.sh
third_party/rust/libc-0.2.30/ci/ios/deploy_and_run_on_ios_simulator.rs
third_party/rust/libc-0.2.30/ci/landing-page-footer.html
third_party/rust/libc-0.2.30/ci/landing-page-head.html
third_party/rust/libc-0.2.30/ci/run-docker.sh
third_party/rust/libc-0.2.30/ci/run-qemu.sh
third_party/rust/libc-0.2.30/ci/run.sh
third_party/rust/libc-0.2.30/ci/runtest-android.rs
third_party/rust/libc-0.2.30/ci/style.rs
third_party/rust/libc-0.2.30/src/dox.rs
third_party/rust/libc-0.2.30/src/lib.rs
third_party/rust/libc-0.2.30/src/macros.rs
third_party/rust/libc-0.2.30/src/redox.rs
third_party/rust/libc-0.2.30/src/unix/bsd/apple/b32.rs
third_party/rust/libc-0.2.30/src/unix/bsd/apple/b64.rs
third_party/rust/libc-0.2.30/src/unix/bsd/apple/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/freebsdlike/dragonfly/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/freebsdlike/freebsd/aarch64.rs
third_party/rust/libc-0.2.30/src/unix/bsd/freebsdlike/freebsd/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/freebsdlike/freebsd/x86.rs
third_party/rust/libc-0.2.30/src/unix/bsd/freebsdlike/freebsd/x86_64.rs
third_party/rust/libc-0.2.30/src/unix/bsd/freebsdlike/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/netbsd/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/netbsd/other/b32/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/netbsd/other/b64/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/netbsd/other/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/openbsdlike/bitrig.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/openbsdlike/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/openbsdlike/openbsd.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/openbsdlike/other/b32/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/openbsdlike/other/b64/mod.rs
third_party/rust/libc-0.2.30/src/unix/bsd/netbsdlike/openbsdlike/other/mod.rs
third_party/rust/libc-0.2.30/src/unix/haiku/b32.rs
third_party/rust/libc-0.2.30/src/unix/haiku/b64.rs
third_party/rust/libc-0.2.30/src/unix/haiku/mod.rs
third_party/rust/libc-0.2.30/src/unix/mod.rs
third_party/rust/libc-0.2.30/src/unix/newlib/arm/mod.rs
third_party/rust/libc-0.2.30/src/unix/newlib/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/android/b32/arm.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/android/b32/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/android/b32/x86.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/android/b64/aarch64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/android/b64/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/android/b64/x86_64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/android/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/emscripten.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/mips/mips32.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/mips/mips64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/mips/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b32/arm.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b32/mips.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b32/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b32/x86.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b64/aarch64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b64/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b64/powerpc64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/b64/x86_64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/musl/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b32/arm.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b32/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b32/powerpc.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b32/x86.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b64/aarch64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b64/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b64/powerpc64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b64/sparc64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/b64/x86_64.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/other/mod.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/linux/s390x.rs
third_party/rust/libc-0.2.30/src/unix/notbsd/mod.rs
third_party/rust/libc-0.2.30/src/unix/solaris/mod.rs
third_party/rust/libc-0.2.30/src/unix/uclibc/mips/mips32.rs
third_party/rust/libc-0.2.30/src/unix/uclibc/mips/mips64.rs
third_party/rust/libc-0.2.30/src/unix/uclibc/mips/mod.rs
third_party/rust/libc-0.2.30/src/unix/uclibc/mod.rs
third_party/rust/libc-0.2.30/src/unix/uclibc/x86_64/l4re.rs
third_party/rust/libc-0.2.30/src/unix/uclibc/x86_64/mod.rs
third_party/rust/libc-0.2.30/src/windows.rs
third_party/rust/log-0.3.6/.cargo-checksum.json
third_party/rust/log-0.3.6/.travis.yml
third_party/rust/log-0.3.6/Cargo.toml
third_party/rust/log-0.3.6/LICENSE-APACHE
third_party/rust/log-0.3.6/LICENSE-MIT
third_party/rust/log-0.3.6/README.md
third_party/rust/log-0.3.6/appveyor.yml
third_party/rust/log-0.3.6/src/lib.rs
third_party/rust/log-0.3.6/src/macros.rs
third_party/rust/log-0.3.6/tests/filters.rs
third_party/rust/mime-0.2.4/.cargo-checksum.json
third_party/rust/mime-0.2.4/.travis.yml
third_party/rust/mime-0.2.4/Cargo.toml
third_party/rust/mime-0.2.4/LICENSE
third_party/rust/mime-0.2.4/README.md
third_party/rust/mime-0.2.4/src/lib.rs
third_party/rust/miniz-sys/.cargo-checksum.json
third_party/rust/miniz-sys/Cargo.toml
third_party/rust/miniz-sys/build.rs
third_party/rust/miniz-sys/miniz.c
third_party/rust/num-integer-0.1.33/.cargo-checksum.json
third_party/rust/num-integer-0.1.33/Cargo.toml
third_party/rust/num-integer-0.1.33/LICENSE-APACHE
third_party/rust/num-integer-0.1.33/LICENSE-MIT
third_party/rust/num-integer-0.1.33/src/lib.rs
third_party/rust/num-integer/.cargo-checksum.json
third_party/rust/num-integer/Cargo.toml
third_party/rust/num-integer/src/lib.rs
third_party/rust/num-iter/.cargo-checksum.json
third_party/rust/num-iter/Cargo.toml
third_party/rust/num-traits-0.1.37/.cargo-checksum.json
third_party/rust/num-traits-0.1.37/Cargo.toml
third_party/rust/num-traits-0.1.37/LICENSE-APACHE
third_party/rust/num-traits-0.1.37/LICENSE-MIT
third_party/rust/num-traits-0.1.37/src/bounds.rs
third_party/rust/num-traits-0.1.37/src/cast.rs
third_party/rust/num-traits-0.1.37/src/float.rs
third_party/rust/num-traits-0.1.37/src/identities.rs
third_party/rust/num-traits-0.1.37/src/int.rs
third_party/rust/num-traits-0.1.37/src/lib.rs
third_party/rust/num-traits-0.1.37/src/ops/checked.rs
third_party/rust/num-traits-0.1.37/src/ops/mod.rs
third_party/rust/num-traits-0.1.37/src/ops/saturating.rs
third_party/rust/num-traits-0.1.37/src/ops/wrapping.rs
third_party/rust/num-traits-0.1.37/src/pow.rs
third_party/rust/num-traits-0.1.37/src/sign.rs
third_party/rust/num-traits-0.1.39/.cargo-checksum.json
third_party/rust/num-traits-0.1.39/Cargo.toml
third_party/rust/num-traits-0.1.39/LICENSE-APACHE
third_party/rust/num-traits-0.1.39/LICENSE-MIT
third_party/rust/num-traits-0.1.39/src/bounds.rs
third_party/rust/num-traits-0.1.39/src/cast.rs
third_party/rust/num-traits-0.1.39/src/float.rs
third_party/rust/num-traits-0.1.39/src/identities.rs
third_party/rust/num-traits-0.1.39/src/int.rs
third_party/rust/num-traits-0.1.39/src/lib.rs
third_party/rust/num-traits-0.1.39/src/ops/checked.rs
third_party/rust/num-traits-0.1.39/src/ops/mod.rs
third_party/rust/num-traits-0.1.39/src/ops/saturating.rs
third_party/rust/num-traits-0.1.39/src/ops/wrapping.rs
third_party/rust/num-traits-0.1.39/src/pow.rs
third_party/rust/num-traits-0.1.39/src/sign.rs
third_party/rust/num-traits/.cargo-checksum.json
third_party/rust/num-traits/Cargo.toml
third_party/rust/num-traits/src/float.rs
third_party/rust/num/.cargo-checksum.json
third_party/rust/num/.travis.yml
third_party/rust/num/Cargo.toml
third_party/rust/num/README.md
third_party/rust/num/bors.toml
third_party/rust/num/ci/test_full.sh
third_party/rust/num_cpus-1.2.1/.cargo-checksum.json
third_party/rust/num_cpus-1.2.1/.travis.yml
third_party/rust/num_cpus-1.2.1/Cargo.toml
third_party/rust/num_cpus-1.2.1/LICENSE-APACHE
third_party/rust/num_cpus-1.2.1/LICENSE-MIT
third_party/rust/num_cpus-1.2.1/README.md
third_party/rust/num_cpus-1.2.1/src/lib.rs
third_party/rust/num_cpus-1.6.2/.appveyor.yml
third_party/rust/num_cpus-1.6.2/.cargo-checksum.json
third_party/rust/num_cpus-1.6.2/.travis.yml
third_party/rust/num_cpus-1.6.2/Cargo.toml
third_party/rust/num_cpus-1.6.2/LICENSE-APACHE
third_party/rust/num_cpus-1.6.2/LICENSE-MIT
third_party/rust/num_cpus-1.6.2/README.md
third_party/rust/num_cpus-1.6.2/src/lib.rs
third_party/rust/regex-0.2.1/.cargo-checksum.json
third_party/rust/regex-0.2.1/.travis.yml
third_party/rust/regex-0.2.1/CHANGELOG.md
third_party/rust/regex-0.2.1/Cargo.toml
third_party/rust/regex-0.2.1/HACKING.md
third_party/rust/regex-0.2.1/LICENSE-APACHE
third_party/rust/regex-0.2.1/LICENSE-MIT
third_party/rust/regex-0.2.1/PERFORMANCE.md
third_party/rust/regex-0.2.1/README.md
third_party/rust/regex-0.2.1/appveyor.yml
third_party/rust/regex-0.2.1/ci/after_success.sh
third_party/rust/regex-0.2.1/ci/run-kcov
third_party/rust/regex-0.2.1/ci/run-shootout-test
third_party/rust/regex-0.2.1/ci/script.sh
third_party/rust/regex-0.2.1/examples/regexdna-input.txt
third_party/rust/regex-0.2.1/examples/regexdna-output.txt
third_party/rust/regex-0.2.1/examples/shootout-regex-dna-bytes.rs
third_party/rust/regex-0.2.1/examples/shootout-regex-dna-cheat.rs
third_party/rust/regex-0.2.1/examples/shootout-regex-dna-replace.rs
third_party/rust/regex-0.2.1/examples/shootout-regex-dna-single-cheat.rs
third_party/rust/regex-0.2.1/examples/shootout-regex-dna-single.rs
third_party/rust/regex-0.2.1/examples/shootout-regex-dna.rs
third_party/rust/regex-0.2.1/scripts/frequencies.py
third_party/rust/regex-0.2.1/scripts/regex-match-tests.py
third_party/rust/regex-0.2.1/scripts/unicode.py
third_party/rust/regex-0.2.1/src/backtrack.rs
third_party/rust/regex-0.2.1/src/compile.rs
third_party/rust/regex-0.2.1/src/dfa.rs
third_party/rust/regex-0.2.1/src/error.rs
third_party/rust/regex-0.2.1/src/exec.rs
third_party/rust/regex-0.2.1/src/expand.rs
third_party/rust/regex-0.2.1/src/freqs.rs
third_party/rust/regex-0.2.1/src/input.rs
third_party/rust/regex-0.2.1/src/lib.rs
third_party/rust/regex-0.2.1/src/literals.rs
third_party/rust/regex-0.2.1/src/pattern.rs
third_party/rust/regex-0.2.1/src/pikevm.rs
third_party/rust/regex-0.2.1/src/prog.rs
third_party/rust/regex-0.2.1/src/re_builder.rs
third_party/rust/regex-0.2.1/src/re_bytes.rs
third_party/rust/regex-0.2.1/src/re_plugin.rs
third_party/rust/regex-0.2.1/src/re_set.rs
third_party/rust/regex-0.2.1/src/re_trait.rs
third_party/rust/regex-0.2.1/src/re_unicode.rs
third_party/rust/regex-0.2.1/src/simd_accel/mod.rs
third_party/rust/regex-0.2.1/src/simd_accel/teddy128.rs
third_party/rust/regex-0.2.1/src/simd_fallback/mod.rs
third_party/rust/regex-0.2.1/src/simd_fallback/teddy128.rs
third_party/rust/regex-0.2.1/src/sparse.rs
third_party/rust/regex-0.2.1/src/testdata/LICENSE
third_party/rust/regex-0.2.1/src/testdata/README
third_party/rust/regex-0.2.1/src/testdata/basic.dat
third_party/rust/regex-0.2.1/src/testdata/nullsubexpr.dat
third_party/rust/regex-0.2.1/src/testdata/repetition.dat
third_party/rust/regex-0.2.1/src/utf8.rs
third_party/rust/regex-0.2.1/tests/api.rs
third_party/rust/regex-0.2.1/tests/api_str.rs
third_party/rust/regex-0.2.1/tests/bytes.rs
third_party/rust/regex-0.2.1/tests/crazy.rs
third_party/rust/regex-0.2.1/tests/flags.rs
third_party/rust/regex-0.2.1/tests/fowler.rs
third_party/rust/regex-0.2.1/tests/macros.rs
third_party/rust/regex-0.2.1/tests/macros_bytes.rs
third_party/rust/regex-0.2.1/tests/macros_str.rs
third_party/rust/regex-0.2.1/tests/misc.rs
third_party/rust/regex-0.2.1/tests/multiline.rs
third_party/rust/regex-0.2.1/tests/noparse.rs
third_party/rust/regex-0.2.1/tests/plugin.rs
third_party/rust/regex-0.2.1/tests/regression.rs
third_party/rust/regex-0.2.1/tests/replace.rs
third_party/rust/regex-0.2.1/tests/searcher.rs
third_party/rust/regex-0.2.1/tests/set.rs
third_party/rust/regex-0.2.1/tests/shortest_match.rs
third_party/rust/regex-0.2.1/tests/suffix_reverse.rs
third_party/rust/regex-0.2.1/tests/test_backtrack.rs
third_party/rust/regex-0.2.1/tests/test_backtrack_bytes.rs
third_party/rust/regex-0.2.1/tests/test_backtrack_utf8bytes.rs
third_party/rust/regex-0.2.1/tests/test_default.rs
third_party/rust/regex-0.2.1/tests/test_default_bytes.rs
third_party/rust/regex-0.2.1/tests/test_nfa.rs
third_party/rust/regex-0.2.1/tests/test_nfa_bytes.rs
third_party/rust/regex-0.2.1/tests/test_nfa_utf8bytes.rs
third_party/rust/regex-0.2.1/tests/test_plugin.rs
third_party/rust/regex-0.2.1/tests/unicode.rs
third_party/rust/regex-0.2.1/tests/word_boundary.rs
third_party/rust/regex-0.2.1/tests/word_boundary_ascii.rs
third_party/rust/regex-0.2.1/tests/word_boundary_unicode.rs
third_party/rust/regex-syntax-0.4.0/.cargo-checksum.json
third_party/rust/regex-syntax-0.4.0/Cargo.toml
third_party/rust/regex-syntax-0.4.0/src/lib.rs
third_party/rust/regex-syntax-0.4.0/src/literals.rs
third_party/rust/regex-syntax-0.4.0/src/parser.rs
third_party/rust/regex-syntax-0.4.0/src/properties.rs
third_party/rust/regex-syntax-0.4.0/src/unicode.rs
third_party/rust/rustc-serialize-0.3.22/.cargo-checksum.json
third_party/rust/rustc-serialize-0.3.22/.travis.yml
third_party/rust/rustc-serialize-0.3.22/Cargo.toml
third_party/rust/rustc-serialize-0.3.22/LICENSE-APACHE
third_party/rust/rustc-serialize-0.3.22/LICENSE-MIT
third_party/rust/rustc-serialize-0.3.22/README.md
third_party/rust/rustc-serialize-0.3.22/appveyor.yml
third_party/rust/rustc-serialize-0.3.22/benches/base64.rs
third_party/rust/rustc-serialize-0.3.22/benches/hex.rs
third_party/rust/rustc-serialize-0.3.22/benches/json.rs
third_party/rust/rustc-serialize-0.3.22/src/base64.rs
third_party/rust/rustc-serialize-0.3.22/src/collection_impls.rs
third_party/rust/rustc-serialize-0.3.22/src/hex.rs
third_party/rust/rustc-serialize-0.3.22/src/json.rs
third_party/rust/rustc-serialize-0.3.22/src/lib.rs
third_party/rust/rustc-serialize-0.3.22/src/serialize.rs
third_party/rust/rustc_version/.cargo-checksum.json
third_party/rust/rustc_version/.travis.yml
third_party/rust/rustc_version/Cargo.toml
third_party/rust/rustc_version/LICENSE-APACHE
third_party/rust/rustc_version/LICENSE-MIT
third_party/rust/rustc_version/README.md
third_party/rust/rustc_version/src/lib.rs
third_party/rust/semver-0.1.20/.cargo-checksum.json
third_party/rust/semver-0.1.20/.travis.yml
third_party/rust/semver-0.1.20/Cargo.toml
third_party/rust/semver-0.1.20/LICENSE-APACHE
third_party/rust/semver-0.1.20/LICENSE-MIT
third_party/rust/semver-0.1.20/README.md
third_party/rust/semver-0.1.20/src/lib.rs
third_party/rust/semver-0.1.20/src/version.rs
third_party/rust/semver-0.1.20/src/version_req.rs
third_party/rust/slog/.cargo-checksum.json
third_party/rust/slog/CHANGELOG.md
third_party/rust/slog/Cargo.toml
third_party/rust/slog/rusty-tags.vi
third_party/rust/slog/src/lib.rs
third_party/rust/textwrap-0.6.0/.appveyor.yml
third_party/rust/textwrap-0.6.0/.cargo-checksum.json
third_party/rust/textwrap-0.6.0/.travis.yml
third_party/rust/textwrap-0.6.0/Cargo.toml
third_party/rust/textwrap-0.6.0/LICENSE
third_party/rust/textwrap-0.6.0/README.md
third_party/rust/textwrap-0.6.0/benches/linear.rs
third_party/rust/textwrap-0.6.0/examples/layout.rs
third_party/rust/textwrap-0.6.0/examples/termwidth.rs
third_party/rust/textwrap-0.6.0/src/lib.rs
third_party/rust/textwrap/.appveyor.yml
third_party/rust/textwrap/.cargo-checksum.json
third_party/rust/textwrap/.rustfmt.toml
third_party/rust/textwrap/.travis.yml
third_party/rust/textwrap/Cargo.toml
third_party/rust/textwrap/README.md
third_party/rust/textwrap/benches/linear.rs
third_party/rust/textwrap/examples/layout.rs
third_party/rust/textwrap/examples/termwidth.rs
third_party/rust/textwrap/src/lib.rs
third_party/rust/textwrap/tests/version-numbers.rs
third_party/rust/thread-id-3.0.0/.appveyor.yml
third_party/rust/thread-id-3.0.0/.cargo-checksum.json
third_party/rust/thread-id-3.0.0/.travis.yml
third_party/rust/thread-id-3.0.0/Cargo.toml
third_party/rust/thread-id-3.0.0/license
third_party/rust/thread-id-3.0.0/readme.md
third_party/rust/thread-id-3.0.0/src/lib.rs
third_party/rust/unicase-1.4.0/.cargo-checksum.json
third_party/rust/unicase-1.4.0/.travis.yml
third_party/rust/unicase-1.4.0/Cargo.toml
third_party/rust/unicase-1.4.0/LICENSE
third_party/rust/unicase-1.4.0/README.md
third_party/rust/unicase-1.4.0/build.rs
third_party/rust/unicase-1.4.0/src/lib.rs
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/.cargo-checksum.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"files":{".travis.yml":"e17babe5ba0bdd19ec59a37b4a099fd4313bff58be63a2ff506075f9a97dc172","COPYING":"01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f","Cargo.toml":"367c53caf576e1c811c77b5234f4d00ee23f5b1052d5e11bdc0c3153a8d9ae82","LICENSE-MIT":"0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f","Makefile":"a45a128685a2ae7d4fa39d310786674417ee113055ef290a11f88002285865fc","README.md":"9bc60d2cec222b50f87c85cf9475349bb228a36f89796c5d6481c52560ddde3a","UNLICENSE":"7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c","benches/bench.rs":"acf4844efadeafc7bc396c2b16f2a184e140b6c17d1084dbaf454196de2090cd","benches/random.txt":"9386fb3efedc7ffbd09fb49088347f1056bc2d90a861009fa2f804cdb714efcb","ctags.rust":"3d128d3cc59f702e68953ba2fe6c3f46bc6991fc575308db060482d5da0c79f3","examples/dict-search.rs":"30eb44b1a0b599507db4c23a90f74199faabc64a8ae1d603ecdf3bba7428eb1e","session.vim":"95cb1d7caf0ff7fbe76ec911988d908ddd883381c925ba64b537695bc9f021c4","src/autiter.rs":"dc8817af24825c356842c814d771868fb07b6965addf4780e8b9dea9718344a0","src/full.rs":"b83a9c8ff3ef611c316b68650915df2d7f361a49b59dab103dc2c5476f2d8303","src/lib.rs":"68bf2ed02d58bebee6f7f7579038f1e4b60a2c4acc334263cb837bcbe15ffe94","src/main.rs":"fc867cb5f0b02d0f49ecab06b72c05a247cbcf3bf9228c235de8e787bda7bef5"},"package":"0638fd549427caa90c499814196d1b9e3725eb4d15d7339d6de073a680ed0ca2"}
\ No newline at end of file
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/.travis.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-language: rust
-rust:
-  - 1.12.0
-  - stable
-  - beta
-  - nightly
-script:
-  - cargo build --verbose
-  - cargo test --verbose
-  - cargo doc
-  - if [ "$TRAVIS_RUST_VERSION" = "nightly" ]; then
-      cargo bench --verbose;
-    fi
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/COPYING
+++ /dev/null
@@ -1,3 +0,0 @@
-This project is dual-licensed under the Unlicense and MIT licenses.
-
-You may use this code under the terms of either license.
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/Cargo.toml
+++ /dev/null
@@ -1,47 +0,0 @@
-[package]
-name = "aho-corasick"
-version = "0.6.2"  #:version
-authors = ["Andrew Gallant <jamslam@gmail.com>"]
-description = "Fast multiple substring searching with finite state machines."
-documentation = "http://burntsushi.net/rustdoc/aho_corasick/"
-homepage = "https://github.com/BurntSushi/aho-corasick"
-repository = "https://github.com/BurntSushi/aho-corasick"
-readme = "README.md"
-keywords = ["string", "search", "text", "aho", "corasick"]
-license = "Unlicense/MIT"
-exclude = ["benches/sherlock.txt"]
-
-[lib]
-name = "aho_corasick"
-
-[[bin]]
-name = "aho-corasick-dot"
-test = false
-doc = false
-bench = false
-
-[dependencies]
-memchr = "1"
-
-[dev-dependencies]
-csv = "0.15"
-docopt = "0.7"
-memmap = "0.5"
-quickcheck = { version = "0.4", default-features = false }
-rand = "0.3"
-rustc-serialize = "0.3"
-
-[[bench]]
-name = "bench"
-path = "benches/bench.rs"
-test = false
-bench = true
-
-[profile.test]
-debug = true
-
-[profile.bench]
-debug = true
-
-[profile.release]
-debug = true
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/LICENSE-MIT
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Andrew Gallant
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-all:
-	echo Nothing to do...
-
-ctags:
-	ctags --recurse --options=ctags.rust --languages=Rust
-
-docs:
-	cargo doc
-	in-dir ./target/doc fix-perms
-	rscp ./target/doc/* gopher:~/www/burntsushi.net/rustdoc/
-
-push:
-	git push origin master
-	git push github master
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/README.md
+++ /dev/null
@@ -1,55 +0,0 @@
-This crate provides an implementation of the
-[Aho-Corasick](http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm)
-algorithm. Its intended use case is for fast substring matching, particularly
-when matching multiple substrings in a search text. This is achieved by
-compiling the substrings into a finite state machine.
-
-This implementation provides optimal algorithmic time complexity. Construction
-of the finite state machine is `O(p)` where `p` is the length of the substrings
-concatenated. Matching against search text is `O(n + p + m)`, where `n` is
-the length of the search text and `m` is the number of matches.
-
-[![Build status](https://api.travis-ci.org/BurntSushi/aho-corasick.png)](https://travis-ci.org/BurntSushi/aho-corasick)
-[![](http://meritbadge.herokuapp.com/aho-corasick)](https://crates.io/crates/aho-corasick)
-
-Dual-licensed under MIT or the [UNLICENSE](http://unlicense.org).
-
-
-### Documentation
-
-[http://burntsushi.net/rustdoc/aho_corasick/](http://burntsushi.net/rustdoc/aho_corasick/).
-
-
-### Example
-
-The documentation contains several examples, and there is a more complete
-example as a full program in `examples/dict-search.rs`.
-
-Here is a quick example showing simple substring matching:
-
-```rust
-use aho_corasick::{Automaton, AcAutomaton, Match};
-
-let aut = AcAutomaton::new(vec!["apple", "maple"]);
-let mut it = aut.find("I like maple apples.");
-assert_eq!(it.next(), Some(Match {
-    pati: 1,
-    start: 7,
-    end: 12,
-}));
-assert_eq!(it.next(), Some(Match {
-    pati: 0,
-    start: 13,
-    end: 18,
-}));
-assert_eq!(it.next(), None);
-```
-
-
-### Alternatives
-
-Aho-Corasick is useful for matching multiple substrings against many long
-strings. If your long string is fixed, then you might consider building a
-[suffix array](https://github.com/BurntSushi/suffix)
-of the search text (which takes `O(n)` time). Matches can then be found in
-`O(plogn)` time.
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/UNLICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to <http://unlicense.org/>
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/benches/bench.rs
+++ /dev/null
@@ -1,339 +0,0 @@
-#![feature(test)]
-
-extern crate aho_corasick;
-extern crate test;
-
-use std::iter;
-
-use aho_corasick::{Automaton, AcAutomaton, Transitions};
-use test::Bencher;
-
-const HAYSTACK_RANDOM: &'static str = include_str!("random.txt");
-const HAYSTACK_SHERLOCK: &'static str = include_str!("sherlock.txt");
-
-fn bench_aut_no_match<P: AsRef<[u8]>, T: Transitions>(
-    b: &mut Bencher,
-    aut: AcAutomaton<P, T>,
-    haystack: &str,
-) {
-    b.bytes = haystack.len() as u64;
-    b.iter(|| assert!(aut.find(haystack).next().is_none()));
-}
-
-fn bench_box_aut_no_match<P: AsRef<[u8]>, T: Transitions>(
-    b: &mut Bencher,
-    aut: AcAutomaton<P, T>,
-    haystack: &str,
-) {
-    b.bytes = haystack.len() as u64;
-    let aut: &Automaton<P> = &aut;
-    b.iter(|| assert!(Automaton::find(&aut, haystack).next().is_none()));
-}
-
-fn bench_full_aut_no_match<P: AsRef<[u8]>, T: Transitions>(
-    b: &mut Bencher,
-    aut: AcAutomaton<P, T>,
-    haystack: &str,
-) {
-    let aut = aut.into_full();
-    b.bytes = haystack.len() as u64;
-    b.iter(|| assert!(aut.find(haystack).next().is_none()));
-}
-
-fn bench_full_aut_overlapping_no_match<P: AsRef<[u8]>, T: Transitions>(
-    b: &mut Bencher,
-    aut: AcAutomaton<P, T>,
-    haystack: &str,
-) {
-    let aut = aut.into_full();
-    b.bytes = haystack.len() as u64;
-    b.iter(|| assert!(aut.find_overlapping(haystack).count() == 0));
-}
-
-fn bench_naive_no_match<S>(b: &mut Bencher, needles: Vec<S>, haystack: &str)
-        where S: Into<String> {
-    b.bytes = haystack.len() as u64;
-    let needles: Vec<String> = needles.into_iter().map(Into::into).collect();
-    b.iter(|| assert!(!naive_find(&needles, haystack)));
-}
-
-fn haystack_same(letter: char) -> String {
-    iter::repeat(letter).take(10000).collect()
-}
-
-macro_rules! aut_benches {
-    ($prefix:ident, $aut:expr, $bench:expr) => {
-        mod $prefix {
-#![allow(unused_imports)]
-use aho_corasick::{Automaton, AcAutomaton, Sparse};
-use test::Bencher;
-
-use super::{
-    HAYSTACK_RANDOM, haystack_same,
-    bench_aut_no_match, bench_box_aut_no_match,
-    bench_full_aut_no_match, bench_full_aut_overlapping_no_match,
-};
-
-#[bench]
-fn ac_one_byte(b: &mut Bencher) {
-    let aut = $aut(vec!["a"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_one_prefix_byte_no_match(b: &mut Bencher) {
-    let aut = $aut(vec!["zbc"]);
-    $bench(b, aut, &haystack_same('y'));
-}
-
-#[bench]
-fn ac_one_prefix_byte_every_match(b: &mut Bencher) {
-    // We lose the benefit of `memchr` because the first byte matches
-    // in every position in the haystack.
-    let aut = $aut(vec!["zbc"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_one_prefix_byte_random(b: &mut Bencher) {
-    let aut = $aut(vec!["zbc\x00"]);
-    $bench(b, aut, HAYSTACK_RANDOM);
-}
-
-#[bench]
-fn ac_two_bytes(b: &mut Bencher) {
-    let aut = $aut(vec!["a", "b"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_two_diff_prefix(b: &mut Bencher) {
-    let aut = $aut(vec!["abcdef", "bmnopq"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_two_one_prefix_byte_every_match(b: &mut Bencher) {
-    let aut = $aut(vec!["zbcdef", "zmnopq"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_two_one_prefix_byte_no_match(b: &mut Bencher) {
-    let aut = $aut(vec!["zbcdef", "zmnopq"]);
-    $bench(b, aut, &haystack_same('y'));
-}
-
-#[bench]
-fn ac_two_one_prefix_byte_random(b: &mut Bencher) {
-    let aut = $aut(vec!["zbcdef\x00", "zmnopq\x00"]);
-    $bench(b, aut, HAYSTACK_RANDOM);
-}
-
-#[bench]
-fn ac_ten_bytes(b: &mut Bencher) {
-    let aut = $aut(vec!["a", "b", "c", "d", "e",
-                        "f", "g", "h", "i", "j"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_ten_diff_prefix(b: &mut Bencher) {
-    let aut = $aut(vec!["abcdef", "bbcdef", "cbcdef", "dbcdef",
-                        "ebcdef", "fbcdef", "gbcdef", "hbcdef",
-                        "ibcdef", "jbcdef"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_ten_one_prefix_byte_every_match(b: &mut Bencher) {
-    let aut = $aut(vec!["zacdef", "zbcdef", "zccdef", "zdcdef",
-                        "zecdef", "zfcdef", "zgcdef", "zhcdef",
-                        "zicdef", "zjcdef"]);
-    $bench(b, aut, &haystack_same('z'));
-}
-
-#[bench]
-fn ac_ten_one_prefix_byte_no_match(b: &mut Bencher) {
-    let aut = $aut(vec!["zacdef", "zbcdef", "zccdef", "zdcdef",
-                        "zecdef", "zfcdef", "zgcdef", "zhcdef",
-                        "zicdef", "zjcdef"]);
-    $bench(b, aut, &haystack_same('y'));
-}
-
-#[bench]
-fn ac_ten_one_prefix_byte_random(b: &mut Bencher) {
-    let aut = $aut(vec!["zacdef\x00", "zbcdef\x00", "zccdef\x00",
-                        "zdcdef\x00", "zecdef\x00", "zfcdef\x00",
-                        "zgcdef\x00", "zhcdef\x00", "zicdef\x00",
-                        "zjcdef\x00"]);
-    $bench(b, aut, HAYSTACK_RANDOM);
-}
-        }
-    }
-}
-
-aut_benches!(dense, AcAutomaton::new, bench_aut_no_match);
-aut_benches!(dense_boxed, AcAutomaton::new, bench_box_aut_no_match);
-aut_benches!(sparse, AcAutomaton::<&str, Sparse>::with_transitions,
-             bench_aut_no_match);
-aut_benches!(full, AcAutomaton::new, bench_full_aut_no_match);
-aut_benches!(full_overlap, AcAutomaton::new, bench_full_aut_overlapping_no_match);
-
-// A naive multi-pattern search.
-// We use this to benchmark *throughput*, so it should never match anything.
-fn naive_find(needles: &[String], haystack: &str) -> bool {
-    for hi in 0..haystack.len() {
-        let rest = &haystack.as_bytes()[hi..];
-        for needle in needles {
-            let needle = needle.as_bytes();
-            if needle.len() > rest.len() {
-                continue;
-            }
-            if needle == &rest[..needle.len()] {
-                // should never happen in throughput benchmarks.
-                return true;
-            }
-        }
-    }
-    false
-}
-
-#[bench]
-fn naive_one_byte(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["a"], &haystack_same('z'));
-}
-
-#[bench]
-fn naive_one_prefix_byte_no_match(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["zbc"], &haystack_same('y'));
-}
-
-#[bench]
-fn naive_one_prefix_byte_every_match(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["zbc"], &haystack_same('z'));
-}
-
-#[bench]
-fn naive_one_prefix_byte_random(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["zbc\x00"], HAYSTACK_RANDOM);
-}
-
-#[bench]
-fn naive_two_bytes(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["a", "b"], &haystack_same('z'));
-}
-
-#[bench]
-fn naive_two_diff_prefix(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["abcdef", "bmnopq"], &haystack_same('z'));
-}
-
-#[bench]
-fn naive_two_one_prefix_byte_every_match(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["zbcdef", "zmnopq"], &haystack_same('z'));
-}
-
-#[bench]
-fn naive_two_one_prefix_byte_no_match(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["zbcdef", "zmnopq"], &haystack_same('y'));
-}
-
-#[bench]
-fn naive_two_one_prefix_byte_random(b: &mut Bencher) {
-    bench_naive_no_match(b, vec!["zbcdef\x00", "zmnopq\x00"], HAYSTACK_RANDOM);
-}
-
-#[bench]
-fn naive_ten_bytes(b: &mut Bencher) {
-    let needles = vec!["a", "b", "c", "d", "e",
-                       "f", "g", "h", "i", "j"];
-    bench_naive_no_match(b, needles, &haystack_same('z'));
-}
-
-#[bench]
-fn naive_ten_diff_prefix(b: &mut Bencher) {
-    let needles = vec!["abcdef", "bbcdef", "cbcdef", "dbcdef",
-                       "ebcdef", "fbcdef", "gbcdef", "hbcdef",
-                       "ibcdef", "jbcdef"];
-    bench_naive_no_match(b, needles, &haystack_same('z'));
-}
-
-#[bench]
-fn naive_ten_one_prefix_byte_every_match(b: &mut Bencher) {
-    let needles = vec!["zacdef", "zbcdef", "zccdef", "zdcdef",
-                       "zecdef", "zfcdef", "zgcdef", "zhcdef",
-                       "zicdef", "zjcdef"];
-    bench_naive_no_match(b, needles, &haystack_same('z'));
-}
-
-#[bench]
-fn naive_ten_one_prefix_byte_no_match(b: &mut Bencher) {
-    let needles = vec!["zacdef", "zbcdef", "zccdef", "zdcdef",
-                       "zecdef", "zfcdef", "zgcdef", "zhcdef",
-                       "zicdef", "zjcdef"];
-    bench_naive_no_match(b, needles, &haystack_same('y'));
-}
-
-#[bench]
-fn naive_ten_one_prefix_byte_random(b: &mut Bencher) {
-    let needles = vec!["zacdef\x00", "zbcdef\x00", "zccdef\x00",
-                       "zdcdef\x00", "zecdef\x00", "zfcdef\x00",
-                       "zgcdef\x00", "zhcdef\x00", "zicdef\x00",
-                       "zjcdef\x00"];
-    bench_naive_no_match(b, needles, HAYSTACK_RANDOM);
-}
-
-
-// The organization above is just awful. Let's start over...
-
-mod sherlock {
-    use aho_corasick::{Automaton, AcAutomaton};
-    use test::Bencher;
-    use super::HAYSTACK_SHERLOCK;
-
-    macro_rules! sherlock {
-        ($name:ident, $count:expr, $pats:expr) => {
-            #[bench]
-            fn $name(b: &mut Bencher) {
-                let haystack = HAYSTACK_SHERLOCK;
-                let aut = AcAutomaton::new($pats).into_full();
-                b.bytes = haystack.len() as u64;
-                b.iter(|| assert_eq!($count, aut.find(haystack).count()));
-            }
-        }
-    }
-
-    sherlock!(name_alt1, 158, vec!["Sherlock", "Street"]);
-
-    sherlock!(name_alt2, 558, vec!["Sherlock", "Holmes"]);
-
-    sherlock!(name_alt3, 740, vec![
-        "Sherlock", "Holmes", "Watson", "Irene", "Adler", "John", "Baker",
-    ]);
-
-    sherlock!(name_alt3_nocase, 1764, vec![
-        "ADL", "ADl", "AdL", "Adl", "BAK", "BAk", "BAK", "BaK", "Bak", "BaK",
-        "HOL", "HOl", "HoL", "Hol", "IRE", "IRe", "IrE", "Ire", "JOH", "JOh",
-        "JoH", "Joh", "SHE", "SHe", "ShE", "She", "WAT", "WAt", "WaT", "Wat",
-        "aDL", "aDl", "adL", "adl", "bAK", "bAk", "bAK", "baK", "bak", "baK",
-        "hOL", "hOl", "hoL", "hol", "iRE", "iRe", "irE", "ire", "jOH", "jOh",
-        "joH", "joh", "sHE", "sHe", "shE", "she", "wAT", "wAt", "waT", "wat",
-        "ſHE", "ſHe", "ſhE", "ſhe",
-    ]);
-
-    sherlock!(name_alt4, 582, vec!["Sher", "Hol"]);
-
-    sherlock!(name_alt4_nocase, 1307, vec![
-        "HOL", "HOl", "HoL", "Hol", "SHE", "SHe", "ShE", "She", "hOL", "hOl",
-        "hoL", "hol", "sHE", "sHe", "shE", "she", "ſHE", "ſHe", "ſhE", "ſhe",
-    ]);
-
-    sherlock!(name_alt5, 639, vec!["Sherlock", "Holmes", "Watson"]);
-
-    sherlock!(name_alt5_nocase, 1442, vec![
-        "HOL", "HOl", "HoL", "Hol", "SHE", "SHe", "ShE", "She", "WAT", "WAt",
-        "WaT", "Wat", "hOL", "hOl", "hoL", "hol", "sHE", "sHe", "shE", "she",
-        "wAT", "wAt", "waT", "wat", "ſHE", "ſHe", "ſhE", "ſhe",
-    ]);
-}
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/benches/random.txt
+++ /dev/null
@@ -1,513 +0,0 @@
-
-mnxnsynfvuugtbxsxbfxwreuspglnplefzwsp
-tacfqcwnmodnmgnyiuvqoco
-z
-
-qjuozfkexn
-zoaxzncje
-sldhqtmgxzyurfyzwazmmu
-bbeuv
-mzsrihycwcb
-xzfqozfmlnpmrzpxxxytqs
-xrg
-mcplby
-nmslhfgjowhzfxsvyddydnsyehdskbydbjksqtpet
-indvfw
-bvjvvw
-
-pddufodyqtyixbndtumndyz
-xjjhtuvmsxhuwqulqtjhqrdqrmtbcphvyuqllocrnkpfv
-zemshhz
-wss
-xewlrxfmgxnwgphcgefa
-mbgsgbzrtthxweimcqzcaaheurdmd
-osqefupespvh
-z
-tvvlakwzwjbrgjzfgubsmmonav
-pjdskxcfgapsm
-zqktqgkrcdrlskx
-zwwfebhguskho
-zlvvw
-czwm
-gojnpmboehlsazbexjjnuscqftrfufngygjdxcydib
-d
-afigycivicnknfxl
-ljuwuopctiftfwctxecwipjnljyef
-jonwbkodomzhqvlf
-jdkizhognqsdogunwedjsmsdzho
-zxvni
-oynfjf
-muvokjuqz
-azuwrwtuxzfopwrcex
-ixrjinlvxjmn
-blaegnmbhsgsbmebwazaeguugtkowexgnqtbfkldadddv
-tzabyoftyov
-ctbtqbzscxzviuvcigwuwusrdro
-ljynr
-gnnnyyxslrhsbj
-hhzlw
-hijalf
-rxlfqk
-mhaofforwznvmcgplinludpgkucpa
-gvvxsqqfmu
-xxqhoyosixjfhjuxpv
-faadjpvamjekreepizurntvwdynozfawsfawyms
-
-lcbutr
-aqyxvpozkjrecrkl
-lfmochahrr
-ptqyomjlwo
-vcmslulznx
-lmlsskcihrmxauztuarydlp
-beiqsrfnmvmlmybmwpektjbikvpggthpabqsgmjhnthvysuhwbigillugjsp
-dfsuegseffwcsnvsrqedytblbpzbfeyfsq
-kypvqctrkuds
-ylqeduokzgdqaxelhftxnxbidu
-bprzyayfopxdsmfhhfqowa
-ymiutdtlfaaxpbtaeslv
-ggago
-
-owpbicekdeykzfgcbgzobdvvrtetvcv
-xsrlgingstiez
-gyncqvq
-xasohmeiwyscpehctmzmsnjklg
-xsudghakxlw
-dzqlfptjogzpkvwuticcyugnyopypuqqc
-wlxshxbhdvuherumoppcc
-
-znyaptivzncvkpeyeipynqefjxjjcsgfqbnezeebtowdrbjaqjlbxwvyikrmxjwoxngqgvfpbniftnmszuxg
-umwpwwyvufy
-pallkjtnrmtauqxauewgygwkjjwebbkabhtxticxmxfujpxlrpzlrozfslkzfdsswlmmsbdgjwmjnummk
-dhsxylejzityahtqqzmohrpzjprrsraztpnuagtyzfjdekthvdogfidksrdppr
-ybc
-fyukknoqfnkllkwflwempjijxgo
-dltvlau
-rhvrvlwsribfctuzodfqkdczfzxnetqqzflnhiyl
-goxmcasmq
-wljbhwkpahdotqhhrbhqzijv
-lszewkgdmkezvgmbmllhpksdkoiwgkvqjmurshrptlctqsosuurndcuzjfwherotv
-dudxxihygxblhgchbgzyzffb
-eht
-fvwxvqoltdcsd
-rkuig
-e
-axhsacsmnicugul
-rubtdlhjqndxdzzwfnkuzy
-swxteuyxxsktkjgv
-hzwwodlqaq
-vxgecev
-qnwla
-vdxjuzpyoqhpmuunyffptopmeauhycs
-dkzo
-awrfzatzohslgvqlaezepmli
-qgxatixvpkkhvkumbwmwcagtgyfljdok
-amdnzstpvcqj
-xsrvwvhjirzfgkessve
-qezwbfltfbikbmoasvoflozsjhrljnszqiciuqmflrlqowwkoevuumh
-babskcvavmtvsxqsewirucwzajjcfcqwsydydqo
-ywfurpsl
-edacsjjkjjewkxfoh
-dcgkfpcjezurnuhiatrczcp
-xsatnimwbcciu
-grzmbrsvvcyigcbmcqfwiiknrohveubhyijxeyzfm
-kqyewccgcqrrrznwxmoztlyseagbpyho
-najju
-nis
-awgzdvfjkzlrsjcqfeacx
-oisuflfigrjaex
-desbdulyuwqxuxianyypybxwlql
-ekmqgspvqpftpwswayh
-egbyj
-fznzprhvnnwcxgcc
-wfdsueieosmugirxbymbpmfrspvrktjzguxm
-qkjrufshwnfwwpbhukdjlaqvljlgubmqmhnha
-hwqpudgnblhlxppbrmbznotteivuzguuwlhtkytky
-w
-yofkyzbpg
-cenolnfnllkvhikrpttcxgqxmufvorekjruyjxmr
-
-hyexmpjijgzumawp
-cdbevdilgopbzlo
-fivelagckslkugdxprjxkylizewcptwxfhomzuituujixchadmnjoktnqa
-csojvlinzmmkkfzqueamnuwkanzdzsavgohposbuoamoevehqrmcxdsuyelvvctoejzoertqormhaaxwofvjzekwt
-sbkghhnhutrvwtyjaxndzyjamrhx
-jjyqy
-majwbnrhveuhrsbbbjrwpwuplifeseylqh
-wyvutpxnkrnkuxxetjkkifpqb
-dyzucmbcvgnjeecm
-hz
-uhnuipthxrzkqluosvk
-lwqqzsdwiwvwaqfwlvubadlyizlo
-jbd
-oyzjeu
-kydjkbsqxnbfiuesc
-smeubjqrcxdvhsabzceyglqjzbfmoacmwvwjbhhxbr
-uabipgecujfdfxpmdzrscdyvefizabgspqjrrkmgjt
-xgvdgzryz
-lw
-uimob
-ifhn
-bqph
-ole
-g
-wt
-k
-yslzrkwkundxfdibwqvucemepqxlmlpyngabbeciuzhptpjdetyngrtxrdtzmvq
-ccwapidp
-
-bwvrgvmtshevrophy
-ni
-fdkplu
-mdykey
-i
-rhsrenoetdggpjb
-djmkplpeabsholx
-judxtub
-fooakqwvocvpcrvxqhvtmpvhkrecy
-uuxscjillynilbkrgt
-evtinrmilniguarqritpeipwochmdw
-sxaqzjybydyvnmmjtdcgkjnqfcklbfpkdfyewgcukqoiegyfp
-kg
-ovrwieqhy
-jcxqtkerzjwhs
-xeonglszbgypafhmqcaseimzjgebkvigbqwsayrnrprtuvhsxyitfqygohgorcdnufbcyvevvgzmjrgjqqquwkszplogx
-zdketqqv
-yebckucwayckeezfvtnavglpjh
-zorkfrwk
-pad
-xqaquxudybwtgixbfktinctfirjfdayh
-rieknj
-ebk
-qzbcfywfdmhsdruhopovemafijbscagllkmhmof
-
-asbsnbddlobwoqatfhkbhhsymzqxjuixwreheugvngmgcuqpkjhhfwpbarqaxrwgwnjbanljlds
-etevdvlc
-lqyjrnmenhn
-k
-tsf
-zczgeavcexh
-jlpuxywtsrvnvluruqhecjca
-ir
-rikrgkmhwaosodkxgcnrexfmdrszhnmutpvwztg
-bffjqovvkemctnsgeh
-weysbhzixiipfithjfsk
-usyzvaiyuhmksfluoirfbnsu
-o
-cgawpdakaszeafdtbdkqtlzkrpnoqomqvuaqcfmzgvfegovtfaonelpv
-izmrcjlk
-xmzemniyrzy
-knqexaafsdlimdamcrprlshq
-qkmqw
-dntgjwsibclvposdwjuklvtejjjdjibgpyynqpgprvvaetshhmvfkcpb
-otvazkrkklrxfotpopyjte
-fghkcnpi
-rulyaihsowvcgbzeiblhuhhfbmncqsuuqcxvseorn
-exirzfmojnxcoqom
-zsgpgtokun
-zvamxfocorganbtlafifwdqmqtsnktbwwtewborq
-
-cxlnaspjqvsitjyzyriqsuorjsrvzqenisprttudxntsbqrpjtdkxnwcwgjyxmgtqljcrmrbrmyvosojzlumcmjcgfjsdehec
-mvx
-mt
-mckr
-teulvroifk
-laaicc
-koufy
-bexmwsvyarnznebdfy
-ripvviosbqijsxnjilwddaqaqemzsdarnxmfooxghoypizwtbueo
-ljycycuqwfnzbambibqdixmkkvwtubepla
-cis
-kcg
-vmbbiuuoamenzepuagpfujevfstqtndjxjchdvycfrrrowochtjdmkklgnhf
-pmorrwguxkvdxpluatagaziin
-
-uwvzbmkmykjkmknzppklx
-pnzxuvsrjunqxercsnvayhykcazdeclomdsasgkpqpiufyfqsxhj
-yceizkddwojgweegcllaagpvrpo
-ek
-kuxxgbezqyxvfaxdwnqdgqsmneijunxzlwxkrs
-ldldbrxmvtjlqxifngmactzqcygkvuteffcmvphevilabgukatqakamjlridznodcvblvlogulmcixxfimh
-iuzjootuywjqklolzzhpeaynydjwtufjavbozxnzckuzdodkvkjfmhinelv
-swlfkcufscfcovmghqwcrtxjukwafoeogrkgubbqgwzm
-gjcylkwgzroubdssuqeykqjcmguso
-fzq
-srfvysoxtlylctp
-
-pbfeiuzwoyixews
-ocvvunfsjnrtklmuuzjojw
-xdjcnrpqhmpmpcwacpcdtmbsczvhllkqapzjuaf
-nfnuvjz
-fwnuiyqpn
-wshxxxpzzxp
-hibrxcfeqca
-
-wqhlllarl
-bukcbojv
-plrytapy
-xm
-vlgfqoyzdczqbbaxjwbjjevjhxgopuqvqcrj
-vpjqfbdnsdxlbuuiqocvrhap
-mgumjbvnnzgnrdru
-gcgzugazxdcamrhczfzhtmdjj
-uislwq
-vooai
-zjuqfmebuzsqngzekyajujkopvayxtdzvugwwucvlsbrnhitfotmhhmgddlzlvqrkcponictrfweuilfjiuoabkfdvpjiqjrrgi
-aptjfhmrnxaq
-hbs
-w
-mwmoxqvucwygunplzvxtxpk
-fgmqmtlorfzytjdzffsosfccnfwugrsrynuej
-rpmpenrhsxoefnblyumjqwvuyszyppnttuyvazjdug
-zdzxraxkroknkmqgvuoqeqdtvclsvvuwmdwzfugcpteohlogxubyoebvrzbqzklvehfcqadtdrkpubfhmokzwyosogepwragcpwxo
-ax
-dz
-de
-
-thvkdmnbdws
-
-ejmubw
-umvwkaubzurf
-wyxtxeluaoox
-wwbioobtgmkebxo
-miglgnafmdarzkeblyjctuayzyoeqnfnbtrcbymdzkzg
-loavxq
-kzhllgsenxlbgdbfzwbg
-yxflogzsohlcycbyzegeubfflouvtuatixhjvicjegltjiy
-jigqfjppafdiarc
-mcnmwtachgearonfcymvjbrnljjxmlzkudvzqsarnfysmxlfrtlvjxwvpdbhvwysnvcdozfcruhjwnucdzakkilmlfgjiolcatpfusm
-
-n
-pdjunfcz
-dc
-edxkkxabsbvmvifiinnoccki
-bc
-gwtwsvorwzfqpz
-exidmexstfflkhi
-s
-s
-c
-wtcjfywlayhpbqktcepoybowtkrmnumqsg
-ozclkgjdmdk
-jmegtbunyexurvfexhqptnqzie
-tkoenpagzwqfawlxvzaijsjqhmg
-swodqfjpdqcbkc
-ujokogocyaygdibgpglecis
-shlmdmgonvpuaxlhrymkxtiytmv
-brhk
-jmsyiuomiywxhegilycjprkyfgojdo
-
-wzdzrgpdiosdsvkcw
-odlnmsfnjrcsnflviwvawybpczdkzvdocpwrmavz
-p
-ubowamlskcqhdxuckrxa
-fawhntiwhmdwkddnahmtajqqazpdygttqivhdiodkcpcwv
-gmxujmmaufmbipaiulhurzkfdg
-eixjhmbaeoybiwk
-kumntgrgiofcmujlzbcopuobambsw
-mnjkqiyb
-iktwnsnv
-hfuzcl
-tqiyqvagbqgtowpjbedgjot
-dfemvamelxadkztogliizdtsddoboafawficudlefo
-raecmxiiibljryswntpfed
-mbwrtsebkeegw
-x
-epp
-he
-
-vnztrswhiusokqdkmsnpuswucvfhcthjbtam
-baxlwidsgbdpzvnlj
-tcbjjoadrzo
-aiidahyllzzsg
-
-igebuubweicbssgddpmqxunrawavuglmpxrtkqsvjjtscibqiejjfgfnovokodmqcqitlteiakooupvzkwucucrfdzjvjbqbkgutoybmpfvhbutigdxhfiqfplyciz
-cnrhbjdnjftwfwlwzrdkwhajgsizsi
-qfntnt
-okqyfnbresp
-asyg
-mjqdkdyggdxzwuzglays
-h
-ifaqcazoy
-fol
-vvsusbnugduxsceozmsarbp
-epjwtorx
-bwiuxxiyc
-cw
-bwogruhctwkfvbexjnwircykxyzjmats
-kygiochfwlpsvmxcgmtjrgvfdptd
-q
-qmpqe
-
-z
-jghffhqfoecmszunhxmzmzhlmbrvjabhrkihgjmvckhkfpaygjkg
-
-kfiyfgounmhlvhupswqdgws
-ezzdpyqucqoocsdcjtruqpokldfkmjhqzoynirybsifyaxnaxppthjoqy
-nwetlgzwrhkhtuubbkbepuhbllxspvagxrqokwnrhkbwdwtp
-hlazomrhqogoaxypqaszwfxxmutvbpuuvpdffuqskcbzlwyzcssnflkwiydoveyxjnzllzhyozbsa
-hwnitkwbxcyibbqsluuqywbk
-
-ozpfjsdrc
-yoepefuy
-lvmspzepnetra
-genbrcrmuqfvkaouvuymoxhcxotjjhk
-pcshyqgbmqdubsdajnyfqvxkqvywffzn
-ukhcbyzwslqeq
-otfrmcbnhbyffxqregqoufdxucjunwdhlqqeiiawbxlpqeyzzopfungrryqdykgizrhqodirvazm
-dhpfhzyq
-cloz
-eduupqifolfekve
-qiec
-ishnjukvomntmdthlkajxpiwk
-y
-axl
-tmyskjqkjsvumizlal
-wvvolwewsfxhhdieuagdcuhwsgqvswpbkdkpxskloalmr
-ryfmhe
-z
-mmbpgsyrfvzdatbjrjhuipwt
-llzwizmmuulgwocowwmugtaoewkhnqxparvtynlffffdfcocdbba
-
-pyczkzbmcgrdnxnmezsx
-gsqe
-mcocxcolcynhpecstsn
-opnpplkccobjuhtbhirpzfxuktmpsiwbvsgiaavvdge
-wpaldxzasnrbvtugjwytvtfttrh
-zxecurevkjiyxy
-wtnovebcmglkktic
-fdpwfgvlvovxrwh
-bmwgdullzy
-uzwhagxinwqifxjbcntqzqoxkmpqxhe
-jrfizsnwxwnnhb
-inapddlahrp
-
-ndtvkceobe
-buskgghihdjmjlwfc
-j
-rkvffxwtmzoeruhlsurwtnuh
-cbvkhfepkdishfpqvijzrpleuy
-jzdpxjhcgqnybssfegvrnpgyehdqpgjwudbwrjbavp
-xzzvgqdrdwajmdmj
-vfatwsxvwfdbdhnijdujoyotwvwjipuuetichcfmvgrsnjpqaaezjtkvc
-lbfoqgfshrtwgdqufwnfuitdrjydqctqixlzufkdbp
-zgau
-qefdpmtkecvtj
-kuphldkvnzdtpd
-dti
-fpd
-gfrliyegxsb
-i
-qsddsrmkyfgzrjeqnitmnypbcakh
-vfbvbrpuogzhzrbmklvhji
-nkz
-xlufbaoblbmeub
-alwuzxzmobwdukvwnkiwmuqhuxfhevogdnqtmxjptqznrk
-cngpoty
-
-ms
-qvenfg
-dmeaffm
-jycfgnanbmoamhmarkmjcagbp
-ysqmbhopgx
-jczbzgwedsp
-
-zxzwjrxcwdtleizjlvifjwgxiibezwxhtzywqdi
-mtgnlu
-xboxirdchurkfnklnpkapnqfxnhrxyseiujrznjm
-
-zm
-atddskbghcahlhql
-szshwzmmvu
-befdtpouamwhiisyybispkchpjhownatawjfbx
-
-ennkzbrlygd
-zbt
-upphzpdwzmlhhhbqvjsfmbnrar
-ddcs
-ipbxgzyudjyongtcyygncojdufnufqpdppgvq
-gc
-isu
-foa
-wf
-jdlvqxgfbowhohhyyngbcs
-zjuwjyucdwblatsnywaaoftlcamfbcnw
-lzrioesuhoeevczuwrnltmkahfwiu
-uicggfbddqltnjyxfltbnaekncnyxsit
-zkxsqkqrwrzrxgxbsgxatybfr
-
-ptvmfyxdcglbfipcguqthjygzqnpqssscukzawynidtchjrrxwuxifoe
-w
-ohu
-vg
-zagpowezvbniybgold
-lhqseqcxteiqtgnpanpvrmvvlltxh
-mtfnxn
-wyodtg
-
-rawpbgtpbaktqzmmpzxmrlwpvvmdsl
-widcfbirvswraukbmkhf
-vplrueuxomjkqrtjgyxjdkexttzyozawyq
-hrpbahllznvmjudzxpbbv
-tlavfrxygjfipkupwnbacltcfepeg
-icu
-otxcu
-aewazy
-hl
-
-fmrp
-qaacthwzohenzjr
-xbyebba
-rvkph
-mkhhmh
-swme
-zjmdoypaktglcyzobquunvthcdwegtbywpijxd
-jvkuhnxqc
-gibhqgjojsxt
-bodbktzomiqujtbstqiyquwvqgufphqstenxvddkvtdh
-bpusrxkfi
-zgp
-pmxvgamydyakituvvsucsuidrlznupcsinltmrahulhepxmhoqtfvpjkxzhrrinncuh
-jzgkjjhjqykzelaszvcwvvwbnzsxdeaerfnaravk
-ynanrqyrxo
-zsmuxofullob
-brklgrcqefdyoczy
-qkpls
-snhqumae
-iqdtzjadzzvnqvdvjfsaf
-nfqfdqiramueblxkaqxbbkxwywzgdbndjjiqk
-tc
-kp
-cpuckbjsxhtxmomfesgxdpz
-oseif
-ybhxbvyxrpkrexrhjzoaxxohrhsniewsrktjnaztn
-ggelspdzhzbchruhbjbjidgjwdlhdycetqaswh
-jkgivsngygkbqtlmoj
-dwpnanfvitxg
-ospxbwxp
-wgvmvrnjescemdoiralbkvemalifxnyhrbdgodml
-hjtsnkzknkplbzsiwmneefdkihnhsamjsrxggclyjqgpqltizi
-
-
-sykgbuypwwhweab
-nvdkkkskmtiwpoerkon
-sx
-sbyflwwiqylbskdlxesmylpaz
-dnwcjenaluwesyywfaezznwkdwpoesxpu
-kie
-dslccwfryol
-gfhomgfn
-zprjtfqvkotktzidmoyrivall
-bunvsqkysdelozemnjoeqfolruulpbipm
-ullyzfahpkhkja
-hwd
-kvyqtprpuulgsk
-zotbkcadnxmfvqmtlbxalhughceyfcibtzzj
-vvpjbgxygl
-hpic
-mhrqd
-dv
-thehuzdbaacoidjoljbysnqwrrxxplrdznmgiukkvjqbopb
-moszjt
-rmtbunktkywqirveeqfa
-kse
-wbfflnatgzobjrxghjgvcsyxoruenxhyomutbptswjajawqjpqafpdcstkiyjuilimecgejpqmyciolgcmdpcstzdozbmnza
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/ctags.rust
+++ /dev/null
@@ -1,11 +0,0 @@
---langdef=Rust
---langmap=Rust:.rs
---regex-Rust=/^[ \t]*(#\[[^\]]\][ \t]*)*(pub[ \t]+)?(extern[ \t]+)?("[^"]+"[ \t]+)?(unsafe[ \t]+)?fn[ \t]+([a-zA-Z0-9_]+)/\6/f,functions,function definitions/
---regex-Rust=/^[ \t]*(pub[ \t]+)?type[ \t]+([a-zA-Z0-9_]+)/\2/T,types,type definitions/
---regex-Rust=/^[ \t]*(pub[ \t]+)?enum[ \t]+([a-zA-Z0-9_]+)/\2/g,enum,enumeration names/
---regex-Rust=/^[ \t]*(pub[ \t]+)?struct[ \t]+([a-zA-Z0-9_]+)/\2/s,structure names/
---regex-Rust=/^[ \t]*(pub[ \t]+)?mod[ \t]+([a-zA-Z0-9_]+)/\2/m,modules,module names/
---regex-Rust=/^[ \t]*(pub[ \t]+)?static[ \t]+([a-zA-Z0-9_]+)/\2/c,consts,static constants/
---regex-Rust=/^[ \t]*(pub[ \t]+)?trait[ \t]+([a-zA-Z0-9_]+)/\2/t,traits,traits/
---regex-Rust=/^[ \t]*(pub[ \t]+)?impl([ \t\n]+<.*>)?[ \t]+([a-zA-Z0-9_]+)/\3/i,impls,trait implementations/
---regex-Rust=/^[ \t]*macro_rules![ \t]+([a-zA-Z0-9_]+)/\1/d,macros,macro definitions/
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/examples/dict-search.rs
+++ /dev/null
@@ -1,151 +0,0 @@
-// This example demonstrates how to use the Aho-Corasick algorithm to rapidly
-// scan text for matches in a large dictionary of keywords. This example by
-// default reads your system's dictionary (~120,000 words).
-extern crate aho_corasick;
-extern crate csv;
-extern crate docopt;
-extern crate memmap;
-extern crate rustc_serialize;
-
-use std::error::Error;
-use std::fs::File;
-use std::io::{self, BufRead, Write};
-use std::process;
-
-use aho_corasick::{Automaton, AcAutomaton, Match};
-use docopt::Docopt;
-use memmap::{Mmap, Protection};
-
-static USAGE: &'static str = "
-Usage: dict-search [options] <input>
-       dict-search --help
-
-Options:
-    -d <path>, --dict <path>   Path to dictionary of keywords to search.
-                               [default: /usr/share/dict/words]
-    -m <len>, --min-len <len>  The minimum length for a keyword in UTF-8
-                               encoded bytes. [default: 5]
-    --overlapping              Report overlapping matches.
-    -c, --count                Show only the numebr of matches.
-    --memory-usage             Show memory usage of automaton.
-    --full                     Use fully expanded transition matrix.
-                               Warning: may use lots of memory.
-    -h, --help                 Show this usage message.
-";
-
-#[derive(Clone, Debug, RustcDecodable)]
-struct Args {
-    arg_input: String,
-    flag_dict: String,
-    flag_min_len: usize,
-    flag_overlapping: bool,
-    flag_memory_usage: bool,
-    flag_full: bool,
-    flag_count: bool,
-}
-
-fn main() {
-    let args: Args = Docopt::new(USAGE)
-                            .and_then(|d| d.decode())
-                            .unwrap_or_else(|e| e.exit());
-    match run(&args) {
-        Ok(()) => {}
-        Err(err) => {
-            writeln!(&mut io::stderr(), "{}", err).unwrap();
-            process::exit(1);
-        }
-    }
-}
-
-fn run(args: &Args) -> Result<(), Box<Error>> {
-    let aut = try!(build_automaton(&args.flag_dict, args.flag_min_len));
-    if args.flag_memory_usage {
-        let (bytes, states) = if args.flag_full {
-            let aut = aut.into_full();
-            (aut.heap_bytes(), aut.num_states())
-        } else {
-            (aut.heap_bytes(), aut.num_states())
-        };
-        println!("{} bytes, {} states", bytes, states);
-        return Ok(());
-    }
-
-    if args.flag_full {
-        let aut = aut.into_full();
-        if args.flag_overlapping {
-            if args.flag_count {
-                let mmap = Mmap::open_path(
-                    &args.arg_input, Protection::Read).unwrap();
-                let text = unsafe { mmap.as_slice() };
-                println!("{}", aut.find_overlapping(text).count());
-            } else {
-                let rdr = try!(File::open(&args.arg_input));
-                try!(write_matches(&aut, aut.stream_find_overlapping(rdr)));
-            }
-        } else {
-            if args.flag_count {
-                let mmap = Mmap::open_path(
-                    &args.arg_input, Protection::Read).unwrap();
-                let text = unsafe { mmap.as_slice() };
-                println!("{}", aut.find(text).count());
-            } else {
-                let rdr = try!(File::open(&args.arg_input));
-                try!(write_matches(&aut, aut.stream_find(rdr)));
-            }
-        }
-    } else {
-        if args.flag_overlapping {
-            if args.flag_count {
-                let mmap = Mmap::open_path(
-                    &args.arg_input, Protection::Read).unwrap();
-                let text = unsafe { mmap.as_slice() };
-                println!("{}", aut.find_overlapping(text).count());
-            } else {
-                let rdr = try!(File::open(&args.arg_input));
-                try!(write_matches(&aut, aut.stream_find_overlapping(rdr)));
-            }
-        } else {
-            if args.flag_count {
-                let mmap = Mmap::open_path(
-                    &args.arg_input, Protection::Read).unwrap();
-                let text = unsafe { mmap.as_slice() };
-                println!("{}", aut.find(text).count());
-            } else {
-                let rdr = try!(File::open(&args.arg_input));
-                try!(write_matches(&aut, aut.stream_find(rdr)));
-            }
-        }
-    }
-    Ok(())
-}
-
-fn write_matches<A, I>(aut: &A, it: I) -> Result<(), Box<Error>>
-        where A: Automaton<String>, I: Iterator<Item=io::Result<Match>> {
-    let mut wtr = csv::Writer::from_writer(io::stdout());
-    try!(wtr.write(["pattern", "start", "end"].iter()));
-    for m in it {
-        let m = try!(m);
-        try!(wtr.write([
-            aut.pattern(m.pati),
-            &m.start.to_string(),
-            &m.end.to_string(),
-        ].iter()));
-    }
-    try!(wtr.flush());
-    Ok(())
-}
-
-fn build_automaton(
-    dict_path: &str,
-    min_len: usize,
-) -> Result<AcAutomaton<String>, Box<Error>> {
-    let buf = io::BufReader::new(try!(File::open(dict_path)));
-    let mut lines = Vec::with_capacity(1 << 10);
-    for line in buf.lines() {
-        let line = try!(line);
-        if line.len() >= min_len {
-            lines.push(line);
-        }
-    }
-    Ok(AcAutomaton::with_transitions(lines))
-}
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/session.vim
+++ /dev/null
@@ -1,1 +0,0 @@
-au BufWritePost *.rs silent!make ctags > /dev/null 2>&1
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/src/autiter.rs
+++ /dev/null
@@ -1,503 +0,0 @@
-use std::io::{self, BufRead};
-use std::marker::PhantomData;
-
-use memchr::{memchr, memchr2, memchr3};
-
-use super::{ROOT_STATE, StateIdx};
-
-/// An abstraction over automatons and their corresponding iterators.
-/// The type parameter `P` is the type of the pattern that was used to
-/// construct this Automaton.
-pub trait Automaton<P> {
-    /// Return the next state given the current state and next character.
-    fn next_state(&self, si: StateIdx, b: u8) -> StateIdx;
-
-    /// Return true if and only if the given state and current pattern index
-    /// indicate a match.
-    fn has_match(&self, si: StateIdx, outi: usize) -> bool;
-
-    /// Build a match given the current state, pattern index and input index.
-    fn get_match(&self, si: StateIdx, outi: usize, texti: usize) -> Match;
-
-    /// Return the set of bytes that have transitions in the root state.
-    fn start_bytes(&self) -> &[u8];
-
-    /// Returns all of the patterns matched by this automaton.
-    ///
-    /// The order of the patterns is the order in which they were added.
-    fn patterns(&self) -> &[P];
-
-    /// Returns the pattern indexed at `i`.
-    ///
-    /// The index corresponds to the position at which the pattern was added
-    /// to the automaton, starting at `0`.
-    fn pattern(&self, i: usize) -> &P;
-
-    /// Return the number of patterns in the automaton.
-    #[inline]
-    fn len(&self) -> usize {
-        self.patterns().len()
-    }
-
-    /// Returns true if the automaton has no patterns.
-    #[inline]
-    fn is_empty(&self) -> bool {
-        self.len() == 0
-    }
-
-    /// Returns an iterator of non-overlapping matches in `s`.
-    fn find<'a, 's, Q: ?Sized + AsRef<[u8]>>(
-        &'a self,
-        s: &'s Q,
-    ) -> Matches<'a, 's, P, Self>
-    where Self: Sized {
-        Matches {
-            aut: self,
-            text: s.as_ref(),
-            texti: 0,
-            si: ROOT_STATE,
-            _m: PhantomData,
-        }
-    }
-
-    /// Returns an iterator of overlapping matches in `s`.
-    fn find_overlapping<'a, 's, Q: ?Sized + AsRef<[u8]>>(
-        &'a self,
-        s: &'s Q,
-    ) -> MatchesOverlapping<'a, 's, P, Self>
-    where Self: Sized {
-        MatchesOverlapping {
-            aut: self,
-            text: s.as_ref(),
-            texti: 0,
-            si: ROOT_STATE,
-            outi: 0,
-            _m: PhantomData,
-        }
-    }
-
-    /// Returns an iterator of non-overlapping matches in the given reader.
-    fn stream_find<'a, R: io::Read>(
-        &'a self,
-        rdr: R,
-    ) -> StreamMatches<'a, R, P, Self>
-    where Self: Sized {
-        StreamMatches {
-            aut: self,
-            buf: io::BufReader::new(rdr),
-            texti: 0,
-            si: ROOT_STATE,
-            _m: PhantomData,
-        }
-    }
-
-    /// Returns an iterator of overlapping matches in the given reader.
-    fn stream_find_overlapping<'a, R: io::Read>(
-        &'a self,
-        rdr: R,
-    ) -> StreamMatchesOverlapping<'a, R, P, Self>
-    where Self: Sized {
-        StreamMatchesOverlapping {
-            aut: self,
-            buf: io::BufReader::new(rdr),
-            texti: 0,
-            si: ROOT_STATE,
-            outi: 0,
-            _m: PhantomData,
-        }
-    }
-}
-
-impl<'a, P: AsRef<[u8]>, A: 'a + Automaton<P> + ?Sized>
-        Automaton<P> for &'a A {
-    fn next_state(&self, si: StateIdx, b: u8) -> StateIdx {
-        (**self).next_state(si, b)
-    }
-
-    fn has_match(&self, si: StateIdx, outi: usize) -> bool {
-        (**self).has_match(si, outi)
-    }
-
-    fn start_bytes(&self) -> &[u8] {
-        (**self).start_bytes()
-    }
-
-    fn patterns(&self) -> &[P] {
-        (**self).patterns()
-    }
-
-    fn pattern(&self, i: usize) -> &P {
-        (**self).pattern(i)
-    }
-
-    fn get_match(&self, si: StateIdx, outi: usize, texti: usize) -> Match {
-        (**self).get_match(si, outi, texti)
-    }
-}
-
-/// Records a match in the search text.
-#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)]
-pub struct Match {
-    /// The pattern index.
-    ///
-    /// This corresponds to the ordering in which the matched pattern was
-    /// added to the automaton, starting at `0`.
-    pub pati: usize,
-    /// The starting byte offset of the match in the search text.
-    pub start: usize,
-    /// The ending byte offset of the match in the search text.
-    ///
-    /// (This can be re-captiulated with `pati` and adding the pattern's
-    /// length to `start`, but it is convenient to have it here.)
-    pub end: usize,
-}
-
-/// An iterator of non-overlapping matches for in-memory text.
-///
-/// This iterator yields `Match` values.
-///
-/// `'a` is the lifetime of the automaton, `'s` is the lifetime of the
-/// search text, and `P` is the type of the Automaton's pattern.
-#[derive(Debug)]
-pub struct Matches<'a, 's, P, A: 'a + Automaton<P> + ?Sized> {
-    aut: &'a A,
-    text: &'s [u8],
-    texti: usize,
-    si: StateIdx,
-    _m: PhantomData<P>,
-}
-
-// When there's an initial lone start byte, it is usually worth it
-// to use `memchr` to skip along the input. The problem is that
-// the skipping function is called in the inner match loop, which
-// can be quite costly if the skipping condition is never met.
-// Therefore, we lift the case analysis outside of the inner loop at
-// the cost of repeating code.
-//
-// `step_to_match` is the version of the inner loop without skipping,
-// and `skip_to_match` is the version with skipping.
-#[inline(never)]
-fn step_to_match<P, A: Automaton<P> + ?Sized>(
-    aut: &A,
-    text: &[u8],
-    mut texti: usize,
-    mut si: StateIdx
-) -> Option<(usize, StateIdx)> {
-    while texti < text.len() {
-        si = aut.next_state(si, text[texti]);
-        if aut.has_match(si, 0) {
-            return Some((texti, si));
-        }
-        texti += 1;
-        if texti + 4 < text.len() {
-            si = aut.next_state(si, text[texti]);
-            if aut.has_match(si, 0) {
-                return Some((texti, si));
-            }
-            texti += 1;
-            si = aut.next_state(si, text[texti]);
-            if aut.has_match(si, 0) {
-                return Some((texti, si));
-            }
-            texti += 1;
-            si = aut.next_state(si, text[texti]);
-            if aut.has_match(si, 0) {
-                return Some((texti, si));
-            }
-            texti += 1;
-            si = aut.next_state(si, text[texti]);
-            if aut.has_match(si, 0) {
-                return Some((texti, si));
-            }
-            texti += 1;
-            si = aut.next_state(si, text[texti]);
-            if aut.has_match(si, 0) {
-                return Some((texti, si));
-            }
-            texti += 1;
-        }
-    }
-    None
-}
-
-fn skip_to_match<P, A: Automaton<P> + ?Sized, F: Fn(&A, &[u8], usize) -> usize>(
-    aut: &A,
-    text: &[u8],
-    mut texti: usize,
-    mut si: StateIdx,
-    skip: F,
-) -> Option<(usize, StateIdx)> {
-    if si == ROOT_STATE {
-        texti = skip(aut, text, texti);
-    }
-    while texti < text.len() {
-        si = aut.next_state(si, text[texti]);
-        if aut.has_match(si, 0) {
-            return Some((texti, si));
-        }
-        if si == ROOT_STATE {
-            texti = skip(aut, text, texti + 1);
-        } else {
-            texti += 1;
-        }
-    }
-    None
-}
-
-#[inline]
-fn skip1<P, A: Automaton<P> + ?Sized>(
-    aut: &A,
-    text: &[u8],
-    at: usize,
-) -> usize {
-    debug_assert!(aut.start_bytes().len() == 1);
-    let b = aut.start_bytes()[0];
-    match memchr(b, &text[at..]) {
-        None => text.len(),
-        Some(i) => at + i,
-    }
-}
-
-#[inline]
-fn skip2<P, A: Automaton<P> + ?Sized>(
-    aut: &A,
-    text: &[u8],
-    at: usize,
-) -> usize {
-    debug_assert!(aut.start_bytes().len() == 2);
-    let (b1, b2) = (aut.start_bytes()[0], aut.start_bytes()[1]);
-    match memchr2(b1, b2, &text[at..]) {
-        None => text.len(),
-        Some(i) => at + i,
-    }
-}
-
-#[inline]
-fn skip3<P, A: Automaton<P> + ?Sized>(
-    aut: &A,
-    text: &[u8],
-    at: usize,
-) -> usize {
-    debug_assert!(aut.start_bytes().len() == 3);
-    let (b1, b2, b3) = (
-        aut.start_bytes()[0], aut.start_bytes()[1], aut.start_bytes()[2],
-    );
-    match memchr3(b1, b2, b3, &text[at..]) {
-        None => text.len(),
-        Some(i) => at + i,
-    }
-}
-
-impl<'a, 's, P, A: Automaton<P> + ?Sized> Iterator for Matches<'a, 's, P, A> {
-    type Item = Match;
-
-    fn next(&mut self) -> Option<Match> {
-        if self.aut.start_bytes().len() == 1 {
-            let skip = skip_to_match(
-                self.aut, self.text, self.texti, self.si, skip1);
-            if let Some((texti, si)) = skip {
-                self.texti = texti + 1;
-                self.si = ROOT_STATE;
-                return Some(self.aut.get_match(si, 0, texti));
-            }
-        } else if self.aut.start_bytes().len() == 2 {
-            let skip = skip_to_match(
-                self.aut, self.text, self.texti, self.si, skip2);
-            if let Some((texti, si)) = skip {
-                self.texti = texti + 1;
-                self.si = ROOT_STATE;
-                return Some(self.aut.get_match(si, 0, texti));
-            }
-        } else if self.aut.start_bytes().len() == 3 {
-            let skip = skip_to_match(
-                self.aut, self.text, self.texti, self.si, skip3);
-            if let Some((texti, si)) = skip {
-                self.texti = texti + 1;
-                self.si = ROOT_STATE;
-                return Some(self.aut.get_match(si, 0, texti));
-            }
-        } else {
-            let step = step_to_match(self.aut, self.text, self.texti, self.si);
-            if let Some((texti, si)) = step {
-                self.texti = texti + 1;
-                self.si = ROOT_STATE;
-                return Some(self.aut.get_match(si, 0, texti));
-            }
-        }
-        None
-    }
-}
-
-/// An iterator of non-overlapping matches for streaming text.
-///
-/// This iterator yields `io::Result<Match>` values.
-///
-/// `'a` is the lifetime of the automaton, `R` is the type of the underlying
-/// `io::Read`er, and P is the type of the Automaton's pattern.
-#[derive(Debug)]
-pub struct StreamMatches<'a, R, P, A: 'a + Automaton<P> + ?Sized> {
-    aut: &'a A,
-    buf: io::BufReader<R>,
-    texti: usize,
-    si: StateIdx,
-    _m: PhantomData<P>,
-}
-
-impl<'a, R: io::Read, P, A: Automaton<P>>
-        Iterator for StreamMatches<'a, R, P, A> {
-    type Item = io::Result<Match>;
-
-    fn next(&mut self) -> Option<io::Result<Match>> {
-        let mut m = None;
-        let mut consumed = 0;
-'LOOP:  loop {
-            self.buf.consume(consumed);
-            let bs = match self.buf.fill_buf() {
-                Err(err) => return Some(Err(err)),
-                Ok(bs) if bs.len() == 0 => break,
-                Ok(bs) => bs,
-            };
-            consumed = bs.len(); // is shortened if we find a match
-            for (i, &b) in bs.iter().enumerate() {
-                self.si = self.aut.next_state(self.si, b);
-                if self.aut.has_match(self.si, 0) {
-                    m = Some(Ok(self.aut.get_match(self.si, 0, self.texti)));
-                    consumed = i + 1;
-                    self.texti += 1;
-                    self.si = ROOT_STATE;
-                    break 'LOOP;
-                }
-                self.texti += 1;
-            }
-        }
-        self.buf.consume(consumed);
-        m
-    }
-}
-
-/// An iterator of overlapping matches for in-memory text.
-///
-/// This iterator yields `Match` values.
-///
-/// `'a` is the lifetime of the automaton, `'s` is the lifetime of the
-/// search text, and `P` is the type of the Automaton's pattern.
-#[derive(Debug)]
-pub struct MatchesOverlapping<'a, 's, P, A: 'a + Automaton<P> + ?Sized> {
-    aut: &'a A,
-    text: &'s [u8],
-    texti: usize,
-    si: StateIdx,
-    outi: usize,
-    _m: PhantomData<P>,
-}
-
-impl<'a, 's, P, A: Automaton<P> + ?Sized>
-        Iterator for MatchesOverlapping<'a, 's, P, A> {
-    type Item = Match;
-
-    fn next(&mut self) -> Option<Match> {
-        if self.aut.has_match(self.si, self.outi) {
-            let m = self.aut.get_match(self.si, self.outi, self.texti);
-            self.outi += 1;
-            if !self.aut.has_match(self.si, self.outi) {
-                self.texti += 1;
-            }
-            return Some(m);
-        }
-
-        self.outi = 0;
-        if self.aut.start_bytes().len() == 1 {
-            let skip = skip_to_match(
-                self.aut, self.text, self.texti, self.si, skip1);
-            if let Some((texti, si)) = skip {
-                self.texti = texti;
-                self.si = si;
-                return self.next();
-            }
-        } else if self.aut.start_bytes().len() == 2 {
-            let skip = skip_to_match(
-                self.aut, self.text, self.texti, self.si, skip2);
-            if let Some((texti, si)) = skip {
-                self.texti = texti;
-                self.si = si;
-                return self.next();
-            }
-        } else if self.aut.start_bytes().len() == 3 {
-            let skip = skip_to_match(
-                self.aut, self.text, self.texti, self.si, skip3);
-            if let Some((texti, si)) = skip {
-                self.texti = texti;
-                self.si = si;
-                return self.next();
-            }
-        } else {
-            let step = step_to_match(self.aut, self.text, self.texti, self.si);
-            if let Some((texti, si)) = step {
-                self.texti = texti;
-                self.si = si;
-                return self.next();
-            }
-        }
-        None
-    }
-}
-
-/// An iterator of overlapping matches for streaming text.
-///
-/// This iterator yields `io::Result<Match>` values.
-///
-/// `'a` is the lifetime of the automaton, `R` is the type of the underlying
-/// `io::Read`er, and P is the type of the Automaton's pattern.
-#[derive(Debug)]
-pub struct StreamMatchesOverlapping<'a, R, P, A: 'a + Automaton<P> + ?Sized> {
-    aut: &'a A,
-    buf: io::BufReader<R>,
-    texti: usize,
-    si: StateIdx,
-    outi: usize,
-    _m: PhantomData<P>,
-}
-
-impl<'a, R: io::Read, P, A: Automaton<P> + ?Sized>
-        Iterator for StreamMatchesOverlapping<'a, R, P, A> {
-    type Item = io::Result<Match>;
-
-    fn next(&mut self) -> Option<io::Result<Match>> {
-        if self.aut.has_match(self.si, self.outi) {
-            let m = self.aut.get_match(self.si, self.outi, self.texti);
-            self.outi += 1;
-            if !self.aut.has_match(self.si, self.outi) {
-                self.texti += 1;
-            }
-            return Some(Ok(m));
-        }
-        let mut m = None;
-        let mut consumed = 0;
-        self.outi = 0;
-'LOOP:  loop {
-            self.buf.consume(consumed);
-            let bs = match self.buf.fill_buf() {
-                Err(err) => return Some(Err(err)),
-                Ok(bs) if bs.len() == 0 => break,
-                Ok(bs) => bs,
-            };
-            consumed = bs.len(); // is shortened if we find a match
-            for (i, &b) in bs.iter().enumerate() {
-                self.si = self.aut.next_state(self.si, b);
-                if self.aut.has_match(self.si, self.outi) {
-                    m = Some(Ok(self.aut.get_match(
-                        self.si, self.outi, self.texti)));
-                    consumed = i + 1;
-                    self.outi += 1;
-                    if !self.aut.has_match(self.si, self.outi) {
-                        self.texti += 1;
-                    }
-                    break 'LOOP;
-                }
-                self.texti += 1;
-            }
-        }
-        self.buf.consume(consumed);
-        m
-    }
-}
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/src/full.rs
+++ /dev/null
@@ -1,136 +0,0 @@
-use std::fmt;
-use std::mem;
-
-use super::{
-    FAIL_STATE,
-    StateIdx, AcAutomaton, Transitions, Match,
-    usize_bytes, vec_bytes,
-};
-use super::autiter::Automaton;
-
-/// A complete Aho-Corasick automaton.
-///
-/// This uses a single transition matrix that permits each input character
-/// to move to the next state with a single lookup in the matrix.
-///
-/// This is as fast as it gets, but it is guaranteed to use a lot of memory.
-/// Namely, it will use at least `4 * 256 * #states`, where the number of
-/// states is capped at length of all patterns concatenated.
-#[derive(Clone)]
-pub struct FullAcAutomaton<P> {
-    pats: Vec<P>,
-    trans: Vec<StateIdx>,  // row-major, where states are rows
-    out: Vec<Vec<usize>>, // indexed by StateIdx
-    start_bytes: Vec<u8>,
-}
-
-impl<P: AsRef<[u8]>> FullAcAutomaton<P> {
-    /// Build a new expanded Aho-Corasick automaton from an existing
-    /// Aho-Corasick automaton.
-    pub fn new<T: Transitions>(ac: AcAutomaton<P, T>) -> FullAcAutomaton<P> {
-        let mut fac = FullAcAutomaton {
-            pats: vec![],
-            trans: vec![FAIL_STATE; 256 * ac.states.len()],
-            out: vec![vec![]; ac.states.len()],
-            start_bytes: vec![],
-        };
-        fac.build_matrix(&ac);
-        fac.pats = ac.pats;
-        fac.start_bytes = ac.start_bytes;
-        fac
-    }
-
-    #[doc(hidden)]
-    pub fn memory_usage(&self) -> usize {
-        self.pats.iter()
-            .map(|p| vec_bytes() + p.as_ref().len())
-            .fold(0, |a, b| a + b)
-        + (4 * self.trans.len())
-        + self.out.iter()
-              .map(|v| vec_bytes() + (usize_bytes() * v.len()))
-              .fold(0, |a, b| a + b)
-        + self.start_bytes.len()
-    }
-
-    #[doc(hidden)]
-    pub fn heap_bytes(&self) -> usize {
-        self.pats.iter()
-            .map(|p| mem::size_of::<P>() + p.as_ref().len())
-            .fold(0, |a, b| a + b)
-        + (4 * self.trans.len())
-        + self.out.iter()
-              .map(|v| vec_bytes() + (usize_bytes() * v.len()))
-              .fold(0, |a, b| a + b)
-        + self.start_bytes.len()
-    }
-
-    fn set(&mut self, si: StateIdx, i: u8, goto: StateIdx) {
-        let ns = self.num_states();
-        self.trans[i as usize * ns + si as usize] = goto;
-    }
-
-    #[doc(hidden)]
-    #[inline]
-    pub fn num_states(&self) -> usize {
-        self.out.len()
-    }
-}
-
-impl<P: AsRef<[u8]>> Automaton<P> for FullAcAutomaton<P> {
-    #[inline]
-    fn next_state(&self, si: StateIdx, i: u8) -> StateIdx {
-        let at = i as usize * self.num_states() + si as usize;
-        unsafe { *self.trans.get_unchecked(at) }
-    }
-
-    #[inline]
-    fn get_match(&self, si: StateIdx, outi: usize, texti: usize) -> Match {
-        let pati = self.out[si as usize][outi];
-        let patlen = self.pats[pati].as_ref().len();
-        let start = texti + 1 - patlen;
-        Match {
-            pati: pati,
-            start: start,
-            end: start + patlen,
-        }
-    }
-
-    #[inline]
-    fn has_match(&self, si: StateIdx, outi: usize) -> bool {
-        unsafe { outi < self.out.get_unchecked(si as usize).len() }
-    }
-
-    #[inline]
-    fn start_bytes(&self) -> &[u8] {
-        &self.start_bytes
-    }
-
-    #[inline]
-    fn patterns(&self) -> &[P] {
-        &self.pats
-    }
-
-    #[inline]
-    fn pattern(&self, i: usize) -> &P {
-        &self.pats[i]
-    }
-}
-
-impl<P: AsRef<[u8]>> FullAcAutomaton<P> {
-    fn build_matrix<T: Transitions>(&mut self, ac: &AcAutomaton<P, T>) {
-        for (si, s) in ac.states.iter().enumerate().skip(1) {
-            for b in (0..256).map(|b| b as u8) {
-                self.set(si as StateIdx, b, ac.next_state(si as StateIdx, b));
-            }
-            for &pati in &s.out {
-                self.out[si].push(pati);
-            }
-        }
-    }
-}
-
-impl<P: AsRef<[u8]> + fmt::Debug> fmt::Debug for FullAcAutomaton<P> {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "FullAcAutomaton({:?})", self.pats)
-    }
-}
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/src/lib.rs
+++ /dev/null
@@ -1,925 +0,0 @@
-/*!
-An implementation of the
-[Aho-Corasick string search algorithm](https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm).
-
-The Aho-Corasick algorithm is principally useful when you need to search many
-large texts for a fixed (possibly large) set of keywords. In particular, the
-Aho-Corasick algorithm preprocesses the set of keywords by constructing a
-finite state machine. The search phase is then a quick linear scan through the
-text. Each character in the search text causes a state transition in the
-automaton. Matches are reported when the automaton enters a match state.
-
-# Examples
-
-The main type exposed by this crate is `AcAutomaton`, which can be constructed
-from an iterator of pattern strings:
-
-```rust
-use aho_corasick::{Automaton, AcAutomaton};
-
-let aut = AcAutomaton::new(vec!["apple", "maple"]);
-
-// AcAutomaton also implements `FromIterator`:
-let aut: AcAutomaton<&str> = ["apple", "maple"].iter().cloned().collect();
-```
-
-Finding matches can be done with `find`:
-
-```rust
-use aho_corasick::{Automaton, AcAutomaton, Match};
-
-let aut = AcAutomaton::new(vec!["apple", "maple"]);
-let mut it = aut.find("I like maple apples.");
-assert_eq!(it.next(), Some(Match {
-    pati: 1,
-    start: 7,
-    end: 12,
-}));
-assert_eq!(it.next(), Some(Match {
-    pati: 0,
-    start: 13,
-    end: 18,
-}));
-assert_eq!(it.next(), None);
-```
-
-Use `find_overlapping` if you want to report all matches, even if they
-overlap with each other.
-
-```rust
-use aho_corasick::{Automaton, AcAutomaton, Match};
-
-let aut = AcAutomaton::new(vec!["abc", "a"]);
-let matches: Vec<_> = aut.find_overlapping("abc").collect();
-assert_eq!(matches, vec![
-    Match { pati: 1, start: 0, end: 1}, Match { pati: 0, start: 0, end: 3 },
-]);
-
-// Regular `find` will report only one match:
-let matches: Vec<_> = aut.find("abc").collect();
-assert_eq!(matches, vec![Match { pati: 1, start: 0, end: 1}]);
-```
-
-Finally, there are also methods for finding matches on *streams*. Namely, the
-search text does not have to live in memory. It's useful to run this on files
-that can't fit into memory:
-
-```no_run
-use std::fs::File;
-
-use aho_corasick::{Automaton, AcAutomaton};
-
-let aut = AcAutomaton::new(vec!["foo", "bar", "baz"]);
-let rdr = File::open("search.txt").unwrap();
-for m in aut.stream_find(rdr) {
-    let m = m.unwrap(); // could be an IO error
-    println!("Pattern '{}' matched at: ({}, {})",
-             aut.pattern(m.pati), m.start, m.end);
-}
-```
-
-There is also `stream_find_overlapping`, which is just like `find_overlapping`,
-but it operates on streams.
-
-Please see `dict-search.rs` in this crate's `examples` directory for a more
-complete example. It creates a large automaton from a dictionary and can do a
-streaming match over arbitrarily large data.
-
-# Memory usage
-
-A key aspect of an Aho-Corasick implementation is how the state transitions
-are represented. The easiest way to make the automaton fast is to store a
-sparse 256-slot map in each state. It maps an input byte to a state index.
-This makes the matching loop extremely fast, since it translates to a simple
-pointer read.
-
-The problem is that as the automaton accumulates more states, you end up paying
-a `256 * 4` (`4` is for the `u32` state index) byte penalty for every state
-regardless of how many transitions it has.
-
-To solve this, only states near the root of the automaton have this sparse
-map representation. States near the leaves of the automaton use a dense mapping
-that requires a linear scan.
-
-(The specific limit currently set is `3`, so that states with a depth less than
-or equal to `3` are less memory efficient. The result is that the memory usage
-of the automaton stops growing rapidly past ~60MB, even for automatons with
-thousands of patterns.)
-
-If you'd like to opt for the less-memory-efficient-but-faster version, then
-you can construct an `AcAutomaton` with a `Sparse` transition strategy:
-
-```rust
-use aho_corasick::{Automaton, AcAutomaton, Match, Sparse};
-
-let aut = AcAutomaton::<&str, Sparse>::with_transitions(vec!["abc", "a"]);
-let matches: Vec<_> = aut.find("abc").collect();
-assert_eq!(matches, vec![Match { pati: 1, start: 0, end: 1}]);
-```
-*/
-
-#![deny(missing_docs)]
-
-extern crate memchr;
-#[cfg(test)] extern crate quickcheck;
-#[cfg(test)] extern crate rand;
-
-use std::collections::VecDeque;
-use std::fmt;
-use std::iter::FromIterator;
-use std::mem;
-
-pub use self::autiter::{
-    Automaton, Match,
-    Matches, MatchesOverlapping, StreamMatches, StreamMatchesOverlapping,
-};
-pub use self::full::FullAcAutomaton;
-
-// We're specifying paths explicitly so that we can use
-// these modules simultaneously from `main.rs`.
-// Should probably make just make `main.rs` a separate crate.
-#[path = "autiter.rs"]
-mod autiter;
-#[path = "full.rs"]
-mod full;
-
-/// The integer type used for the state index.
-///
-/// Limiting this to 32 bit integers can have a big impact on memory usage
-/// when using the `Sparse` transition representation.
-pub type StateIdx = u32;
-
-// Constants for special state indexes.
-const FAIL_STATE: u32 = 0;
-const ROOT_STATE: u32 = 1;
-
-// Limit the depth at which we use a sparse alphabet map. Once the limit is
-// reached, a dense set is used (and lookup becomes O(n)).
-//
-// This does have a performance hit, but the (straight forward) alternative
-// is to have a `256 * 4` byte overhead for every state.
-// Given that Aho-Corasick is typically used for dictionary searching, this
-// can lead to dramatic memory bloat.
-//
-// This limit should only be increased at your peril. Namely, in the worst
-// case, `256^DENSE_DEPTH_THRESHOLD * 4` corresponds to the memory usage in
-// bytes. A value of `1` gives us a good balance. This is also a happy point
-// in the benchmarks. A value of `0` gives considerably worse times on certain
-// benchmarks (e.g., `ac_ten_one_prefix_byte_every_match`) than even a value
-// of `1`. A value of `2` is slightly better than `1` and it looks like gains
-// level off at that point with not much observable difference when set to
-// `3`.
-//
-// Why not make this user configurable? Well, it doesn't make much sense
-// because we pay for it with case analysis in the matching loop. Increasing it
-// doesn't have much impact on performance (outside of pathological cases?).
-//
-// N.B. Someone else seems to have discovered an alternative, but I haven't
-// grokked it yet: https://github.com/mischasan/aho-corasick
-const DENSE_DEPTH_THRESHOLD: u32 = 1;
-
-/// An Aho-Corasick finite automaton.
-///
-/// The type parameter `P` is the type of the pattern that was used to
-/// construct this AcAutomaton.
-#[derive(Clone)]
-pub struct AcAutomaton<P, T=Dense> {
-    pats: Vec<P>,
-    states: Vec<State<T>>,
-    start_bytes: Vec<u8>,
-}
-
-#[derive(Clone)]
-struct State<T> {
-    out: Vec<usize>,
-    fail: StateIdx,
-    goto: T,
-    depth: u32,
-}
-
-impl<P: AsRef<[u8]>> AcAutomaton<P> {
-    /// Create a new automaton from an iterator of patterns.
-    ///
-    /// The patterns must be convertible to bytes (`&[u8]`) via the `AsRef`
-    /// trait.
-    pub fn new<I>(pats: I) -> AcAutomaton<P, Dense>
-            where I: IntoIterator<Item=P> {
-        AcAutomaton::with_transitions(pats)
-    }
-}
-
-impl<P: AsRef<[u8]>, T: Transitions> AcAutomaton<P, T> {
-    /// Create a new automaton from an iterator of patterns.
-    ///
-    /// This constructor allows one to choose the transition representation.
-    ///
-    /// The patterns must be convertible to bytes (`&[u8]`) via the `AsRef`
-    /// trait.
-    pub fn with_transitions<I>(pats: I) -> AcAutomaton<P, T>
-            where I: IntoIterator<Item=P> {
-        AcAutomaton {
-            pats: vec![], // filled in later, avoid wrath of borrow checker
-            states: vec![State::new(0), State::new(0)], // empty and root
-            start_bytes: vec![], // also filled in later
-        }.build(pats.into_iter().collect())
-    }
-
-    /// Build out the entire automaton into a single matrix.
-    ///
-    /// This will make searching as fast as possible at the expense of using
-    /// at least `4 * 256 * #states` bytes of memory.
-    pub fn into_full(self) -> FullAcAutomaton<P> {
-        FullAcAutomaton::new(self)
-    }
-
-    #[doc(hidden)]
-    pub fn num_states(&self) -> usize {
-        self.states.len()
-    }
-
-    #[doc(hidden)]
-    pub fn heap_bytes(&self) -> usize {
-        self.pats.iter()
-            .map(|p| mem::size_of::<P>() + p.as_ref().len())
-            .fold(0, |a, b| a + b)
-        + self.states.iter()
-              .map(|s| mem::size_of::<State<T>>() + s.heap_bytes())
-              .fold(0, |a, b| a + b)
-        + self.start_bytes.len()
-    }
-}
-
-impl<P: AsRef<[u8]>, T: Transitions> Automaton<P> for AcAutomaton<P, T> {
-    #[inline]
-    fn next_state(&self, mut si: StateIdx, b: u8) -> StateIdx {
-        loop {
-            let maybe_si = self.states[si as usize].goto(b);
-            if maybe_si != FAIL_STATE {
-                si = maybe_si;
-                break;
-            } else {
-                si = self.states[si as usize].fail;
-            }
-        }
-        si
-    }
-
-    #[inline]
-    fn get_match(&self, si: StateIdx, outi: usize, texti: usize) -> Match {
-        let pati = self.states[si as usize].out[outi];
-        let patlen = self.pats[pati].as_ref().len();
-        let start = texti + 1 - patlen;
-        Match {
-            pati: pati,
-            start: start,
-            end: start + patlen,
-        }
-    }
-
-    #[inline]
-    fn has_match(&self, si: StateIdx, outi: usize) -> bool {
-        outi < self.states[si as usize].out.len()
-    }
-
-    #[inline]
-    fn start_bytes(&self) -> &[u8] {
-        &self.start_bytes
-    }
-
-    #[inline]
-    fn patterns(&self) -> &[P] {
-        &self.pats
-    }
-
-    #[inline]
-    fn pattern(&self, i: usize) -> &P {
-        &self.pats[i]
-    }
-}
-
-// Below contains code for *building* the automaton. It's a reasonably faithful
-// translation of the description/psuedo-code from:
-// http://www.cs.uku.fi/~kilpelai/BSA05/lectures/slides04.pdf
-
-impl<P: AsRef<[u8]>, T: Transitions> AcAutomaton<P, T> {
-    // This is the first phase and builds the initial keyword tree.
-    fn build(mut self, pats: Vec<P>) -> AcAutomaton<P, T> {
-        for (pati, pat) in pats.iter().enumerate() {
-            if pat.as_ref().is_empty() {
-                continue;
-            }
-            let mut previ = ROOT_STATE;
-            for &b in pat.as_ref() {
-                if self.states[previ as usize].goto(b) != FAIL_STATE {
-                    previ = self.states[previ as usize].goto(b);
-                } else {
-                    let depth = self.states[previ as usize].depth + 1;
-                    let nexti = self.add_state(State::new(depth));
-                    self.states[previ as usize].set_goto(b, nexti);
-                    previ = nexti;
-                }
-            }
-            self.states[previ as usize].out.push(pati);
-        }
-        for c in (0..256).into_iter().map(|c| c as u8) {
-            if self.states[ROOT_STATE as usize].goto(c) == FAIL_STATE {
-                self.states[ROOT_STATE as usize].set_goto(c, ROOT_STATE);
-            } else {
-                self.start_bytes.push(c);
-            }
-        }
-        // If any of the start bytes are non-ASCII, then remove them all,
-        // because we don't want to be calling memchr on non-ASCII bytes.
-        // (Well, we could, but it requires being more clever. Simply using
-        // the prefix byte isn't good enough.)
-        if self.start_bytes.iter().any(|&b| b > 0x7F) {
-            self.start_bytes.clear();
-        }
-        self.pats = pats;
-        self.fill()
-    }
-
-    // The second phase that fills in the back links.
-    fn fill(mut self) -> AcAutomaton<P, T> {
-        // Fill up the queue with all non-root transitions out of the root
-        // node. Then proceed by breadth first traversal.
-        let mut q = VecDeque::new();
-        for c in (0..256).into_iter().map(|c| c as u8) {
-            let si = self.states[ROOT_STATE as usize].goto(c);
-            if si != ROOT_STATE {
-                q.push_front(si);
-            }
-        }
-        while let Some(si) = q.pop_back() {
-            for c in (0..256).into_iter().map(|c| c as u8) {
-                let u = self.states[si as usize].goto(c);
-                if u != FAIL_STATE {
-                    q.push_front(u);
-                    let mut v = self.states[si as usize].fail;
-                    while self.states[v as usize].goto(c) == FAIL_STATE {
-                        v = self.states[v as usize].fail;
-                    }
-                    let ufail = self.states[v as usize].goto(c);
-                    self.states[u as usize].fail = ufail;
-                    let ufail_out = self.states[ufail as usize].out.clone();
-                    self.states[u as usize].out.extend(ufail_out);
-                }
-            }
-        }
-        self
-    }
-
-    fn add_state(&mut self, state: State<T>) -> StateIdx {
-        let i = self.states.len();
-        self.states.push(state);
-        i as StateIdx
-    }
-}
-
-impl<T: Transitions> State<T> {
-    fn new(depth: u32) -> State<T> {
-        State {
-            out: vec![],
-            fail: 1,
-            goto: Transitions::new(depth),
-            depth: depth,
-        }
-    }
-
-    fn goto(&self, b: u8) -> StateIdx {
-        self.goto.goto(b)
-    }
-
-    fn set_goto(&mut self, b: u8, si: StateIdx) {
-        self.goto.set_goto(b, si);
-    }
-
-    fn heap_bytes(&self) -> usize {
-        (self.out.len() * usize_bytes())
-        + self.goto.heap_bytes()
-    }
-}
-
-/// An abstraction over state transition strategies.
-///
-/// This is an attempt to let the caller choose the space/time trade offs
-/// used for state transitions.
-///
-/// (It's possible that this interface is merely good enough for just the two
-/// implementations in this crate.)
-pub trait Transitions {
-    /// Return a new state at the given depth.
-    fn new(depth: u32) -> Self;
-    /// Return the next state index given the next character.
-    fn goto(&self, alpha: u8) -> StateIdx;
-    /// Set the next state index for the character given.
-    fn set_goto(&mut self, alpha: u8, si: StateIdx);
-    /// The memory use in bytes (on the heap) of this set of transitions.
-    fn heap_bytes(&self) -> usize;
-}
-
-/// State transitions that can be stored either sparsely or densely.
-///
-/// This uses less space but at the expense of slower matching.
-#[derive(Clone, Debug)]
-pub struct Dense(DenseChoice);
-
-#[derive(Clone, Debug)]
-enum DenseChoice {
-    Sparse(Vec<StateIdx>), // indexed by alphabet
-    Dense(Vec<(u8, StateIdx)>),
-}
-
-impl Transitions for Dense {
-    fn new(depth: u32) -> Dense {
-        if depth <= DENSE_DEPTH_THRESHOLD {
-            Dense(DenseChoice::Sparse(vec![0; 256]))
-        } else {
-            Dense(DenseChoice::Dense(vec![]))
-        }
-    }
-
-    fn goto(&self, b1: u8) -> StateIdx {
-        match self.0 {
-            DenseChoice::Sparse(ref m) => m[b1 as usize],
-            DenseChoice::Dense(ref m) => {
-                for &(b2, si) in m {
-                    if b1 == b2 {
-                        return si;
-                    }
-                }
-                FAIL_STATE
-            }
-        }
-    }
-
-    fn set_goto(&mut self, b: u8, si: StateIdx) {
-        match self.0 {
-            DenseChoice::Sparse(ref mut m) => m[b as usize] = si,
-            DenseChoice::Dense(ref mut m) => m.push((b, si)),
-        }
-    }
-
-    fn heap_bytes(&self) -> usize {
-        match self.0 {
-            DenseChoice::Sparse(ref m) => m.len() * 4,
-            DenseChoice::Dense(ref m) => m.len() * (1 + 4),
-        }
-    }
-}
-
-/// State transitions that are always sparse.
-///
-/// This can use enormous amounts of memory when there are many patterns,
-/// but matching is very fast.
-#[derive(Clone, Debug)]
-pub struct Sparse(Vec<StateIdx>);
-
-impl Transitions for Sparse {
-    fn new(_: u32) -> Sparse {
-        Sparse(vec![0; 256])
-    }
-
-    #[inline]
-    fn goto(&self, b: u8) -> StateIdx {
-        self.0[b as usize]
-    }
-
-    fn set_goto(&mut self, b: u8, si: StateIdx) {
-        self.0[b as usize] = si;
-    }
-
-    fn heap_bytes(&self) -> usize {
-        self.0.len() * 4
-    }
-}
-
-impl<S: AsRef<[u8]>> FromIterator<S> for AcAutomaton<S> {
-    /// Create an automaton from an iterator of strings.
-    fn from_iter<T>(it: T) -> AcAutomaton<S> where T: IntoIterator<Item=S> {
-        AcAutomaton::new(it)
-    }
-}
-
-// Provide some question debug impls for viewing automatons.
-// The custom impls mostly exist for special showing of sparse maps.
-
-impl<P: AsRef<[u8]> + fmt::Debug, T: Transitions>
-        fmt::Debug for AcAutomaton<P, T> {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        use std::iter::repeat;
-
-        try!(writeln!(f, "{}", repeat('-').take(79).collect::<String>()));
-        try!(writeln!(f, "Patterns: {:?}", self.pats));
-        for (i, state) in self.states.iter().enumerate().skip(1) {
-            try!(writeln!(f, "{:3}: {}", i, state.debug(i == 1)));
-        }
-        write!(f, "{}", repeat('-').take(79).collect::<String>())
-    }
-}
-
-impl<T: Transitions> State<T> {
-    fn debug(&self, root: bool) -> String {
-        format!("State {{ depth: {:?}, out: {:?}, fail: {:?}, goto: {{{}}} }}",
-                self.depth, self.out, self.fail, self.goto_string(root))
-    }
-
-    fn goto_string(&self, root: bool) -> String {
-        use std::char::from_u32;
-
-        let mut goto = vec![];
-        for b in (0..256).map(|b| b as u8) {
-            let si = self.goto(b);
-            if (!root && si == FAIL_STATE) || (root && si == ROOT_STATE) {
-                continue;
-            }
-            goto.push(format!("{} => {}", from_u32(b as u32).unwrap(), si));
-        }
-        goto.join(", ")
-    }
-}
-
-impl<T: Transitions> fmt::Debug for State<T> {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "{}", self.debug(false))
-    }
-}
-
-impl<T: Transitions> AcAutomaton<String, T> {
-    #[doc(hidden)]
-    pub fn dot(&self) -> String {
-        use std::fmt::Write;
-        let mut out = String::new();
-        macro_rules! w {
-            ($w:expr, $($tt:tt)*) => { {write!($w, $($tt)*)}.unwrap() }
-        }
-
-        w!(out, r#"
-digraph automaton {{
-    label=<<FONT POINT-SIZE="20">{}</FONT>>;
-    labelloc="l";
-    labeljust="l";
-    rankdir="LR";
-"#, self.pats.join(", "));
-        for (i, s) in self.states.iter().enumerate().skip(1) {
-            let i = i as u32;
-            if s.out.len() == 0 {
-                w!(out, "    {};\n", i);
-            } else {
-                w!(out, "    {} [peripheries=2];\n", i);
-            }
-            w!(out, "    {} -> {} [style=dashed];\n", i, s.fail);
-            for b in (0..256).map(|b| b as u8) {
-                let si = s.goto(b);
-                if si == FAIL_STATE || (i == ROOT_STATE && si == ROOT_STATE) {
-                    continue;
-                }
-                w!(out, "    {} -> {} [label={}];\n", i, si, b as char);
-            }
-        }
-        w!(out, "}}");
-        out
-    }
-}
-
-fn vec_bytes() -> usize {
-    usize_bytes() * 3
-}
-
-fn usize_bytes() -> usize {
-    let bits = usize::max_value().count_ones() as usize;
-    bits / 8
-}
-
-#[cfg(test)]
-mod tests {
-    use std::collections::HashSet;
-    use std::io;
-
-    use quickcheck::{Arbitrary, Gen, quickcheck};
-
-    use super::{Automaton, AcAutomaton, Match};
-
-    fn aut_find<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        AcAutomaton::new(xs.to_vec()).find(&haystack).collect()
-    }
-
-    fn aut_finds<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        let cur = io::Cursor::new(haystack.as_bytes());
-        AcAutomaton::new(xs.to_vec())
-            .stream_find(cur).map(|r| r.unwrap()).collect()
-    }
-
-    fn aut_findf<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        AcAutomaton::new(xs.to_vec()).into_full().find(haystack).collect()
-    }
-
-    fn aut_findfs<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        let cur = io::Cursor::new(haystack.as_bytes());
-        AcAutomaton::new(xs.to_vec())
-            .into_full()
-            .stream_find(cur).map(|r| r.unwrap()).collect()
-    }
-
-    fn aut_findo<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        AcAutomaton::new(xs.to_vec()).find_overlapping(haystack).collect()
-    }
-
-    fn aut_findos<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        let cur = io::Cursor::new(haystack.as_bytes());
-        AcAutomaton::new(xs.to_vec())
-            .stream_find_overlapping(cur).map(|r| r.unwrap()).collect()
-    }
-
-    fn aut_findfo<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        AcAutomaton::new(xs.to_vec())
-            .into_full().find_overlapping(haystack).collect()
-    }
-
-    fn aut_findfos<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + AsRef<[u8]> {
-        let cur = io::Cursor::new(haystack.as_bytes());
-        AcAutomaton::new(xs.to_vec())
-            .into_full()
-            .stream_find_overlapping(cur).map(|r| r.unwrap()).collect()
-    }
-
-    #[test]
-    fn one_pattern_one_match() {
-        let ns = vec!["a"];
-        let hay = "za";
-        let matches = vec![
-            Match { pati: 0, start: 1, end: 2 },
-        ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn one_pattern_many_match() {
-        let ns = vec!["a"];
-        let hay = "zazazzzza";
-        let matches = vec![
-            Match { pati: 0, start: 1, end: 2 },
-            Match { pati: 0, start: 3, end: 4 },
-            Match { pati: 0, start: 8, end: 9 },
-        ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn one_longer_pattern_one_match() {
-        let ns = vec!["abc"];
-        let hay = "zazabcz";
-        let matches = vec![ Match { pati: 0, start: 3, end: 6 } ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn one_longer_pattern_many_match() {
-        let ns = vec!["abc"];
-        let hay = "zazabczzzzazzzabc";
-        let matches = vec![
-            Match { pati: 0, start: 3, end: 6 },
-            Match { pati: 0, start: 14, end: 17 },
-        ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_pattern_one_match() {
-        let ns = vec!["a", "b"];
-        let hay = "zb";
-        let matches = vec![ Match { pati: 1, start: 1, end: 2 } ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_pattern_many_match() {
-        let ns = vec!["a", "b"];
-        let hay = "zbzazzzzb";
-        let matches = vec![
-            Match { pati: 1, start: 1, end: 2 },
-            Match { pati: 0, start: 3, end: 4 },
-            Match { pati: 1, start: 8, end: 9 },
-        ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_longer_pattern_one_match() {
-        let ns = vec!["abc", "xyz"];
-        let hay = "zazxyzz";
-        let matches = vec![ Match { pati: 1, start: 3, end: 6 } ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_longer_pattern_many_match() {
-        let ns = vec!["abc", "xyz"];
-        let hay = "zazxyzzzzzazzzabcxyz";
-        let matches = vec![
-            Match { pati: 1, start: 3, end: 6 },
-            Match { pati: 0, start: 14, end: 17 },
-            Match { pati: 1, start: 17, end: 20 },
-        ];
-        assert_eq!(&aut_find(&ns, hay), &matches);
-        assert_eq!(&aut_finds(&ns, hay), &matches);
-        assert_eq!(&aut_findf(&ns, hay), &matches);
-        assert_eq!(&aut_findfs(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_longer_pattern_overlap_one_match() {
-        let ns = vec!["abc", "bc"];
-        let hay = "zazabcz";
-        let matches = vec![
-            Match { pati: 0, start: 3, end: 6 },
-            Match { pati: 1, start: 4, end: 6 },
-        ];
-        assert_eq!(&aut_findo(&ns, hay), &matches);
-        assert_eq!(&aut_findos(&ns, hay), &matches);
-        assert_eq!(&aut_findfo(&ns, hay), &matches);
-        assert_eq!(&aut_findfos(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_longer_pattern_overlap_one_match_reverse() {
-        let ns = vec!["abc", "bc"];
-        let hay = "xbc";
-        let matches = vec![ Match { pati: 1, start: 1, end: 3 } ];
-        assert_eq!(&aut_findo(&ns, hay), &matches);
-        assert_eq!(&aut_findos(&ns, hay), &matches);
-        assert_eq!(&aut_findfo(&ns, hay), &matches);
-        assert_eq!(&aut_findfos(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_longer_pattern_overlap_many_match() {
-        let ns = vec!["abc", "bc", "c"];
-        let hay = "zzzabczzzbczzzc";
-        let matches = vec![
-            Match { pati: 0, start: 3, end: 6 },
-            Match { pati: 1, start: 4, end: 6 },
-            Match { pati: 2, start: 5, end: 6 },
-            Match { pati: 1, start: 9, end: 11 },
-            Match { pati: 2, start: 10, end: 11 },
-            Match { pati: 2, start: 14, end: 15 },
-        ];
-        assert_eq!(&aut_findo(&ns, hay), &matches);
-        assert_eq!(&aut_findos(&ns, hay), &matches);
-        assert_eq!(&aut_findfo(&ns, hay), &matches);
-        assert_eq!(&aut_findfos(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn many_longer_pattern_overlap_many_match_reverse() {
-        let ns = vec!["abc", "bc", "c"];
-        let hay = "zzzczzzbczzzabc";
-        let matches = vec![
-            Match { pati: 2, start: 3, end: 4 },
-            Match { pati: 1, start: 7, end: 9 },
-            Match { pati: 2, start: 8, end: 9 },
-            Match { pati: 0, start: 12, end: 15 },
-            Match { pati: 1, start: 13, end: 15 },
-            Match { pati: 2, start: 14, end: 15 },
-        ];
-        assert_eq!(&aut_findo(&ns, hay), &matches);
-        assert_eq!(&aut_findos(&ns, hay), &matches);
-        assert_eq!(&aut_findfo(&ns, hay), &matches);
-        assert_eq!(&aut_findfos(&ns, hay), &matches);
-    }
-
-    #[test]
-    fn pattern_returns_original_type() {
-        let aut = AcAutomaton::new(vec!["apple", "maple"]);
-
-        // Explicitly given this type to assert that the thing returned
-        // from the function is our original type.
-        let pat: &str = aut.pattern(0);
-        assert_eq!(pat, "apple");
-
-        // Also check the return type of the `patterns` function.
-        let pats: &[&str] = aut.patterns();
-        assert_eq!(pats, &["apple", "maple"]);
-    }
-
-    // Quickcheck time.
-
-    // This generates very small ascii strings, which makes them more likely
-    // to interact in interesting ways with larger haystack strings.
-    #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
-    pub struct SmallAscii(String);
-
-    impl Arbitrary for SmallAscii {
-        fn arbitrary<G: Gen>(g: &mut G) -> SmallAscii {
-            use std::char::from_u32;
-            SmallAscii((0..2)
-                       .map(|_| from_u32(g.gen_range(97, 123)).unwrap())
-                       .collect())
-        }
-
-        fn shrink(&self) -> Box<Iterator<Item=SmallAscii>> {
-            Box::new(self.0.shrink().map(SmallAscii))
-        }
-    }
-
-    impl From<SmallAscii> for String {
-        fn from(s: SmallAscii) -> String { s.0 }
-    }
-
-    impl AsRef<[u8]> for SmallAscii {
-        fn as_ref(&self) -> &[u8] { self.0.as_ref() }
-    }
-
-    // This is the same arbitrary impl as `String`, except it has a bias toward
-    // ASCII characters.
-    #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
-    pub struct BiasAscii(String);
-
-    impl Arbitrary for BiasAscii {
-        fn arbitrary<G: Gen>(g: &mut G) -> BiasAscii {
-            use std::char::from_u32;
-            let size = { let s = g.size(); g.gen_range(0, s) };
-            let mut s = String::with_capacity(size);
-            for _ in 0..size {
-                if g.gen_weighted_bool(3) {
-                    s.push(char::arbitrary(g));
-                } else {
-                    for _ in 0..5 {
-                        s.push(from_u32(g.gen_range(97, 123)).unwrap());
-                    }
-                }
-            }
-            BiasAscii(s)
-        }
-
-        fn shrink(&self) -> Box<Iterator<Item=BiasAscii>> {
-            Box::new(self.0.shrink().map(BiasAscii))
-        }
-    }
-
-    fn naive_find<S>(xs: &[S], haystack: &str) -> Vec<Match>
-            where S: Clone + Into<String> {
-        let needles: Vec<String> =
-            xs.to_vec().into_iter().map(Into::into).collect();
-        let mut matches = vec![];
-        for hi in 0..haystack.len() {
-            for (pati, needle) in needles.iter().enumerate() {
-                let needle = needle.as_bytes();
-                if needle.len() == 0 || needle.len() > haystack.len() - hi {
-                    continue;
-                }
-                if needle == &haystack.as_bytes()[hi..hi+needle.len()] {
-                    matches.push(Match {
-                        pati: pati,
-                        start: hi,
-                        end: hi + needle.len(),
-                    });
-                }
-            }
-        }
-        matches
-    }
-
-    #[test]
-    fn qc_ac_equals_naive() {
-        fn prop(needles: Vec<SmallAscii>, haystack: BiasAscii) -> bool {
-            let aut_matches = aut_findo(&needles, &haystack.0);
-            let naive_matches = naive_find(&needles, &haystack.0);
-            // Ordering isn't always the same. I don't think we care, so do
-            // an unordered comparison.
-            let aset: HashSet<Match> = aut_matches.iter().cloned().collect();
-            let nset: HashSet<Match> = naive_matches.iter().cloned().collect();
-            aset == nset
-        }
-        quickcheck(prop as fn(Vec<SmallAscii>, BiasAscii) -> bool);
-    }
-}
deleted file mode 100644
--- a/third_party/rust/aho-corasick-0.6.2/src/main.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-extern crate memchr;
-
-use std::env;
-
-use lib::AcAutomaton;
-
-#[allow(dead_code)]
-mod lib;
-
-fn main() {
-    let aut = AcAutomaton::new(env::args().skip(1));
-    println!("{}", aut.dot().trim());
-}
deleted file mode 100644
--- a/third_party/rust/base64-0.5.2/.cargo-checksum.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"files":{"Cargo.toml":"79fbb792e6c1d05c44188c808ef7120c592e50291a706fe0f669b8ac9a2ad5e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0dd882e53de11566d50f8e8e2d5a651bcf3fabee4987d70f306233cf39094ba7","README.md":"b2da2fd61c4f3abf45127d183b61eb2dabc1c97cd191854987aa0328549a663f","benches/benchmarks.rs":"f0469f65f901c3e92fa506c0deb277fd136a7f968cae7cc4f030c0c15e52322f","examples/make_tables.rs":"3c80f2a8cdb204168cc1b60f8904d544b2da067b9e6a7b40ade5fb4a994b4175","src/lib.rs":"a3ac363513ae99a9b0049c19c92bc46b57ac9a0ebfd3317b7b387c5fbaa16a8a","src/tables.rs":"378743892907cde87c1a92e6afee2df36ce590311e61381b2cc0404b3e018039","tests/tests.rs":"dc2c293bae576cc596bdfb6ef783dc1d24d3bf992bf532caaebe1738cb0608cc"},"package":"30e93c03064e7590d0466209155251b90c22e37fab1daf2771582598b5827557"}
\ No newline at end of file
deleted file mode 100644
--- a/third_party/rust/base64-0.5.2/Cargo.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[package]
-name = "base64"
-version = "0.5.2"
-authors = ["Alice Maz <alice@alicemaz.com>", "Marshall Pierce <marshall@mpierce.org>"]
-description = "encodes and decodes base64 as bytes or utf8"
-repository = "https://github.com/alicemaz/rust-base64"
-documentation = "https://github.com/alicemaz/rust-base64/blob/master/README.md"
-readme = "README.md"
-keywords = ["base64", "utf8", "encode", "decode"]
-categories = ["encoding"]
-license = "MIT"
-
-[dependencies]
-byteorder = "1.0.0"
-
-[dev-dependencies]
-rand = "=0.3.15"
-
-[profile.bench]
-# Uncomment when using `perf record`
-#debug = true
deleted file mode 100644
--- a/third_party/rust/base64-0.5.2/LICENSE-MIT
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Alice Maz
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
deleted file mode 100644
--- a/third_party/rust/base64-0.5.2/README.md
+++ /dev/null
@@ -1,112 +0,0 @@
-[base64](https://crates.io/crates/base64)
-===
-
-It's base64. What more could anyone want?
-
-Example
----
-
-In Cargo.toml: `base64 = "~0.5.0"`
-
-```rust
-extern crate base64;
-
-use base64::{encode, decode};
-
-fn main() {
-    let a = b"hello world";
-    let b = "aGVsbG8gd29ybGQ=";
-
-    assert_eq!(encode(a), b);
-    assert_eq!(a, &decode(b).unwrap()[..]);
-}
-```
-
-API
----
-
-base64 exposes six functions:
-
-```rust
-fn encode<T: ?Sized + AsRef<[u8]>>(&T) -> String;
-fn decode<T: ?Sized + AsRef<[u8]>>(&T) -> Result<Vec<u8>, DecodeError>;
-fn encode_config<T: ?Sized + AsRef<[u8]>>(&T, Config) -> String;
-fn encode_config_buf<T: ?Sized + AsRef<[u8]>>(&T, Config, &mut String);
-fn decode_config<T: ?Sized + AsRef<[u8]>>(&T, Config) -> Result<Vec<u8>, DecodeError>;
-fn decode_config_buf<T: ?Sized + AsRef<[u8]>>(&T, Config, &mut Vec<u8>) -> Result<(), DecodeError>;
-```
-
-`STANDARD`, `URL_SAFE`, `URL_SAFE_NO_PAD`, and `MIME` configuation structs are provided for convenience. `encode` and `decode` are convenience wrappers for the `_config` functions called with the `STANDARD` config, and they are themselves wrappers of the `_buf` functions that allocate on the user's behalf. Encode produces valid padding absent a config that states otherwise; decode produces the same output for valid or omitted padding in all cases, but errors on invalid (superfluous) padding. Whitespace in the input to decode is an error for all modes except `MIME`, which disregards it ("whitespace" according to POSIX-locale `isspace`, meaning \n \r \f \t \v and space).
-
-`Config` exposes a constructor to allow custom combinations of character set, output padding, input whitespace permissiveness, linewrapping, and line ending character(s). The vast majority of usecases should be covered by the four provided, however.
-
-Purpose
----
-
-I have a fondness for small dependency footprints, ecosystems where you can pick and choose what functionality you need, and no more. Unix philosophy sort of thing I guess, many tiny utilities interoperating across a common interface. One time making a Twitter bot, I ran into the need to correctly pluralize arbitrary words. I found on npm a module that did nothing but pluralize words. Nothing else, just a couple of functions. I'd like for this to be that "just a couple of functions."
-
-Developing
----
-
-Benchmarks are in `benches/`. Running them requires nightly rust, but `rustup` makes it easy:
-
-```
-rustup run nightly cargo bench
-```
-
-Decoding is aided by some pre-calculated tables, which are generated by:
-
-```
-cargo run --example make_tables > src/tables.rs.tmp && mv src/tables.rs.tmp src/tables.rs
-```
-
-Profiling
----
-
-On Linux, you can use [perf](https://perf.wiki.kernel.org/index.php/Main_Page) for profiling. First, enable debug symbols in Cargo.toml. Don't commit this change, though, since it's usually not what you want (and costs some performance):
-
-```
-[profile.release]
-debug = true
-```
-
-Then compile the benchmarks. (Just re-run them and ^C once the benchmarks start running; all that's needed is to recompile them.)
-
-Run the benchmark binary with `perf` (shown here filtering to one particular benchmark, which will make the results easier to read). `perf` is only available to the root user on most systems as it fiddles with event counters in your CPU, so use `sudo`. We need to run the actual benchmark binary, hence the path into `target`. You can see the actual full path with `rustup run nightly cargo bench -v`; it will print out the commands it runs. If you use the exact path that `bench` outputs, make sure you get the one that's for the benchmarks, not the tests. You may also want to `cargo clean` so you have only one `benchmarks-` binary (they tend to accumulate).
-
-```
-sudo perf record target/release/deps/benchmarks-* --bench decode_10mib_reuse
-```
-
-Then analyze the results, again with perf:
-
-```
-sudo perf annotate -l
-```
-
-You'll see a bunch of interleaved rust source and assembly like this. The section with `lib.rs:327` is telling us that 4.02% of samples saw the `movzbl` aka bit shift as the active instruction. However, this percentage is not as exact as it seems due to a phenomenon called *skid*. Basically, a consequence of how fancy modern CPUs are is that this sort of instruction profiling is inherently inaccurate, especially in branch-heavy code.
-
-```
- lib.rs:322    0.70 :     10698:       mov    %rdi,%rax
-    2.82 :        1069b:       shr    $0x38,%rax
-         :                  if morsel == decode_tables::INVALID_VALUE {
-         :                      bad_byte_index = input_index;
-         :                      break;
-         :                  };
-         :                  accum = (morsel as u64) << 58;
- lib.rs:327    4.02 :     1069f:       movzbl (%r9,%rax,1),%r15d
-         :              // fast loop of 8 bytes at a time
-         :              while input_index < length_of_full_chunks {
-         :                  let mut accum: u64;
-         :
-         :                  let input_chunk = BigEndian::read_u64(&input_bytes[input_index..(input_index + 8)]);
-         :                  morsel = decode_table[(input_chunk >> 56) as usize];
- lib.rs:322    3.68 :     106a4:       cmp    $0xff,%r15
-         :                  if morsel == decode_tables::INVALID_VALUE {
-    0.00 :        106ab:       je     1090e <base64::decode_config_buf::hbf68a45fefa299c1+0x46e>
-```
-
-License
----
-
-This project is dual-licensed under MIT and Apache 2.0.
deleted file mode 100644
--- a/third_party/rust/base64-0.5.2/benches/benchmarks.rs
+++ /dev/null
@@ -1,230 +0,0 @@
-#![feature(test)]
-
-extern crate base64;
-extern crate test;
-extern crate rand;
-
-use base64::{decode, decode_config_buf, encode, encode_config_buf, STANDARD};
-
-use test::Bencher;
-use rand::Rng;
-
-#[bench]
-fn encode_3b(b: &mut Bencher) {
-    do_encode_bench(b, 3)
-}
-
-#[bench]
-fn encode_3b_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 3)
-}
-
-#[bench]
-fn encode_50b(b: &mut Bencher) {
-    do_encode_bench(b, 50)
-}
-
-#[bench]
-fn encode_50b_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 50)
-}
-
-#[bench]
-fn encode_100b(b: &mut Bencher) {
-    do_encode_bench(b, 100)
-}
-
-#[bench]
-fn encode_100b_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 100)
-}
-
-#[bench]
-fn encode_500b(b: &mut Bencher) {
-    do_encode_bench(b, 500)
-}
-
-#[bench]
-fn encode_500b_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 500)
-}
-
-#[bench]
-fn encode_3kib(b: &mut Bencher) {
-    do_encode_bench(b, 3 * 1024)
-}
-
-#[bench]
-fn encode_3kib_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 3 * 1024)
-}
-
-#[bench]
-fn encode_3mib(b: &mut Bencher) {
-    do_encode_bench(b, 3 * 1024 * 1024)
-}
-
-#[bench]
-fn encode_3mib_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 3 * 1024 * 1024)
-}
-
-#[bench]
-fn encode_10mib(b: &mut Bencher) {
-    do_encode_bench(b, 10 * 1024 * 1024)
-}
-
-#[bench]
-fn encode_10mib_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 10 * 1024 * 1024)
-}
-
-#[bench]
-fn encode_30mib(b: &mut Bencher) {
-    do_encode_bench(b, 30 * 1024 * 1024)
-}
-
-#[bench]
-fn encode_30mib_reuse_buf(b: &mut Bencher) {
-    do_encode_bench_reuse_buf(b, 30 * 1024 * 1024)
-}
-
-#[bench]
-fn decode_3b(b: &mut Bencher) {
-    do_decode_bench(b, 3)
-}
-
-#[bench]
-fn decode_3b_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 3)
-}
-
-#[bench]
-fn decode_50b(b: &mut Bencher) {
-    do_decode_bench(b, 50)
-}
-
-#[bench]
-fn decode_50b_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 50)
-}
-
-#[bench]
-fn decode_100b(b: &mut Bencher) {
-    do_decode_bench(b, 100)
-}
-
-#[bench]
-fn decode_100b_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 100)
-}
-
-#[bench]
-fn decode_500b(b: &mut Bencher) {
-    do_decode_bench(b, 500)
-}
-
-#[bench]
-fn decode_500b_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 500)
-}
-
-#[bench]
-fn decode_3kib(b: &mut Bencher) {
-    do_decode_bench(b, 3 * 1024)
-}
-
-#[bench]
-fn decode_3kib_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 3 * 1024)
-}
-
-#[bench]
-fn decode_3mib(b: &mut Bencher) {
-    do_decode_bench(b, 3 * 1024 * 1024)
-}
-
-#[bench]
-fn decode_3mib_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 3 * 1024 * 1024)
-}
-
-#[bench]
-fn decode_10mib(b: &mut Bencher) {
-    do_decode_bench(b, 10 * 1024 * 1024)
-}
-
-#[bench]
-fn decode_10mib_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 10 * 1024 * 1024)
-}
-
-#[bench]
-fn decode_30mib(b: &mut Bencher) {
-    do_decode_bench(b, 30 * 1024 * 1024)
-}
-
-#[bench]
-fn decode_30mib_reuse_buf(b: &mut Bencher) {
-    do_decode_bench_reuse_buf(b, 30 * 1024 * 1024)
-}
-
-fn do_decode_bench(b: &mut Bencher, size: usize) {
-    let mut v: Vec<u8> = Vec::with_capacity(size * 3 / 4);
-    fill(&mut v);
-    let encoded = encode(&v);
-
-    b.bytes = encoded.len() as u64;
-    b.iter(|| {
-        let orig = decode(&encoded);
-        test::black_box(&orig);
-    });
-}
-
-fn do_decode_bench_reuse_buf(b: &mut Bencher, size: usize) {
-    let mut v: Vec<u8> = Vec::with_capacity(size * 3 / 4);
-    fill(&mut v);
-    let encoded = encode(&v);
-
-    let mut buf = Vec::new();
-    b.bytes = encoded.len() as u64;
-    b.iter(|| {
-        decode_config_buf(&encoded, STANDARD, &mut buf).unwrap();
-        test::black_box(&buf);
-        buf.clear();
-    });
-}
-
-fn do_encode_bench(b: &mut Bencher, size: usize) {
-    let mut v: Vec<u8> = Vec::with_capacity(size);
-    fill(&mut v);
-
-    b.bytes = v.len() as u64;
-    b.iter(|| {
-        let e = encode(&v);
-        test::black_box(&e);
-    });
-}
-
-fn do_encode_bench_reuse_buf(b: &mut Bencher, size: usize) {
-    let mut v: Vec<u8> = Vec::with_capacity(size);
-    fill(&mut v);
-
-    let mut buf = String::new();
-
-    b.bytes = v.len() as u64;
-    b.iter(|| {
-        let e = encode_config_buf(&v, STANDARD, &mut buf);
-        test::black_box(&e);
-        buf.clear();
-    });
-}
-
-fn fill(v: &mut Vec<u8>) {
-    let cap = v.capacity();
-    // weak randomness is plenty; we just want to not be completely friendly to the branch predictor
-    let mut r = rand::weak_rng();
-    while v.len() < cap {
-        v.push(r.gen::<u8>());
-    }
-}
deleted file mode 100644
--- a/third_party/rust/base64-0.5.2/examples/make_tables.rs
+++ /dev/null
@@ -1,73 +0,0 @@
-use std::collections::HashMap;
-use std::iter::Iterator;
-
-fn main() {
-    println!("pub const INVALID_VALUE: u8 = 255;");
-
-    // A-Z
-    let standard_alphabet: Vec<u8> = (0x41..0x5B)
-        // a-z
-        .chain(0x61..0x7B)
-        // 0-9
-        .chain(0x30..0x3A)
-        // +
-        .chain(0x2B..0x2C)
-        // /
-        .chain(0x2F..0x30)
-        .collect();
-    print_encode_table(&standard_alphabet, "STANDARD_ENCODE", 0);
-    print_decode_table(&standard_alphabet, "STANDARD_DECODE", 0);
-
-    // A-Z
-    let url_alphabet: Vec<u8> = (0x41..0x5B)
-        // a-z
-        .chain(0x61..0x7B)
-        // 0-9
-        .chain(0x30..0x3A)
-        // -
-        .chain(0x2D..0x2E)
-        // _s
-        .chain(0x5F..0x60)
-        .collect();
-    print_encode_table(&url_alphabet, "URL_SAFE_ENCODE", 0);
-    print_decode_table(&url_alphabet, "URL_SAFE_DECODE", 0);
-
-}
-
-fn print_encode_table(alphabet: &[u8], const_name: &str, indent_depth: usize) {
-    println!("{:width$}pub const {}: &'static [u8; 64] = &[", "", const_name, width=indent_depth);
-
-    for (i, b) in alphabet.iter().enumerate() {
-        println!("{:width$}{}, // input {} (0x{:X}) => '{}' (0x{:X})", "",
-                 b, i, i, String::from_utf8(vec!(*b as u8)).unwrap(), b, width=indent_depth + 4);
-    }
-
-    println!("{:width$}];", "", width=indent_depth);
-}
-
-fn print_decode_table(alphabet: &[u8], const_name: &str, indent_depth: usize) {
-    // map of alphabet bytes to 6-bit morsels
-    let mut input_to_morsel = HashMap::<u8, u8>::new();
-
-    // standard base64 alphabet bytes, in order
-    for (morsel, ascii_byte) in alphabet.iter().enumerate() {
-        // truncation cast is fine here
-        let _ = input_to_morsel.insert(*ascii_byte, morsel as u8);
-    }
-
-    println!("{:width$}pub const {}: &'static [u8; 256] = &[", "", const_name, width=indent_depth);
-    for ascii_byte in 0..256 {
-        let (value, comment) = match input_to_morsel.get(&(ascii_byte as u8)) {
-            None => ("INVALID_VALUE".to_string(),
-                    format!("input {} (0x{:X})", ascii_byte, ascii_byte)),
-            Some(v) => (format!("{}", *v),
-                        format!("input {} (0x{:X} char '{}') => {} (0x{:X})",
-                                ascii_byte,
-                                ascii_byte,
-                                String::from_utf8(vec!(ascii_byte as u8)).unwrap(), *v, *v))
-        };
-
-        println!("{:width$}{}, // {}", "", value, comment, width=indent_depth + 4);
-    }
-    println!("{:width$}];", "", width=indent_depth);
-}
deleted file mode 100644
--- a/third_party/rust/base64-0.5.2/src/lib.rs
+++ /dev/null
@@ -1,675 +0,0 @@
-extern crate byteorder;
-
-use std::{fmt, error, str};
-
-use byteorder::{BigEndian, ByteOrder};
-
-mod tables;
-
-/// Available encoding character sets
-#[derive(Clone, Copy, Debug)]
-pub enum CharacterSet {
-    /// The standard character set (uses `+` and `/`)
-    Standard,
-    /// The URL safe character set (uses `-` and `_`)
-    UrlSafe
-}
-
-#[derive(Clone, Copy, Debug)]
-pub enum LineEnding {
-    LF,
-    CRLF,
-}
-
-#[derive(Clone, Copy, Debug)]
-pub enum LineWrap {
-    NoWrap,
-    Wrap(usize, LineEnding)
-}
-
-/// Contains configuration parameters for base64 encoding
-#[derive(Clone, Copy, Debug)]
-pub struct Config {
-    /// Character set to use
-    char_set: CharacterSet,
-    /// True to pad output with `=` characters
-    pad: bool,
-    /// Remove whitespace before decoding, at the cost of an allocation
-    strip_whitespace: bool,
-    /// ADT signifying whether to linewrap output, and if so by how many characters and with what ending
-    line_wrap: LineWrap,
-}
-
-impl Config {
-    pub fn new(char_set: CharacterSet,
-               pad: bool,
-               strip_whitespace: bool,
-               input_line_wrap: LineWrap) -> Config {
-        let line_wrap = match input_line_wrap  {
-            LineWrap::Wrap(0, _) => LineWrap::NoWrap,
-            _ => input_line_wrap,
-        };
-
-        Config {
-            char_set: char_set,
-            pad: pad,
-            strip_whitespace: strip_whitespace,
-            line_wrap: line_wrap,
-        }
-    }
-}
-
-pub static STANDARD: Config = Config {
-    char_set: CharacterSet::Standard,
-    pad: true,
-    strip_whitespace: false,
-    line_wrap: LineWrap::NoWrap,
-};
-
-pub static MIME: Config = Config {
-    char_set: CharacterSet::Standard,
-    pad: true,
-    strip_whitespace: true,
-    line_wrap: LineWrap::Wrap(76, LineEnding::CRLF),
-};
-
-pub static URL_SAFE: Config = Config {
-    char_set: CharacterSet::UrlSafe,
-    pad: true,
-    strip_whitespace: false,
-    line_wrap: LineWrap::NoWrap,
-};
-
-pub static URL_SAFE_NO_PAD: Config = Config {
-    char_set: CharacterSet::UrlSafe,
-    pad: false,
-    strip_whitespace: false,
-    line_wrap: LineWrap::NoWrap,
-};
-
-
-#[derive(Debug, PartialEq, Eq)]
-pub enum DecodeError {
-    InvalidByte(usize, u8),
-    InvalidLength,
-}
-
-impl fmt::Display for DecodeError {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        match *self {
-            DecodeError::InvalidByte(index, byte) =>
-                write!(f, "Invalid byte {}, offset {}.", byte, index),
-            DecodeError::InvalidLength =>
-                write!(f, "Encoded text cannot have a 6-bit remainder.")
-        }
-    }
-}
-
-impl error::Error for DecodeError {
-    fn description(&self) -> &str {
-        match *self {
-            DecodeError::InvalidByte(_, _) => "invalid byte",
-            DecodeError::InvalidLength => "invalid length"
-        }
-    }
-
-    fn cause(&self) -> Option<&error::Error> {
-        None
-    }
-}
-
-///Encode arbitrary octets as base64.
-///Returns a String.
-///Convenience for `encode_config(input, base64::STANDARD);`.
-///
-///# Example
-///
-///```rust
-///extern crate base64;
-///
-///fn main() {
-///    let b64 = base64::encode(b"hello world");
-///    println!("{}", b64);
-///}
-///```
-pub fn encode<T: ?Sized + AsRef<[u8]>>(input: &T) -> String {
-    encode_config(input, STANDARD)
-}
-
-///Decode from string reference as octets.
-///Returns a Result containing a Vec<u8>.
-///Convenience `decode_config(input, base64::STANDARD);`.
-///
-///# Example
-///
-///```rust
-///extern crate base64;
-///
-///fn main() {
-///    let bytes = base64::decode("aGVsbG8gd29ybGQ=").unwrap();
-///    println!("{:?}", bytes);
-///}
-///```
-pub fn decode<T: ?Sized + AsRef<[u8]>>(input: &T) -> Result<Vec<u8>, DecodeError> {
-    decode_config(input, STANDARD)
-}
-
-///Encode arbitrary octets as base64.
-///Returns a String.
-///
-///# Example
-///
-///```rust
-///extern crate base64;
-///
-///fn main() {
-///    let b64 = base64::encode_config(b"hello world~", base64::STANDARD);
-///    println!("{}", b64);
-///
-///    let b64_url = base64::encode_config(b"hello internet~", base64::URL_SAFE);
-///    println!("{}", b64_url);
-///}
-///```
-pub fn encode_config<T: ?Sized + AsRef<[u8]>>(input: &T, config: Config) -> String {
-    let mut buf = match encoded_size(input.as_ref().len(), config) {
-        Some(n) => String::with_capacity(n),
-        None => panic!("integer overflow when calculating buffer size")
-    };
-
-    encode_config_buf(input, config, &mut buf);
-
-    buf
-}
-
-/// calculate the base64 encoded string size, including padding
-fn encoded_size(bytes_len: usize, config: Config) -> Option<usize> {
-    let printing_output_chars = bytes_len
-        .checked_add(2)
-        .map(|x| x / 3)
-        .and_then(|x| x.checked_mul(4));
-
-    //TODO this is subtly wrong but in a not dangerous way
-    //pushing patch with identical to previous behavior, then fixing
-    let line_ending_output_chars = match config.line_wrap {
-        LineWrap::NoWrap => Some(0),
-        LineWrap::Wrap(n, LineEnding::CRLF) =>
-            printing_output_chars.map(|y| y / n).and_then(|y| y.checked_mul(2)),
-        LineWrap::Wrap(n, LineEnding::LF) =>
-            printing_output_chars.map(|y| y / n),
-    };
-
-    printing_output_chars.and_then(|x|
-        line_ending_output_chars.and_then(|y| x.checked_add(y))
-    )
-}
-
-///Encode arbitrary octets as base64.
-///Writes into the supplied buffer to avoid allocations.
-///
-///# Example
-///
-///```rust
-///extern crate base64;
-///
-///fn main() {
-///    let mut buf = String::new();
-///    base64::encode_config_buf(b"hello world~", base64::STANDARD, &mut buf);
-///    println!("{}", buf);
-///
-///    buf.clear();
-///    base64::encode_config_buf(b"hello internet~", base64::URL_SAFE, &mut buf);
-///    println!("{}", buf);
-///}
-///```
-pub fn encode_config_buf<T: ?Sized + AsRef<[u8]>>(input: &T, config: Config, buf: &mut String) {
-    let input_bytes = input.as_ref();
-    let ref charset = match config.char_set {
-        CharacterSet::Standard => tables::STANDARD_ENCODE,
-        CharacterSet::UrlSafe => tables::URL_SAFE_ENCODE,
-    };
-
-    // reserve to make sure the memory we'll be writing to with unsafe is allocated
-    let resv_size = match encoded_size(input_bytes.len(), config) {
-        Some(n) => n,
-        None => panic!("integer overflow when calculating buffer size"),
-    };
-    buf.reserve(resv_size);
-
-    let orig_buf_len = buf.len();
-    let mut fast_loop_output_buf_len = orig_buf_len;
-
-    let input_chunk_len = 6;
-
-    let last_fast_index = input_bytes.len().saturating_sub(8);
-
-    // we're only going to insert valid utf8
-    let mut raw = unsafe { buf.as_mut_vec() };
-    // start at the first free part of the output buf
-    let mut output_ptr = unsafe { raw.as_mut_ptr().offset(orig_buf_len as isize) };
-    let mut input_index: usize = 0;
-    if input_bytes.len() >= 8 {
-        while input_index <= last_fast_index {
-            let input_chunk = BigEndian::read_u64(&input_bytes[input_index..(input_index + 8)]);
-
-            // strip off 6 bits at a time for the first 6 bytes
-            unsafe {
-                std::ptr::write(output_ptr, charset[((input_chunk >> 58) & 0x3F) as usize]);
-                std::ptr::write(output_ptr.offset(1), charset[((input_chunk >> 52) & 0x3F) as usize]);
-                std::ptr::write(output_ptr.offset(2), charset[((input_chunk >> 46) & 0x3F) as usize]);
-                std::ptr::write(output_ptr.offset(3), charset[((input_chunk >> 40) & 0x3F) as usize]);
-                std::ptr::write(output_ptr.offset(4), charset[((input_chunk >> 34) & 0x3F) as usize]);
-                std::ptr::write(output_ptr.offset(5), charset[((input_chunk >> 28) & 0x3F) as usize]);
-                std::ptr::write(output_ptr.offset(6), charset[((input_chunk >> 22) & 0x3F) as usize]);
-                std::ptr::write(output_ptr.offset(7), charset[((input_chunk >> 16) & 0x3F) as usize]);
-                output_ptr = output_ptr.offset(8);
-            }
-
-            input_index += input_chunk_len;
-            fast_loop_output_buf_len += 8;
-        }
-    }
-
-    unsafe {
-        // expand len to include the bytes we just wrote
-        raw.set_len(fast_loop_output_buf_len);
-    }
-
-    // encode the 0 to 7 bytes left after the fast loop
-
-    let rem = input_bytes.len() % 3;
-    let start_of_rem = input_bytes.len() - rem;
-
-    // start at the first index not handled by fast loop, which may be 0.
-    let mut leftover_index = input_index;
-
-    while leftover_index < start_of_rem {
-        raw.push(charset[(input_bytes[leftover_index] >> 2) as usize]);
-        raw.push(charset[((input_bytes[leftover_index] << 4 | input_bytes[leftover_index + 1] >> 4) & 0x3f) as usize]);
-        raw.push(charset[((input_bytes[leftover_index + 1] << 2 | input_bytes[leftover_index + 2] >> 6) & 0x3f) as usize]);
-        raw.push(charset[(input_bytes[leftover_index + 2] & 0x3f) as usize]);
-
-        leftover_index += 3;
-    }
-
-    if rem == 2 {
-        raw.push(charset[(input_bytes[start_of_rem] >> 2) as usize]);
-        raw.push(charset[((input_bytes[start_of_rem] << 4 | input_bytes[start_of_rem + 1] >> 4) & 0x3f) as usize]);
-        raw.push(charset[(input_bytes[start_of_rem + 1] << 2 & 0x3f) as usize]);
-    } else if rem == 1 {
-        raw.push(charset[(input_bytes[start_of_rem] >> 2) as usize]);
-        raw.push(charset[(input_bytes[start_of_rem] << 4 & 0x3f) as usize]);
-    }
-
-    if config.pad {
-        for _ in 0..((3 - rem) % 3) {
-            raw.push(0x3d);
-        }
-    }
-
-    //TODO FIXME this does the wrong thing for nonempty buffers
-    if orig_buf_len == 0 {
-        if let LineWrap::Wrap(line_size, line_end) = config.line_wrap {
-            let len = raw.len();
-            let mut i = 0;
-            let mut j = 0;
-
-            while i < len {
-                if i > 0 && i % line_size == 0 {
-                    match line_end {
-                        LineEnding::LF => { raw.insert(j, b'\n'); j += 1; }
-                        LineEnding::CRLF => { raw.insert(j, b'\r'); raw.insert(j + 1, b'\n'); j += 2; }
-                    }
-                }
-
-                i += 1;
-                j += 1;
-            }
-        }
-    }
-}
-
-///Decode from string reference as octets.
-///Returns a Result containing a Vec<u8>.
-///
-///# Example
-///
-///```rust
-///extern crate base64;
-///
-///fn main() {
-///    let bytes = base64::decode_config("aGVsbG8gd29ybGR+Cg==", base64::STANDARD).unwrap();
-///    println!("{:?}", bytes);
-///
-///    let bytes_url = base64::decode_config("aGVsbG8gaW50ZXJuZXR-Cg==", base64::URL_SAFE).unwrap();
-///    println!("{:?}", bytes_url);
-///}
-///```
-pub fn decode_config<T: ?Sized + AsRef<[u8]>>(input: &T, config: Config) -> Result<Vec<u8>, DecodeError> {
-    let mut buffer = Vec::<u8>::with_capacity(input.as_ref().len() * 4 / 3);
-
-    decode_config_buf(input, config, &mut buffer).map(|_| buffer)
-}
-
-///Decode from string reference as octets.
-///Writes into the supplied buffer to avoid allocation.
-///Returns a Result containing an empty tuple, aka ().
-///
-///# Example
-///
-///```rust
-///extern crate base64;
-///
-///fn main() {
-///    let mut buffer = Vec::<u8>::new();
-///    base64::decode_config_buf("aGVsbG8gd29ybGR+Cg==", base64::STANDARD, &mut buffer).unwrap();
-///    println!("{:?}", buffer);
-///
-///    buffer.clear();
-///
-///    base64::decode_config_buf("aGVsbG8gaW50ZXJuZXR-Cg==", base64::URL_SAFE, &mut buffer).unwrap();
-///    println!("{:?}", buffer);
-///}
-///```
-pub fn decode_config_buf<T: ?Sized + AsRef<[u8]>>(input: &T,
-                                                  config: Config,
-                                                  buffer: &mut Vec<u8>)
-                                                  -> Result<(), DecodeError> {
-    let mut input_copy;
-    let input_bytes = if config.strip_whitespace {
-        input_copy = Vec::<u8>::with_capacity(input.as_ref().len());
-        input_copy.extend(input.as_ref().iter().filter(|b| !b" \n\t\r\x0b\x0c".contains(b)));
-
-        input_copy.as_ref()
-    } else {
-        input.as_ref()
-    };
-
-    let ref decode_table = match config.char_set {
-        CharacterSet::Standard => tables::STANDARD_DECODE,
-        CharacterSet::UrlSafe => tables::URL_SAFE_DECODE,
-    };
-
-    buffer.reserve(input_bytes.len() * 3 / 4);
-
-    // the fast loop only handles complete chunks of 8 input bytes without padding
-    let chunk_len = 8;
-    let decoded_chunk_len = 6;
-    let remainder_len = input_bytes.len() % chunk_len;
-    let trailing_bytes_to_skip = if remainder_len == 0 {
-        // if input is a multiple of the chunk size, ignore the last chunk as it may have padding
-        chunk_len
-    } else {
-        remainder_len
-    };
-
-    let length_of_full_chunks = input_bytes.len().saturating_sub(trailing_bytes_to_skip);
-
-    let starting_output_index = buffer.len();
-    // Resize to hold decoded output from fast loop. Need the extra two bytes because
-    // we write a full 8 bytes for the last 6-byte decoded chunk and then truncate off two
-    let new_size = starting_output_index
-        + length_of_full_chunks / chunk_len * decoded_chunk_len
-        + (chunk_len - decoded_chunk_len);
-    buffer.resize(new_size, 0);
-
-    let mut output_index = starting_output_index;
-
-    {
-        let buffer_slice = buffer.as_mut_slice();
-
-        let mut input_index = 0;
-        // initial value is never used; always set if fast loop breaks
-        let mut bad_byte_index: usize = 0;
-        // a non-invalid value means it's not an error if fast loop never runs
-        let mut morsel: u8 = 0;
-
-        // fast loop of 8 bytes at a time
-        while input_index < length_of_full_chunks {
-            let mut accum: u64;
-
-            let input_chunk = BigEndian::read_u64(&input_bytes[input_index..(input_index + 8)]);
-            morsel = decode_table[(input_chunk >> 56) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index;
-                break;
-            };
-            accum = (morsel as u64) << 58;
-
-            morsel = decode_table[(input_chunk >> 48 & 0xFF) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index + 1;
-                break;
-            };
-            accum |= (morsel as u64) << 52;
-
-            morsel = decode_table[(input_chunk >> 40 & 0xFF) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index + 2;
-                break;
-            };
-            accum |= (morsel as u64) << 46;
-
-            morsel = decode_table[(input_chunk >> 32 & 0xFF) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index + 3;
-                break;
-            };
-            accum |= (morsel as u64) << 40;
-
-            morsel = decode_table[(input_chunk >> 24 & 0xFF) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index + 4;
-                break;
-            };
-            accum |= (morsel as u64) << 34;
-
-            morsel = decode_table[(input_chunk >> 16 & 0xFF) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index + 5;
-                break;
-            };
-            accum |= (morsel as u64) << 28;
-
-            morsel = decode_table[(input_chunk >> 8 & 0xFF) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index + 6;
-                break;
-            };
-            accum |= (morsel as u64) << 22;
-
-            morsel = decode_table[(input_chunk & 0xFF) as usize];
-            if morsel == tables::INVALID_VALUE {
-                bad_byte_index = input_index + 7;
-                break;
-            };
-            accum |= (morsel as u64) << 16;
-
-            BigEndian::write_u64(&mut buffer_slice[(output_index)..(output_index + 8)],
-                                 accum);
-
-            output_index += 6;
-            input_index += chunk_len;
-        };
-
-        if morsel == tables::INVALID_VALUE {
-            // we got here from a break
-            return Err(DecodeError::InvalidByte(bad_byte_index, input_bytes[bad_byte_index]));