diff --git a/.bundler-version b/.bundler-version new file mode 100644 index 0000000..38f77a6 --- /dev/null +++ b/.bundler-version @@ -0,0 +1 @@ +2.0.1 diff --git a/.cfignore b/.cfignore new file mode 100644 index 0000000..d46fdcb --- /dev/null +++ b/.cfignore @@ -0,0 +1,11 @@ +/compliance +/resources +".ruby-version" +".jekyll-metadata" +".gitignore" +node_modules +todo.txt +README.md +CONTRIBUTING.md +LICENSE.md +.nvmrc diff --git a/.gitignore b/.gitignore index 91c8f3a..d8c5a50 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,17 @@ +.~lock* .sass-cache _site .DS_Store todo.txt .jekyll-metadata -/vendor .ruby-version *.pyc creds.txt +node_modules +/assets/vendor +/assets/css +/vendor +/compliance/*/cache +/compliance/*/data +/compliance/*/*.gz +.bundle diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..48082f7 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +12 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index c446934..0000000 --- a/.travis.yml +++ /dev/null @@ -1,26 +0,0 @@ -language: ruby -rvm: -- 2.2.0 -sudo: false -cache: bundler -git: - submodules: false -script: bundle exec jekyll b --trace -notifications: - email: - recipients: - - eric.mill@gsa.gov - on_success: change - on_failure: change -branches: - only: - - master -deploy: - edge: true - provider: cloudfoundry - username: e1cf88e3-77f0-45d5-aa66-7df30dcafdaa - password: - secure: g33mxQmQ6Ar07jQBNl7HaPE7dPcGxwbpYoeWTs+Qs4yYQkFAT1f2H7vKzROL59mwYrgmYPFDXKX2g+43qGLRVzDwa2oU2bM3Rqy9pImnkeNl3+AzWhNqpsx1zqMZCgKsu31URcOPGMpvIBIS7OGmREdZcouftP9RJb7Ybflo8cY= - api: https://api.fr.cloud.gov - organization: gsa-ogp-pulse - space: https diff --git a/Gemfile b/Gemfile index e152a33..b2e9334 100644 --- a/Gemfile +++ b/Gemfile @@ -1,11 +1,7 @@ source "https://rubygems.org" gem 'jekyll' + +# TODO: remove gem 'redcarpet' gem 'rouge' - -gem 'bourbon' -gem 'sass' -gem 'neat' - -gem 'travis' diff --git a/Gemfile.lock b/Gemfile.lock index f4f9dd7..a27e068 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,126 +1,66 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.4.0) - backports (3.6.8) - blankslate (2.1.2.4) - bourbon (4.2.1) - sass (~> 3.4) - thor - celluloid (0.16.0) - timers (~> 4.0.0) - classifier-reborn (2.0.3) - fast-stemmer (~> 1.0) - coffee-script (2.3.0) - coffee-script-source - execjs - coffee-script-source (1.9.1) - colorator (0.1) - ethon (0.9.1) - ffi (>= 1.3.0) - execjs (2.4.0) - faraday (0.10.0) - multipart-post (>= 1.2, < 3) - faraday_middleware (0.10.1) - faraday (>= 0.7.4, < 1.0) - fast-stemmer (1.0.2) - ffi (1.9.8) - gh (0.15.0) - addressable (~> 2.4.0) - backports - faraday (~> 0.8) - multi_json (~> 1.0) - net-http-persistent (~> 2.9) - net-http-pipeline - highline (1.7.8) - hitimes (1.2.2) - jekyll (2.5.3) - classifier-reborn (~> 2.0) - colorator (~> 0.1) - jekyll-coffeescript (~> 1.0) - jekyll-gist (~> 1.0) - jekyll-paginate (~> 1.0) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + colorator (1.1.0) + concurrent-ruby (1.1.4) + em-websocket (0.5.1) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + eventmachine (1.2.7) + ffi (1.9.25) + forwardable-extended (2.6.0) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.8.5) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 2.6.1) + jekyll-watch (~> 2.0) + kramdown (~> 1.14) + liquid (~> 4.0) mercenary (~> 0.3.3) - pygments.rb (~> 0.6.0) - redcarpet (~> 3.1) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - toml (~> 0.1.0) - jekyll-coffeescript (1.0.1) - coffee-script (~> 2.2) - jekyll-gist (1.1.0) - jekyll-paginate (1.1.0) - jekyll-sass-converter (1.3.0) - sass (~> 3.2) - jekyll-watch (1.2.1) - listen (~> 2.7) - json (1.8.3) - kramdown (1.6.0) - launchy (2.4.3) - addressable (~> 2.3) - liquid (2.6.2) - listen (2.9.0) - celluloid (>= 0.15.2) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - mercenary (0.3.5) - multi_json (1.12.1) - multipart-post (2.0.0) - neat (1.7.2) - bourbon (>= 4.0) - sass (>= 3.3) - net-http-persistent (2.9.4) - net-http-pipeline (1.0.1) - parslet (1.5.0) - blankslate (~> 2.0) - posix-spawn (0.3.10) - pusher-client (0.6.2) - json - websocket (~> 1.0) - pygments.rb (0.6.2) - posix-spawn (~> 0.3.6) - yajl-ruby (~> 1.2.0) - rb-fsevent (0.9.4) - rb-inotify (0.9.5) - ffi (>= 0.5.0) - redcarpet (3.1.2) - rouge (1.8.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-watch (2.1.2) + listen (~> 3.0) + kramdown (1.17.0) + liquid (4.0.1) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + mercenary (0.3.6) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (3.0.3) + rb-fsevent (0.10.3) + rb-inotify (0.10.0) + ffi (~> 1.0) + redcarpet (3.4.0) + rouge (3.3.0) + ruby_dep (1.5.0) safe_yaml (1.0.4) - sass (3.4.13) - thor (0.19.1) - timers (4.0.1) - hitimes - toml (0.1.2) - parslet (~> 1.5.0) - travis (1.8.4) - backports - faraday (~> 0.9) - faraday_middleware (~> 0.9, >= 0.9.1) - gh (~> 0.13) - highline (~> 1.6) - launchy (~> 2.1) - net-http-persistent (~> 2.9) - pusher-client (~> 0.4) - typhoeus (~> 0.6, >= 0.6.8) - typhoeus (0.8.0) - ethon (>= 0.8.0) - websocket (1.2.3) - yajl-ruby (1.2.1) + sass (3.7.2) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) PLATFORMS ruby DEPENDENCIES - bourbon jekyll - neat redcarpet rouge - sass - travis BUNDLED WITH - 1.13.6 + 2.0.1 diff --git a/Makefile b/Makefile deleted file mode 100644 index 63f18d3..0000000 --- a/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -scss ?= assets/_sass/styles.scss -css ?= assets/css/styles.css - -all: styles - -styles: - sass $(scss):$(css) - -watch: - sass --watch $(scss):$(css) - -clean: - rm -f $(css) diff --git a/README.md b/README.md index 26a830d..367a330 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ The American people expect government websites to be secure and their interactions with those websites to be private. -This site contains a web-friendly version of the White House Office of Management and Budget memorandum [M-15-13](https://www.whitehouse.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf), **"A Policy to Require Secure Connections across Federal Websites and Web Services"**, and provides technical guidance and best practices to assist in its implementation. +This site contains a web-friendly version of the White House Office of Management and Budget memorandum [M-15-13](https://obamawhitehouse.archives.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf), **"A Policy to Require Secure Connections across Federal Websites and Web Services"**, and provides technical guidance and best practices to assist in its implementation. **[Read the policy.](https://https.cio.gov)** @@ -10,7 +10,7 @@ Please [open an issue](https://github.com/gsa/https/issues/new) to leave feedbac ### Thank You For Your Feedback -This policy was open for public comment before its finalization. It received [numerous comments](https://github.com/GSA/https/issues?utf8=%E2%9C%93&q=label%3A%22Public+Comment%22+) whose thoughtfulness and feedback improved the **[final policy](https://www.whitehouse.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf)**. +This policy was open for public comment before its finalization. It received [numerous comments](https://github.com/GSA/https/issues?utf8=%E2%9C%93&q=label%3A%22Public+Comment%22+) whose thoughtfulness and feedback improved the **[final policy](https://obamawhitehouse.archives.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf)**. You can see what changed between the proposal and the final policy in [pull request #108](https://github.com/GSA/https/pull/108). @@ -18,27 +18,28 @@ The homepage of this site is the final policy. The other pages on [https.cio.gov ### Developing on the site locally -This site uses [Jekyll](http://jekyllrb.com), [Sass](http://sass-lang.com), [Bourbon](http://bourbon.io), [Neat](http://neat.bourbon.io), and requires **Ruby 2.x**. +If you're using this repository to run the site locally, instructions follow below. -Install dependencies with Bundler: +Dependencies: -``` -bundle install -``` +* **Node 6+** to install USWDS and dependencies +* **Ruby** and **bundler** to install / run Jekyll -Start up a Sass watcher to keep assets auto-compiled: +##### First-time setup -``` -make watch -``` +1. `npm install` to install the USWDS, and Gulp dependencies. +2. `npm install -g gulp` to let you use the `gulp` CLI directly. +3. `bundle install` to install Jekyll. -And run the site with Jekyll: +##### Running the app -``` -bundle exec jekyll serve --watch -``` +If you'll be editing the Sass/CSS: -If all goes well, visit the site at `http://localhost:4000`. +* `gulp watch` + +To run the app: + +* `bundle exec jekyll serve` ### Public domain diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..7392b19 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,32 @@ +# Security Policy + +As a U.S. Government agency, the General Services Administration (GSA) takes +seriously our responsibility to protect the public's information, including +financial and personal information, from unwarranted disclosure. + +## Reporting a Vulnerability + +Services operated by the U.S. General Services Administration (GSA) +are covered by the **GSA Vulnerability Disclosure Program (VDP)**. + +See the [GSA Vulnerability Disclosure Policy](https://gsa.gov/vulnerability-disclosure-policy) +at for details including: + +* How to submit a report if you believe you have discovered a vulnerability. +* Bug bounty scope. +* GSA's coordinated disclosure policy. +* Information on how you may conduct security research on GSA developed + software and systems. +* Important legal and policy guidance. + +## Supported Versions + +Please note that only certain branches are supported with security updates. + +| Version (Branch) | Supported | +| ---------------- | ------------------ | +| master | :white_check_mark: | +| other | :x: | + +When using this code or reporting vulnerabilities please only use supported +versions. diff --git a/_config.yml b/_config.yml index 04d6b4c..94253fe 100644 --- a/_config.yml +++ b/_config.yml @@ -1,4 +1,17 @@ -# markdown +# Site metadata +title: The HTTPS-Only Standard +description: "Resources, best practices, and case studies for deploying HTTPS in the federal government." +url: https://https.cio.gov + +# DAP, GA, and GitHub +dap_agency: GSA +google_analytics_ua: UA-48605964-20 +repo: https://github.com/GSA/https + +# Standard +uswds_path: assets/vendor/uswds + +# TODO: get rid of this highlighter: rouge markdown: redcarpet redcarpet: @@ -7,53 +20,18 @@ redcarpet: - with_toc_data exclude: +- compliance +- resources - ".ruby-version" - ".jekyll-metadata" - ".gitignore" -- ".travis.yml" +- node_modules - todo.txt -- resources +- Staticfile - Gemfile - Gemfile.lock -- Makefile - vendor - README.md - CONTRIBUTING.md - LICENSE.md -- compliance - -# Site metadata -name: The HTTPS-Only Standard -description: "Resources, best practices, and case studies for deploying HTTPS in the federal government." -url: https://https.cio.gov - -# GitHub information -org_name: GSA -repo_name: https -branch: master - -# Navigation -# List links that should appear in the site sidebar here -navigation: -- text: Home - url: / -- text: Why Everything? - url: /everything/ -- text: Compliance Guide - url: /guide/ -- text: Introduction to HTTPS - url: /faq/ -- text: Certificates - url: /certificates/ -- text: HTTP Strict Transport Security - url: /hsts/ -- text: Migrating APIs - url: /apis/ -- text: Server Name Indication - url: /sni/ -- text: Technical Guidelines - url: /technical-guidelines/ -- text: Mixed Content - url: /mixed-content/ -- text: Resources - url: /resources/ +- .nvmrc diff --git a/_data/navigation.yml b/_data/navigation.yml new file mode 100644 index 0000000..148a02a --- /dev/null +++ b/_data/navigation.yml @@ -0,0 +1,48 @@ + +primary: +- text: Home + href: / +- text: Why Everything? + href: /everything/ +- text: Compliance Guide + href: /guide/ +- text: Introduction to HTTPS + href: /faq/ +- text: Certificates + href: /certificates/ +- text: HTTP Strict Transport Security + href: /hsts/ +- text: Migrating APIs + href: /apis/ +- text: Server Name Indication + href: /sni/ +- text: Technical Guidelines + href: /technical-guidelines/ +- text: Mixed Content + href: /mixed-content/ +- text: Resources + href: /resources/ + +mobile: +- text: Home + href: / +- text: Why Everything? + href: /everything/ +- text: Compliance Guide + href: /guide/ +- text: Introduction to HTTPS + href: /faq/ +- text: Certificates + href: /certificates/ +- text: HTTP Strict Transport Security + href: /hsts/ +- text: Migrating APIs + href: /apis/ +- text: Server Name Indication + href: /sni/ +- text: Technical Guidelines + href: /technical-guidelines/ +- text: Mixed Content + href: /mixed-content/ +- text: Resources + href: /resources/ diff --git a/_includes/banner.html b/_includes/banner.html new file mode 100644 index 0000000..1033663 --- /dev/null +++ b/_includes/banner.html @@ -0,0 +1,10 @@ +
+
+
+
+ U.S. flag +

An official website of the United States government

+
+
+
+
diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000..a81e354 --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,7 @@ + diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 0000000..d490d50 --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,14 @@ + + + + +{% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }}{% endif %} + + + + + + + + + diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 0000000..90661d5 --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,43 @@ + + + + diff --git a/_includes/analytics.html b/_includes/scripts.html similarity index 61% rename from _includes/analytics.html rename to _includes/scripts.html index 00959f1..dd6b283 100644 --- a/_includes/analytics.html +++ b/_includes/scripts.html @@ -1,20 +1,21 @@ + + + + + + + - - diff --git a/_includes/sidebar.html b/_includes/sidebar.html deleted file mode 100644 index f7b42f1..0000000 --- a/_includes/sidebar.html +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/_includes/sidenav.html b/_includes/sidenav.html new file mode 100644 index 0000000..78a6351 --- /dev/null +++ b/_includes/sidenav.html @@ -0,0 +1,28 @@ + diff --git a/_layouts/base.html b/_layouts/base.html new file mode 100644 index 0000000..e85f969 --- /dev/null +++ b/_layouts/base.html @@ -0,0 +1,40 @@ +--- + +--- + + + + {% include head.html %} + + + + + +Skip to main content + +{% include header.html %} + + + +
+
+ {% if page.appendix %} +

{{ page.title }}

+ {% else %} +

{{ page.title }}

+ {% endif %} + + {{ content }} +
+ + {% include footer.html %} + +
+ +{% include scripts.html %} + + + + diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 282fdb8..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - {% if page.title %} - {{ page.title }} - - {% else %} - {{ site.title }} - - {% endif %} - - {% if page.description %} - - - {% else %} - - - {% endif %} - - - - -
-
-

- {{ site.name }} -

-
- -
- - {% include sidebar.html %} - -
- {{ content }} -
- -
-
- -{% include analytics.html %} - - - diff --git a/_layouts/page.html b/_layouts/page.html deleted file mode 100644 index 80476ae..0000000 --- a/_layouts/page.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: default ---- - -

{{ page.title }}

- -{{ content }} diff --git a/assets/_sass/bourbon/_bourbon-deprecated-upcoming.scss b/assets/_sass/bourbon/_bourbon-deprecated-upcoming.scss deleted file mode 100644 index f946b3b..0000000 --- a/assets/_sass/bourbon/_bourbon-deprecated-upcoming.scss +++ /dev/null @@ -1,8 +0,0 @@ -//************************************************************************// -// These mixins/functions are deprecated -// They will be removed in the next MAJOR version release -//************************************************************************// -@mixin inline-block { - display: inline-block; - @warn "inline-block mixin is deprecated and will be removed in the next major version release"; -} diff --git a/assets/_sass/bourbon/_bourbon.scss b/assets/_sass/bourbon/_bourbon.scss deleted file mode 100644 index 11d52d7..0000000 --- a/assets/_sass/bourbon/_bourbon.scss +++ /dev/null @@ -1,78 +0,0 @@ -// Settings -@import "settings/prefixer"; -@import "settings/px-to-em"; - -// Custom Helpers -@import "helpers/convert-units"; -@import "helpers/gradient-positions-parser"; -@import "helpers/is-num"; -@import "helpers/linear-angle-parser"; -@import "helpers/linear-gradient-parser"; -@import "helpers/linear-positions-parser"; -@import "helpers/linear-side-corner-parser"; -@import "helpers/radial-arg-parser"; -@import "helpers/radial-positions-parser"; -@import "helpers/radial-gradient-parser"; -@import "helpers/render-gradients"; -@import "helpers/shape-size-stripper"; -@import "helpers/str-to-num"; - -// Custom Functions -@import "functions/assign"; -@import "functions/color-lightness"; -@import "functions/flex-grid"; -@import "functions/golden-ratio"; -@import "functions/grid-width"; -@import "functions/modular-scale"; -@import "functions/px-to-em"; -@import "functions/px-to-rem"; -@import "functions/strip-units"; -@import "functions/tint-shade"; -@import "functions/transition-property-name"; -@import "functions/unpack"; - -// CSS3 Mixins -@import "css3/animation"; -@import "css3/appearance"; -@import "css3/backface-visibility"; -@import "css3/background"; -@import "css3/background-image"; -@import "css3/border-image"; -@import "css3/border-radius"; -@import "css3/box-sizing"; -@import "css3/calc"; -@import "css3/columns"; -@import "css3/filter"; -@import "css3/flex-box"; -@import "css3/font-face"; -@import "css3/font-feature-settings"; -@import "css3/hyphens"; -@import "css3/hidpi-media-query"; -@import "css3/image-rendering"; -@import "css3/keyframes"; -@import "css3/linear-gradient"; -@import "css3/perspective"; -@import "css3/radial-gradient"; -@import "css3/transform"; -@import "css3/transition"; -@import "css3/user-select"; -@import "css3/placeholder"; - -// Addons & other mixins -@import "addons/button"; -@import "addons/clearfix"; -@import "addons/directional-values"; -@import "addons/ellipsis"; -@import "addons/font-family"; -@import "addons/hide-text"; -@import "addons/html5-input-types"; -@import "addons/position"; -@import "addons/prefixer"; -@import "addons/retina-image"; -@import "addons/size"; -@import "addons/timing-functions"; -@import "addons/triangle"; -@import "addons/word-wrap"; - -// Soon to be deprecated Mixins -@import "bourbon-deprecated-upcoming"; diff --git a/assets/_sass/bourbon/addons/_button.scss b/assets/_sass/bourbon/addons/_button.scss deleted file mode 100644 index 14a89e4..0000000 --- a/assets/_sass/bourbon/addons/_button.scss +++ /dev/null @@ -1,374 +0,0 @@ -@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) { - - @if type-of($style) == string and type-of($base-color) == color { - @include buttonstyle($style, $base-color, $text-size, $padding); - } - - @if type-of($style) == string and type-of($base-color) == number { - $padding: $text-size; - $text-size: $base-color; - $base-color: #4294f0; - - @if $padding == inherit { - $padding: 7px 18px; - } - - @include buttonstyle($style, $base-color, $text-size, $padding); - } - - @if type-of($style) == color and type-of($base-color) == color { - $base-color: $style; - $style: simple; - @include buttonstyle($style, $base-color, $text-size, $padding); - } - - @if type-of($style) == color and type-of($base-color) == number { - $padding: $text-size; - $text-size: $base-color; - $base-color: $style; - $style: simple; - - @if $padding == inherit { - $padding: 7px 18px; - } - - @include buttonstyle($style, $base-color, $text-size, $padding); - } - - @if type-of($style) == number { - $padding: $base-color; - $text-size: $style; - $base-color: #4294f0; - $style: simple; - - @if $padding == #4294f0 { - $padding: 7px 18px; - } - - @include buttonstyle($style, $base-color, $text-size, $padding); - } - - &:disabled { - opacity: 0.5; - cursor: not-allowed; - } -} - - -// Selector Style Button -//************************************************************************// -@mixin buttonstyle($type, $b-color, $t-size, $pad) { - // Grayscale button - @if $type == simple and $b-color == grayscale($b-color) { - @include simple($b-color, true, $t-size, $pad); - } - - @if $type == shiny and $b-color == grayscale($b-color) { - @include shiny($b-color, true, $t-size, $pad); - } - - @if $type == pill and $b-color == grayscale($b-color) { - @include pill($b-color, true, $t-size, $pad); - } - - @if $type == flat and $b-color == grayscale($b-color) { - @include flat($b-color, true, $t-size, $pad); - } - - // Colored button - @if $type == simple { - @include simple($b-color, false, $t-size, $pad); - } - - @else if $type == shiny { - @include shiny($b-color, false, $t-size, $pad); - } - - @else if $type == pill { - @include pill($b-color, false, $t-size, $pad); - } - - @else if $type == flat { - @include flat($b-color, false, $t-size, $pad); - } -} - - -// Simple Button -//************************************************************************// -@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { - $color: hsl(0, 0, 100%); - $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%); - $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%); - $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%); - $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%); - - @if is-light($base-color) { - $color: hsl(0, 0, 20%); - $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); - } - - @if $grayscale == true { - $border: grayscale($border); - $inset-shadow: grayscale($inset-shadow); - $stop-gradient: grayscale($stop-gradient); - $text-shadow: grayscale($text-shadow); - } - - border: 1px solid $border; - border-radius: 3px; - box-shadow: inset 0 1px 0 0 $inset-shadow; - color: $color; - display: inline-block; - font-size: $textsize; - font-weight: bold; - @include linear-gradient ($base-color, $stop-gradient); - padding: $padding; - text-decoration: none; - text-shadow: 0 1px 0 $text-shadow; - background-clip: padding-box; - - &:hover:not(:disabled) { - $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%); - $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%); - $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%); - - @if $grayscale == true { - $base-color-hover: grayscale($base-color-hover); - $inset-shadow-hover: grayscale($inset-shadow-hover); - $stop-gradient-hover: grayscale($stop-gradient-hover); - } - - box-shadow: inset 0 1px 0 0 $inset-shadow-hover; - cursor: pointer; - @include linear-gradient ($base-color-hover, $stop-gradient-hover); - } - - &:active:not(:disabled), - &:focus:not(:disabled) { - $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%); - $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%); - - @if $grayscale == true { - $border-active: grayscale($border-active); - $inset-shadow-active: grayscale($inset-shadow-active); - } - - border: 1px solid $border-active; - box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active; - } -} - - -// Shiny Button -//************************************************************************// -@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { - $color: hsl(0, 0, 100%); - $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81); - $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122); - $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46); - $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12); - $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33); - $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114); - $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48); - - @if is-light($base-color) { - $color: hsl(0, 0, 20%); - $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); - } - - @if $grayscale == true { - $border: grayscale($border); - $border-bottom: grayscale($border-bottom); - $fourth-stop: grayscale($fourth-stop); - $inset-shadow: grayscale($inset-shadow); - $second-stop: grayscale($second-stop); - $text-shadow: grayscale($text-shadow); - $third-stop: grayscale($third-stop); - } - - border: 1px solid $border; - border-bottom: 1px solid $border-bottom; - border-radius: 5px; - box-shadow: inset 0 1px 0 0 $inset-shadow; - color: $color; - display: inline-block; - font-size: $textsize; - font-weight: bold; - @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%); - padding: $padding; - text-align: center; - text-decoration: none; - text-shadow: 0 -1px 1px $text-shadow; - - &:hover:not(:disabled) { - $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18); - $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51); - $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66); - $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63); - - @if $grayscale == true { - $first-stop-hover: grayscale($first-stop-hover); - $second-stop-hover: grayscale($second-stop-hover); - $third-stop-hover: grayscale($third-stop-hover); - $fourth-stop-hover: grayscale($fourth-stop-hover); - } - - cursor: pointer; - @include linear-gradient(top, $first-stop-hover 0%, - $second-stop-hover 50%, - $third-stop-hover 50%, - $fourth-stop-hover 100%); - } - - &:active:not(:disabled), - &:focus:not(:disabled) { - $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122); - - @if $grayscale == true { - $inset-shadow-active: grayscale($inset-shadow-active); - } - - box-shadow: inset 0 0 20px 0 $inset-shadow-active; - } -} - - -// Pill Button -//************************************************************************// -@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { - $color: hsl(0, 0, 100%); - $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%); - $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%); - $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%); - $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%); - $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%); - $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%); - - @if is-light($base-color) { - $color: hsl(0, 0, 20%); - $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); - } - - @if $grayscale == true { - $border-bottom: grayscale($border-bottom); - $border-sides: grayscale($border-sides); - $border-top: grayscale($border-top); - $inset-shadow: grayscale($inset-shadow); - $stop-gradient: grayscale($stop-gradient); - $text-shadow: grayscale($text-shadow); - } - - border: 1px solid $border-top; - border-color: $border-top $border-sides $border-bottom; - border-radius: 16px; - box-shadow: inset 0 1px 0 0 $inset-shadow; - color: $color; - display: inline-block; - font-size: $textsize; - font-weight: normal; - line-height: 1; - @include linear-gradient ($base-color, $stop-gradient); - padding: $padding; - text-align: center; - text-decoration: none; - text-shadow: 0 -1px 1px $text-shadow; - background-clip: padding-box; - - &:hover:not(:disabled) { - $base-color-hover: adjust-color($base-color, $lightness: -4.5%); - $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%); - $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%); - $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%); - $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%); - $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%); - $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%); - - @if $grayscale == true { - $base-color-hover: grayscale($base-color-hover); - $border-bottom: grayscale($border-bottom); - $border-sides: grayscale($border-sides); - $border-top: grayscale($border-top); - $inset-shadow-hover: grayscale($inset-shadow-hover); - $stop-gradient-hover: grayscale($stop-gradient-hover); - $text-shadow-hover: grayscale($text-shadow-hover); - } - - border: 1px solid $border-top; - border-color: $border-top $border-sides $border-bottom; - box-shadow: inset 0 1px 0 0 $inset-shadow-hover; - cursor: pointer; - @include linear-gradient ($base-color-hover, $stop-gradient-hover); - text-shadow: 0 -1px 1px $text-shadow-hover; - background-clip: padding-box; - } - - &:active:not(:disabled), - &:focus:not(:disabled) { - $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%); - $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%); - $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%); - $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%); - $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%); - - @if $grayscale == true { - $active-color: grayscale($active-color); - $border-active: grayscale($border-active); - $border-bottom-active: grayscale($border-bottom-active); - $inset-shadow-active: grayscale($inset-shadow-active); - $text-shadow-active: grayscale($text-shadow-active); - } - - background: $active-color; - border: 1px solid $border-active; - border-bottom: 1px solid $border-bottom-active; - box-shadow: inset 0 0 6px 3px $inset-shadow-active; - text-shadow: 0 -1px 1px $text-shadow-active; - } -} - - - -// Flat Button -//************************************************************************// -@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { - $color: hsl(0, 0, 100%); - - @if is-light($base-color) { - $color: hsl(0, 0, 20%); - } - - background-color: $base-color; - border-radius: 3px; - border: none; - color: $color; - display: inline-block; - font-size: inherit; - font-weight: bold; - padding: 7px 18px; - text-decoration: none; - background-clip: padding-box; - - &:hover:not(:disabled){ - $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%); - - @if $grayscale == true { - $base-color-hover: grayscale($base-color-hover); - } - - background-color: $base-color-hover; - cursor: pointer; - } - - &:active:not(:disabled), - &:focus:not(:disabled) { - $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%); - - @if $grayscale == true { - $base-color-active: grayscale($base-color-active); - } - - background-color: $base-color-active; - cursor: pointer; - } -} diff --git a/assets/_sass/bourbon/addons/_clearfix.scss b/assets/_sass/bourbon/addons/_clearfix.scss deleted file mode 100644 index 783cfbc..0000000 --- a/assets/_sass/bourbon/addons/_clearfix.scss +++ /dev/null @@ -1,23 +0,0 @@ -// Modern micro clearfix provides an easy way to contain floats without adding additional markup. -// -// Example usage: -// -// // Contain all floats within .wrapper -// .wrapper { -// @include clearfix; -// .content, -// .sidebar { -// float : left; -// } -// } - -@mixin clearfix { - &:after { - content:""; - display:table; - clear:both; - } -} - -// Acknowledgements -// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php) diff --git a/assets/_sass/bourbon/addons/_directional-values.scss b/assets/_sass/bourbon/addons/_directional-values.scss deleted file mode 100644 index 742f103..0000000 --- a/assets/_sass/bourbon/addons/_directional-values.scss +++ /dev/null @@ -1,111 +0,0 @@ -// directional-property mixins are shorthands -// for writing properties like the following -// -// @include margin(null 0 10px); -// ------ -// margin-right: 0; -// margin-bottom: 10px; -// margin-left: 0; -// -// - or - -// -// @include border-style(dotted null); -// ------ -// border-top-style: dotted; -// border-bottom-style: dotted; -// -// ------ -// -// Note: You can also use false instead of null - -@function collapse-directionals($vals) { - $output: null; - - $A: nth( $vals, 1 ); - $B: if( length($vals) < 2, $A, nth($vals, 2)); - $C: if( length($vals) < 3, $A, nth($vals, 3)); - $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) )); - - @if $A == 0 { $A: 0 } - @if $B == 0 { $B: 0 } - @if $C == 0 { $C: 0 } - @if $D == 0 { $D: 0 } - - @if $A == $B and $A == $C and $A == $D { $output: $A } - @else if $A == $C and $B == $D { $output: $A $B } - @else if $B == $D { $output: $A $B $C } - @else { $output: $A $B $C $D } - - @return $output; -} - -@function contains-falsy($list) { - @each $item in $list { - @if not $item { - @return true; - } - } - - @return false; -} - -@mixin directional-property($pre, $suf, $vals) { - // Property Names - $top: $pre + "-top" + if($suf, "-#{$suf}", ""); - $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); - $left: $pre + "-left" + if($suf, "-#{$suf}", ""); - $right: $pre + "-right" + if($suf, "-#{$suf}", ""); - $all: $pre + if($suf, "-#{$suf}", ""); - - $vals: collapse-directionals($vals); - - @if contains-falsy($vals) { - @if nth($vals, 1) { #{$top}: nth($vals, 1); } - - @if length($vals) == 1 { - @if nth($vals, 1) { #{$right}: nth($vals, 1); } - } @else { - @if nth($vals, 2) { #{$right}: nth($vals, 2); } - } - - // prop: top/bottom right/left - @if length($vals) == 2 { - @if nth($vals, 1) { #{$bottom}: nth($vals, 1); } - @if nth($vals, 2) { #{$left}: nth($vals, 2); } - - // prop: top right/left bottom - } @else if length($vals) == 3 { - @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } - @if nth($vals, 2) { #{$left}: nth($vals, 2); } - - // prop: top right bottom left - } @else if length($vals) == 4 { - @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } - @if nth($vals, 4) { #{$left}: nth($vals, 4); } - } - - // prop: top/right/bottom/left - } @else { - #{$all}: $vals; - } -} - -@mixin margin($vals...) { - @include directional-property(margin, false, $vals...); -} - -@mixin padding($vals...) { - @include directional-property(padding, false, $vals...); -} - -@mixin border-style($vals...) { - @include directional-property(border, style, $vals...); -} - -@mixin border-color($vals...) { - @include directional-property(border, color, $vals...); -} - -@mixin border-width($vals...) { - @include directional-property(border, width, $vals...); -} diff --git a/assets/_sass/bourbon/addons/_ellipsis.scss b/assets/_sass/bourbon/addons/_ellipsis.scss deleted file mode 100644 index a8ea2a4..0000000 --- a/assets/_sass/bourbon/addons/_ellipsis.scss +++ /dev/null @@ -1,7 +0,0 @@ -@mixin ellipsis($width: 100%) { - display: inline-block; - max-width: $width; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} diff --git a/assets/_sass/bourbon/addons/_font-family.scss b/assets/_sass/bourbon/addons/_font-family.scss deleted file mode 100644 index 31f5d9c..0000000 --- a/assets/_sass/bourbon/addons/_font-family.scss +++ /dev/null @@ -1,5 +0,0 @@ -$georgia: Georgia, Cambria, "Times New Roman", Times, serif; -$helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; -$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif; -$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace; -$verdana: Verdana, Geneva, sans-serif; diff --git a/assets/_sass/bourbon/addons/_hide-text.scss b/assets/_sass/bourbon/addons/_hide-text.scss deleted file mode 100644 index fc79438..0000000 --- a/assets/_sass/bourbon/addons/_hide-text.scss +++ /dev/null @@ -1,10 +0,0 @@ -@mixin hide-text { - overflow: hidden; - - &:before { - content: ""; - display: block; - width: 0; - height: 100%; - } -} diff --git a/assets/_sass/bourbon/addons/_html5-input-types.scss b/assets/_sass/bourbon/addons/_html5-input-types.scss deleted file mode 100644 index 9e9324a..0000000 --- a/assets/_sass/bourbon/addons/_html5-input-types.scss +++ /dev/null @@ -1,86 +0,0 @@ -//************************************************************************// -// Generate a variable ($all-text-inputs) with a list of all html5 -// input types that have a text-based input, excluding textarea. -// http://diveintohtml5.org/forms.html -//************************************************************************// -$inputs-list: 'input[type="email"]', - 'input[type="number"]', - 'input[type="password"]', - 'input[type="search"]', - 'input[type="tel"]', - 'input[type="text"]', - 'input[type="url"]', - - // Webkit & Gecko may change the display of these in the future - 'input[type="color"]', - 'input[type="date"]', - 'input[type="datetime"]', - 'input[type="datetime-local"]', - 'input[type="month"]', - 'input[type="time"]', - 'input[type="week"]'; - -// Bare inputs -//************************************************************************// -$all-text-inputs: assign-inputs($inputs-list); - -// Hover Pseudo-class -//************************************************************************// -$all-text-inputs-hover: assign-inputs($inputs-list, hover); - -// Focus Pseudo-class -//************************************************************************// -$all-text-inputs-focus: assign-inputs($inputs-list, focus); - - - -// You must use interpolation on the variable: -// #{$all-text-inputs} -// #{$all-text-inputs-hover} -// #{$all-text-inputs-focus} - -// Example -//************************************************************************// -// #{$all-text-inputs}, textarea { -// border: 1px solid red; -// } - - - -//************************************************************************// -// Generate a variable ($all-button-inputs) with a list of all html5 -// input types that have a button-based input, excluding button. -//************************************************************************// -$inputs-button-list: 'input[type="button"]', - 'input[type="reset"]', - 'input[type="submit"]'; - -// Bare inputs -//************************************************************************// -$all-button-inputs: assign-inputs($inputs-button-list); - -// Hover Pseudo-class -//************************************************************************// -$all-button-inputs-hover: assign-inputs($inputs-button-list, hover); - -// Focus Pseudo-class -//************************************************************************// -$all-button-inputs-focus: assign-inputs($inputs-button-list, focus); - -// Active Pseudo-class -//************************************************************************// -$all-button-inputs-active: assign-inputs($inputs-button-list, active); - - - -// You must use interpolation on the variable: -// #{$all-button-inputs} -// #{$all-button-inputs-hover} -// #{$all-button-inputs-focus} -// #{$all-button-inputs-active} - -// Example -//************************************************************************// -// #{$all-button-inputs}, button { -// border: 1px solid red; -// } diff --git a/assets/_sass/bourbon/addons/_position.scss b/assets/_sass/bourbon/addons/_position.scss deleted file mode 100644 index 7de7518..0000000 --- a/assets/_sass/bourbon/addons/_position.scss +++ /dev/null @@ -1,32 +0,0 @@ -@mixin position ($position: relative, $coordinates: null null null null) { - - @if type-of($position) == list { - $coordinates: $position; - $position: relative; - } - - $coordinates: unpack($coordinates); - - $top: nth($coordinates, 1); - $right: nth($coordinates, 2); - $bottom: nth($coordinates, 3); - $left: nth($coordinates, 4); - - position: $position; - - @if ($top and $top == auto) or (type-of($top) == number) { - top: $top; - } - - @if ($right and $right == auto) or (type-of($right) == number) { - right: $right; - } - - @if ($bottom and $bottom == auto) or (type-of($bottom) == number) { - bottom: $bottom; - } - - @if ($left and $left == auto) or (type-of($left) == number) { - left: $left; - } -} diff --git a/assets/_sass/bourbon/addons/_prefixer.scss b/assets/_sass/bourbon/addons/_prefixer.scss deleted file mode 100644 index c32f502..0000000 --- a/assets/_sass/bourbon/addons/_prefixer.scss +++ /dev/null @@ -1,45 +0,0 @@ -//************************************************************************// -// Example: @include prefixer(border-radius, $radii, webkit ms spec); -//************************************************************************// -// Variables located in /settings/_prefixer.scss - -@mixin prefixer ($property, $value, $prefixes) { - @each $prefix in $prefixes { - @if $prefix == webkit { - @if $prefix-for-webkit { - -webkit-#{$property}: $value; - } - } - @else if $prefix == moz { - @if $prefix-for-mozilla { - -moz-#{$property}: $value; - } - } - @else if $prefix == ms { - @if $prefix-for-microsoft { - -ms-#{$property}: $value; - } - } - @else if $prefix == o { - @if $prefix-for-opera { - -o-#{$property}: $value; - } - } - @else if $prefix == spec { - @if $prefix-for-spec { - #{$property}: $value; - } - } - @else { - @warn "Unrecognized prefix: #{$prefix}"; - } - } -} - -@mixin disable-prefix-for-all() { - $prefix-for-webkit: false !global; - $prefix-for-mozilla: false !global; - $prefix-for-microsoft: false !global; - $prefix-for-opera: false !global; - $prefix-for-spec: false !global; -} diff --git a/assets/_sass/bourbon/addons/_retina-image.scss b/assets/_sass/bourbon/addons/_retina-image.scss deleted file mode 100644 index 7931bd1..0000000 --- a/assets/_sass/bourbon/addons/_retina-image.scss +++ /dev/null @@ -1,31 +0,0 @@ -@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: false) { - @if $asset-pipeline { - background-image: image-url("#{$filename}.#{$extension}"); - } - @else { - background-image: url("#{$filename}.#{$extension}"); - } - - @include hidpi { - @if $asset-pipeline { - @if $retina-filename { - background-image: image-url("#{$retina-filename}.#{$extension}"); - } - @else { - background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}"); - } - } - - @else { - @if $retina-filename { - background-image: url("#{$retina-filename}.#{$extension}"); - } - @else { - background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); - } - } - - background-size: $background-size; - - } -} diff --git a/assets/_sass/bourbon/addons/_size.scss b/assets/_sass/bourbon/addons/_size.scss deleted file mode 100644 index ac705e2..0000000 --- a/assets/_sass/bourbon/addons/_size.scss +++ /dev/null @@ -1,16 +0,0 @@ -@mixin size($size) { - $height: nth($size, 1); - $width: $height; - - @if length($size) > 1 { - $height: nth($size, 2); - } - - @if $height == auto or (type-of($height) == number and not unitless($height)) { - height: $height; - } - - @if $width == auto or (type-of($height) == number and not unitless($width)) { - width: $width; - } -} diff --git a/assets/_sass/bourbon/addons/_timing-functions.scss b/assets/_sass/bourbon/addons/_timing-functions.scss deleted file mode 100644 index 51b2410..0000000 --- a/assets/_sass/bourbon/addons/_timing-functions.scss +++ /dev/null @@ -1,32 +0,0 @@ -// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) -// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html - -// EASE IN -$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); -$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); -$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); -$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); -$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); -$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); -$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); -$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); - -// EASE OUT -$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); -$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); -$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); -$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); -$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); -$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); -$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); -$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); - -// EASE IN OUT -$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); -$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); -$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); -$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); -$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); -$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); -$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); -$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); diff --git a/assets/_sass/bourbon/addons/_triangle.scss b/assets/_sass/bourbon/addons/_triangle.scss deleted file mode 100644 index 573954e..0000000 --- a/assets/_sass/bourbon/addons/_triangle.scss +++ /dev/null @@ -1,83 +0,0 @@ -@mixin triangle ($size, $color, $direction) { - height: 0; - width: 0; - - $width: nth($size, 1); - $height: nth($size, length($size)); - - $foreground-color: nth($color, 1); - $background-color: if(length($color) == 2, nth($color, 2), transparent); - - @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { - - $width: $width / 2; - $height: if(length($size) > 1, $height, $height/2); - - @if $direction == up { - border-left: $width solid $background-color; - border-right: $width solid $background-color; - border-bottom: $height solid $foreground-color; - - } @else if $direction == right { - border-top: $width solid $background-color; - border-bottom: $width solid $background-color; - border-left: $height solid $foreground-color; - - } @else if $direction == down { - border-left: $width solid $background-color; - border-right: $width solid $background-color; - border-top: $height solid $foreground-color; - - } @else if $direction == left { - border-top: $width solid $background-color; - border-bottom: $width solid $background-color; - border-right: $height solid $foreground-color; - } - } - - @else if ($direction == up-right) or ($direction == up-left) { - border-top: $height solid $foreground-color; - - @if $direction == up-right { - border-left: $width solid $background-color; - - } @else if $direction == up-left { - border-right: $width solid $background-color; - } - } - - @else if ($direction == down-right) or ($direction == down-left) { - border-bottom: $height solid $foreground-color; - - @if $direction == down-right { - border-left: $width solid $background-color; - - } @else if $direction == down-left { - border-right: $width solid $background-color; - } - } - - @else if ($direction == inset-up) { - border-width: $height $width; - border-style: solid; - border-color: $background-color $background-color $foreground-color; - } - - @else if ($direction == inset-down) { - border-width: $height $width; - border-style: solid; - border-color: $foreground-color $background-color $background-color; - } - - @else if ($direction == inset-right) { - border-width: $width $height; - border-style: solid; - border-color: $background-color $background-color $background-color $foreground-color; - } - - @else if ($direction == inset-left) { - border-width: $width $height; - border-style: solid; - border-color: $background-color $foreground-color $background-color $background-color; - } -} diff --git a/assets/_sass/bourbon/addons/_word-wrap.scss b/assets/_sass/bourbon/addons/_word-wrap.scss deleted file mode 100644 index 9734a59..0000000 --- a/assets/_sass/bourbon/addons/_word-wrap.scss +++ /dev/null @@ -1,8 +0,0 @@ -@mixin word-wrap($wrap: break-word) { - word-wrap: $wrap; - - @if $wrap == break-word { - overflow-wrap: break-word; - word-break: break-all; - } -} diff --git a/assets/_sass/bourbon/css3/_animation.scss b/assets/_sass/bourbon/css3/_animation.scss deleted file mode 100644 index 08c3dbf..0000000 --- a/assets/_sass/bourbon/css3/_animation.scss +++ /dev/null @@ -1,52 +0,0 @@ -// http://www.w3.org/TR/css3-animations/#the-animation-name-property- -// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties. - -// Official animation shorthand property. -@mixin animation ($animations...) { - @include prefixer(animation, $animations, webkit moz spec); -} - -// Individual Animation Properties -@mixin animation-name ($names...) { - @include prefixer(animation-name, $names, webkit moz spec); -} - - -@mixin animation-duration ($times...) { - @include prefixer(animation-duration, $times, webkit moz spec); -} - - -@mixin animation-timing-function ($motions...) { -// ease | linear | ease-in | ease-out | ease-in-out - @include prefixer(animation-timing-function, $motions, webkit moz spec); -} - - -@mixin animation-iteration-count ($values...) { -// infinite | - @include prefixer(animation-iteration-count, $values, webkit moz spec); -} - - -@mixin animation-direction ($directions...) { -// normal | alternate - @include prefixer(animation-direction, $directions, webkit moz spec); -} - - -@mixin animation-play-state ($states...) { -// running | paused - @include prefixer(animation-play-state, $states, webkit moz spec); -} - - -@mixin animation-delay ($times...) { - @include prefixer(animation-delay, $times, webkit moz spec); -} - - -@mixin animation-fill-mode ($modes...) { -// none | forwards | backwards | both - @include prefixer(animation-fill-mode, $modes, webkit moz spec); -} diff --git a/assets/_sass/bourbon/css3/_appearance.scss b/assets/_sass/bourbon/css3/_appearance.scss deleted file mode 100644 index 3eb16e4..0000000 --- a/assets/_sass/bourbon/css3/_appearance.scss +++ /dev/null @@ -1,3 +0,0 @@ -@mixin appearance ($value) { - @include prefixer(appearance, $value, webkit moz ms o spec); -} diff --git a/assets/_sass/bourbon/css3/_backface-visibility.scss b/assets/_sass/bourbon/css3/_backface-visibility.scss deleted file mode 100644 index 1161fe6..0000000 --- a/assets/_sass/bourbon/css3/_backface-visibility.scss +++ /dev/null @@ -1,6 +0,0 @@ -//************************************************************************// -// Backface-visibility mixin -//************************************************************************// -@mixin backface-visibility($visibility) { - @include prefixer(backface-visibility, $visibility, webkit spec); -} diff --git a/assets/_sass/bourbon/css3/_background-image.scss b/assets/_sass/bourbon/css3/_background-image.scss deleted file mode 100644 index 6abe88b..0000000 --- a/assets/_sass/bourbon/css3/_background-image.scss +++ /dev/null @@ -1,42 +0,0 @@ -//************************************************************************// -// Background-image property for adding multiple background images with -// gradients, or for stringing multiple gradients together. -//************************************************************************// - -@mixin background-image($images...) { - $webkit-images: (); - $spec-images: (); - - @each $image in $images { - $webkit-image: (); - $spec-image: (); - - @if (type-of($image) == string) { - $url-str: str-slice($image, 0, 3); - $gradient-type: str-slice($image, 0, 6); - - @if $url-str == "url" { - $webkit-image: $image; - $spec-image: $image; - } - - @else if $gradient-type == "linear" { - $gradients: _linear-gradient-parser($image); - $webkit-image: map-get($gradients, webkit-image); - $spec-image: map-get($gradients, spec-image); - } - - @else if $gradient-type == "radial" { - $gradients: _radial-gradient-parser($image); - $webkit-image: map-get($gradients, webkit-image); - $spec-image: map-get($gradients, spec-image); - } - } - - $webkit-images: append($webkit-images, $webkit-image, comma); - $spec-images: append($spec-images, $spec-image, comma); - } - - background-image: $webkit-images; - background-image: $spec-images; -} diff --git a/assets/_sass/bourbon/css3/_background.scss b/assets/_sass/bourbon/css3/_background.scss deleted file mode 100644 index 9bce930..0000000 --- a/assets/_sass/bourbon/css3/_background.scss +++ /dev/null @@ -1,55 +0,0 @@ -//************************************************************************// -// Background property for adding multiple backgrounds using shorthand -// notation. -//************************************************************************// - -@mixin background($backgrounds...) { - $webkit-backgrounds: (); - $spec-backgrounds: (); - - @each $background in $backgrounds { - $webkit-background: (); - $spec-background: (); - $background-type: type-of($background); - - @if $background-type == string or list { - $background-str: if($background-type == list, nth($background, 1), $background); - - $url-str: str-slice($background-str, 0, 3); - $gradient-type: str-slice($background-str, 0, 6); - - @if $url-str == "url" { - $webkit-background: $background; - $spec-background: $background; - } - - @else if $gradient-type == "linear" { - $gradients: _linear-gradient-parser("#{$background}"); - $webkit-background: map-get($gradients, webkit-image); - $spec-background: map-get($gradients, spec-image); - } - - @else if $gradient-type == "radial" { - $gradients: _radial-gradient-parser("#{$background}"); - $webkit-background: map-get($gradients, webkit-image); - $spec-background: map-get($gradients, spec-image); - } - - @else { - $webkit-background: $background; - $spec-background: $background; - } - } - - @else { - $webkit-background: $background; - $spec-background: $background; - } - - $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma); - $spec-backgrounds: append($spec-backgrounds, $spec-background, comma); - } - - background: $webkit-backgrounds; - background: $spec-backgrounds; -} diff --git a/assets/_sass/bourbon/css3/_border-image.scss b/assets/_sass/bourbon/css3/_border-image.scss deleted file mode 100644 index e338c2d..0000000 --- a/assets/_sass/bourbon/css3/_border-image.scss +++ /dev/null @@ -1,59 +0,0 @@ -@mixin border-image($borders...) { - $webkit-borders: (); - $spec-borders: (); - - @each $border in $borders { - $webkit-border: (); - $spec-border: (); - $border-type: type-of($border); - - @if $border-type == string or list { - $border-str: if($border-type == list, nth($border, 1), $border); - - $url-str: str-slice($border-str, 0, 3); - $gradient-type: str-slice($border-str, 0, 6); - - @if $url-str == "url" { - $webkit-border: $border; - $spec-border: $border; - } - - @else if $gradient-type == "linear" { - $gradients: _linear-gradient-parser("#{$border}"); - $webkit-border: map-get($gradients, webkit-image); - $spec-border: map-get($gradients, spec-image); - } - - @else if $gradient-type == "radial" { - $gradients: _radial-gradient-parser("#{$border}"); - $webkit-border: map-get($gradients, webkit-image); - $spec-border: map-get($gradients, spec-image); - } - - @else { - $webkit-border: $border; - $spec-border: $border; - } - } - - @else { - $webkit-border: $border; - $spec-border: $border; - } - - $webkit-borders: append($webkit-borders, $webkit-border, comma); - $spec-borders: append($spec-borders, $spec-border, comma); - } - - -webkit-border-image: $webkit-borders; - border-image: $spec-borders; - border-style: solid; -} - -//Examples: -// @include border-image(url("image.png")); -// @include border-image(url("image.png") 20 stretch); -// @include border-image(linear-gradient(45deg, orange, yellow)); -// @include border-image(linear-gradient(45deg, orange, yellow) stretch); -// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round); -// @include border-image(radial-gradient(top, cover, orange, yellow, orange)); diff --git a/assets/_sass/bourbon/css3/_border-radius.scss b/assets/_sass/bourbon/css3/_border-radius.scss deleted file mode 100644 index 7c17190..0000000 --- a/assets/_sass/bourbon/css3/_border-radius.scss +++ /dev/null @@ -1,22 +0,0 @@ -//************************************************************************// -// Shorthand Border-radius mixins -//************************************************************************// -@mixin border-top-radius($radii) { - @include prefixer(border-top-left-radius, $radii, spec); - @include prefixer(border-top-right-radius, $radii, spec); -} - -@mixin border-bottom-radius($radii) { - @include prefixer(border-bottom-left-radius, $radii, spec); - @include prefixer(border-bottom-right-radius, $radii, spec); -} - -@mixin border-left-radius($radii) { - @include prefixer(border-top-left-radius, $radii, spec); - @include prefixer(border-bottom-left-radius, $radii, spec); -} - -@mixin border-right-radius($radii) { - @include prefixer(border-top-right-radius, $radii, spec); - @include prefixer(border-bottom-right-radius, $radii, spec); -} diff --git a/assets/_sass/bourbon/css3/_box-sizing.scss b/assets/_sass/bourbon/css3/_box-sizing.scss deleted file mode 100644 index f07e1d4..0000000 --- a/assets/_sass/bourbon/css3/_box-sizing.scss +++ /dev/null @@ -1,4 +0,0 @@ -@mixin box-sizing ($box) { -// content-box | border-box | inherit - @include prefixer(box-sizing, $box, webkit moz spec); -} diff --git a/assets/_sass/bourbon/css3/_calc.scss b/assets/_sass/bourbon/css3/_calc.scss deleted file mode 100644 index 94d7e4c..0000000 --- a/assets/_sass/bourbon/css3/_calc.scss +++ /dev/null @@ -1,4 +0,0 @@ -@mixin calc($property, $value) { - #{$property}: -webkit-calc(#{$value}); - #{$property}: calc(#{$value}); -} diff --git a/assets/_sass/bourbon/css3/_columns.scss b/assets/_sass/bourbon/css3/_columns.scss deleted file mode 100644 index 96f601c..0000000 --- a/assets/_sass/bourbon/css3/_columns.scss +++ /dev/null @@ -1,47 +0,0 @@ -@mixin columns($arg: auto) { -// || - @include prefixer(columns, $arg, webkit moz spec); -} - -@mixin column-count($int: auto) { -// auto || integer - @include prefixer(column-count, $int, webkit moz spec); -} - -@mixin column-gap($length: normal) { -// normal || length - @include prefixer(column-gap, $length, webkit moz spec); -} - -@mixin column-fill($arg: auto) { -// auto || length - @include prefixer(column-fill, $arg, webkit moz spec); -} - -@mixin column-rule($arg) { -// || || - @include prefixer(column-rule, $arg, webkit moz spec); -} - -@mixin column-rule-color($color) { - @include prefixer(column-rule-color, $color, webkit moz spec); -} - -@mixin column-rule-style($style: none) { -// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid - @include prefixer(column-rule-style, $style, webkit moz spec); -} - -@mixin column-rule-width ($width: none) { - @include prefixer(column-rule-width, $width, webkit moz spec); -} - -@mixin column-span($arg: none) { -// none || all - @include prefixer(column-span, $arg, webkit moz spec); -} - -@mixin column-width($length: auto) { -// auto || length - @include prefixer(column-width, $length, webkit moz spec); -} diff --git a/assets/_sass/bourbon/css3/_filter.scss b/assets/_sass/bourbon/css3/_filter.scss deleted file mode 100644 index 8560d77..0000000 --- a/assets/_sass/bourbon/css3/_filter.scss +++ /dev/null @@ -1,5 +0,0 @@ -@mixin filter($function: none) { - // [ - @include prefixer(perspective, $depth, webkit moz spec); -} - -@mixin perspective-origin($value: 50% 50%) { - @include prefixer(perspective-origin, $value, webkit moz spec); -} diff --git a/assets/_sass/bourbon/css3/_placeholder.scss b/assets/_sass/bourbon/css3/_placeholder.scss deleted file mode 100644 index 5682fd0..0000000 --- a/assets/_sass/bourbon/css3/_placeholder.scss +++ /dev/null @@ -1,8 +0,0 @@ -@mixin placeholder { - $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input"; - @each $placeholder in $placeholders { - &:#{$placeholder}-placeholder { - @content; - } - } -} diff --git a/assets/_sass/bourbon/css3/_radial-gradient.scss b/assets/_sass/bourbon/css3/_radial-gradient.scss deleted file mode 100644 index 7a8c376..0000000 --- a/assets/_sass/bourbon/css3/_radial-gradient.scss +++ /dev/null @@ -1,39 +0,0 @@ -// Requires Sass 3.1+ -@mixin radial-gradient($G1, $G2, - $G3: null, $G4: null, - $G5: null, $G6: null, - $G7: null, $G8: null, - $G9: null, $G10: null, - $pos: null, - $shape-size: null, - $fallback: null) { - - $data: _radial-arg-parser($G1, $G2, $pos, $shape-size); - $G1: nth($data, 1); - $G2: nth($data, 2); - $pos: nth($data, 3); - $shape-size: nth($data, 4); - - $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10; - - // Strip deprecated cover/contain for spec - $shape-size-spec: _shape-size-stripper($shape-size); - - // Set $G1 as the default fallback color - $first-color: nth($full, 1); - $fallback-color: nth($first-color, 1); - - @if (type-of($fallback) == color) or ($fallback == "transparent") { - $fallback-color: $fallback; - } - - // Add Commas and spaces - $shape-size: if($shape-size, '#{$shape-size}, ', null); - $pos: if($pos, '#{$pos}, ', null); - $pos-spec: if($pos, 'at #{$pos}', null); - $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} '); - - background-color: $fallback-color; - background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); - background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); -} diff --git a/assets/_sass/bourbon/css3/_transform.scss b/assets/_sass/bourbon/css3/_transform.scss deleted file mode 100644 index 8cc3596..0000000 --- a/assets/_sass/bourbon/css3/_transform.scss +++ /dev/null @@ -1,15 +0,0 @@ -@mixin transform($property: none) { -// none | - @include prefixer(transform, $property, webkit moz ms o spec); -} - -@mixin transform-origin($axes: 50%) { -// x-axis - left | center | right | length | % -// y-axis - top | center | bottom | length | % -// z-axis - length - @include prefixer(transform-origin, $axes, webkit moz ms o spec); -} - -@mixin transform-style ($style: flat) { - @include prefixer(transform-style, $style, webkit moz ms o spec); -} diff --git a/assets/_sass/bourbon/css3/_transition.scss b/assets/_sass/bourbon/css3/_transition.scss deleted file mode 100644 index 5ad4c0a..0000000 --- a/assets/_sass/bourbon/css3/_transition.scss +++ /dev/null @@ -1,77 +0,0 @@ -// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. -// Example: @include transition (all 2s ease-in-out); -// @include transition (opacity 1s ease-in 2s, width 2s ease-out); -// @include transition-property (transform, opacity); - -@mixin transition ($properties...) { - // Fix for vendor-prefix transform property - $needs-prefixes: false; - $webkit: (); - $moz: (); - $spec: (); - - // Create lists for vendor-prefixed transform - @each $list in $properties { - @if nth($list, 1) == "transform" { - $needs-prefixes: true; - $list1: -webkit-transform; - $list2: -moz-transform; - $list3: (); - - @each $var in $list { - $list3: join($list3, $var); - - @if $var != "transform" { - $list1: join($list1, $var); - $list2: join($list2, $var); - } - } - - $webkit: append($webkit, $list1); - $moz: append($moz, $list2); - $spec: append($spec, $list3); - } - - // Create lists for non-prefixed transition properties - @else { - $webkit: append($webkit, $list, comma); - $moz: append($moz, $list, comma); - $spec: append($spec, $list, comma); - } - } - - @if $needs-prefixes { - -webkit-transition: $webkit; - -moz-transition: $moz; - transition: $spec; - } - @else { - @if length($properties) >= 1 { - @include prefixer(transition, $properties, webkit moz spec); - } - - @else { - $properties: all 0.15s ease-out 0s; - @include prefixer(transition, $properties, webkit moz spec); - } - } -} - -@mixin transition-property ($properties...) { - -webkit-transition-property: transition-property-names($properties, 'webkit'); - -moz-transition-property: transition-property-names($properties, 'moz'); - transition-property: transition-property-names($properties, false); -} - -@mixin transition-duration ($times...) { - @include prefixer(transition-duration, $times, webkit moz spec); -} - -@mixin transition-timing-function ($motions...) { -// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() - @include prefixer(transition-timing-function, $motions, webkit moz spec); -} - -@mixin transition-delay ($times...) { - @include prefixer(transition-delay, $times, webkit moz spec); -} diff --git a/assets/_sass/bourbon/css3/_user-select.scss b/assets/_sass/bourbon/css3/_user-select.scss deleted file mode 100644 index 1380aa8..0000000 --- a/assets/_sass/bourbon/css3/_user-select.scss +++ /dev/null @@ -1,3 +0,0 @@ -@mixin user-select($arg: none) { - @include prefixer(user-select, $arg, webkit moz ms spec); -} diff --git a/assets/_sass/bourbon/functions/_assign.scss b/assets/_sass/bourbon/functions/_assign.scss deleted file mode 100644 index 9a1db93..0000000 --- a/assets/_sass/bourbon/functions/_assign.scss +++ /dev/null @@ -1,11 +0,0 @@ -@function assign-inputs($inputs, $pseudo: null) { - $list : (); - - @each $input in $inputs { - $input: unquote($input); - $input: if($pseudo, $input + ":" + $pseudo, $input); - $list: append($list, $input, comma); - } - - @return $list; -} \ No newline at end of file diff --git a/assets/_sass/bourbon/functions/_color-lightness.scss b/assets/_sass/bourbon/functions/_color-lightness.scss deleted file mode 100644 index 8c6df4e..0000000 --- a/assets/_sass/bourbon/functions/_color-lightness.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Programatically determines whether a color is light or dark -// Returns a boolean -// More details here http://robots.thoughtbot.com/closer-look-color-lightness - -@function is-light($hex-color) { - $-local-red: red(rgba($hex-color, 1.0)); - $-local-green: green(rgba($hex-color, 1.0)); - $-local-blue: blue(rgba($hex-color, 1.0)); - - $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; - - @return $-local-lightness > .6; -} diff --git a/assets/_sass/bourbon/functions/_flex-grid.scss b/assets/_sass/bourbon/functions/_flex-grid.scss deleted file mode 100644 index 3bbd866..0000000 --- a/assets/_sass/bourbon/functions/_flex-grid.scss +++ /dev/null @@ -1,39 +0,0 @@ -// Flexible grid -@function flex-grid($columns, $container-columns: $fg-max-columns) { - $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; - $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; - @return percentage($width / $container-width); -} - -// Flexible gutter -@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { - $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; - @return percentage($gutter / $container-width); -} - -// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function. -// This function takes the fluid grid equation (target / context = result) and uses columns to help define each. -// -// The calculation presumes that your column structure will be missing the last gutter: -// -// -- column -- gutter -- column -- gutter -- column -// -// $fg-column: 60px; // Column Width -// $fg-gutter: 25px; // Gutter Width -// $fg-max-columns: 12; // Total Columns For Main Container -// -// div { -// width: flex-grid(4); // returns (315px / 995px) = 31.65829%; -// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%; -// -// p { -// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; -// float: left; -// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%; -// } -// -// blockquote { -// float: left; -// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; -// } -// } \ No newline at end of file diff --git a/assets/_sass/bourbon/functions/_golden-ratio.scss b/assets/_sass/bourbon/functions/_golden-ratio.scss deleted file mode 100644 index 463d14a..0000000 --- a/assets/_sass/bourbon/functions/_golden-ratio.scss +++ /dev/null @@ -1,3 +0,0 @@ -@function golden-ratio($value, $increment) { - @return modular-scale($value, $increment, $golden) -} diff --git a/assets/_sass/bourbon/functions/_grid-width.scss b/assets/_sass/bourbon/functions/_grid-width.scss deleted file mode 100644 index 8e63d83..0000000 --- a/assets/_sass/bourbon/functions/_grid-width.scss +++ /dev/null @@ -1,13 +0,0 @@ -@function grid-width($n) { - @return $n * $gw-column + ($n - 1) * $gw-gutter; -} - -// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function. -// -// $gw-column: 100px; // Column Width -// $gw-gutter: 40px; // Gutter Width -// -// div { -// width: grid-width(4); // returns 520px; -// margin-left: $gw-gutter; // returns 40px; -// } diff --git a/assets/_sass/bourbon/functions/_modular-scale.scss b/assets/_sass/bourbon/functions/_modular-scale.scss deleted file mode 100644 index afc59eb..0000000 --- a/assets/_sass/bourbon/functions/_modular-scale.scss +++ /dev/null @@ -1,66 +0,0 @@ -// Scaling Variables -$golden: 1.618; -$minor-second: 1.067; -$major-second: 1.125; -$minor-third: 1.2; -$major-third: 1.25; -$perfect-fourth: 1.333; -$augmented-fourth: 1.414; -$perfect-fifth: 1.5; -$minor-sixth: 1.6; -$major-sixth: 1.667; -$minor-seventh: 1.778; -$major-seventh: 1.875; -$octave: 2; -$major-tenth: 2.5; -$major-eleventh: 2.667; -$major-twelfth: 3; -$double-octave: 4; - -@function modular-scale($value, $increment, $ratio) { - $v1: nth($value, 1); - $v2: nth($value, length($value)); - $value: $v1; - - // scale $v2 to just above $v1 - @while $v2 > $v1 { - $v2: ($v2 / $ratio); // will be off-by-1 - } - @while $v2 < $v1 { - $v2: ($v2 * $ratio); // will fix off-by-1 - } - - // check AFTER scaling $v2 to prevent double-counting corner-case - $double-stranded: $v2 > $v1; - - @if $increment > 0 { - @for $i from 1 through $increment { - @if $double-stranded and ($v1 * $ratio) > $v2 { - $value: $v2; - $v2: ($v2 * $ratio); - } @else { - $v1: ($v1 * $ratio); - $value: $v1; - } - } - } - - @if $increment < 0 { - // adjust $v2 to just below $v1 - @if $double-stranded { - $v2: ($v2 / $ratio); - } - - @for $i from $increment through -1 { - @if $double-stranded and ($v1 / $ratio) < $v2 { - $value: $v2; - $v2: ($v2 / $ratio); - } @else { - $v1: ($v1 / $ratio); - $value: $v1; - } - } - } - - @return $value; -} diff --git a/assets/_sass/bourbon/functions/_px-to-em.scss b/assets/_sass/bourbon/functions/_px-to-em.scss deleted file mode 100644 index 4832245..0000000 --- a/assets/_sass/bourbon/functions/_px-to-em.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Convert pixels to ems -// eg. for a relational value of 12px write em(12) when the parent is 16px -// if the parent is another value say 24px write em(12, 24) - -@function em($pxval, $base: $em-base) { - @if not unitless($pxval) { - $pxval: strip-units($pxval); - } - @if not unitless($base) { - $base: strip-units($base); - } - @return ($pxval / $base) * 1em; -} diff --git a/assets/_sass/bourbon/functions/_px-to-rem.scss b/assets/_sass/bourbon/functions/_px-to-rem.scss deleted file mode 100644 index 96b244e..0000000 --- a/assets/_sass/bourbon/functions/_px-to-rem.scss +++ /dev/null @@ -1,15 +0,0 @@ -// Convert pixels to rems -// eg. for a relational value of 12px write rem(12) -// Assumes $em-base is the font-size of - -@function rem($pxval) { - @if not unitless($pxval) { - $pxval: strip-units($pxval); - } - - $base: $em-base; - @if not unitless($base) { - $base: strip-units($base); - } - @return ($pxval / $base) * 1rem; -} diff --git a/assets/_sass/bourbon/functions/_strip-units.scss b/assets/_sass/bourbon/functions/_strip-units.scss deleted file mode 100644 index 6afc6e6..0000000 --- a/assets/_sass/bourbon/functions/_strip-units.scss +++ /dev/null @@ -1,5 +0,0 @@ -// Srtips the units from a value. e.g. 12px -> 12 - -@function strip-units($val) { - @return ($val / ($val * 0 + 1)); -} diff --git a/assets/_sass/bourbon/functions/_tint-shade.scss b/assets/_sass/bourbon/functions/_tint-shade.scss deleted file mode 100644 index f717200..0000000 --- a/assets/_sass/bourbon/functions/_tint-shade.scss +++ /dev/null @@ -1,9 +0,0 @@ -// Add percentage of white to a color -@function tint($color, $percent){ - @return mix(white, $color, $percent); -} - -// Add percentage of black to a color -@function shade($color, $percent){ - @return mix(black, $color, $percent); -} diff --git a/assets/_sass/bourbon/functions/_transition-property-name.scss b/assets/_sass/bourbon/functions/_transition-property-name.scss deleted file mode 100644 index 54cd422..0000000 --- a/assets/_sass/bourbon/functions/_transition-property-name.scss +++ /dev/null @@ -1,22 +0,0 @@ -// Return vendor-prefixed property names if appropriate -// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background -//************************************************************************// -@function transition-property-names($props, $vendor: false) { - $new-props: (); - - @each $prop in $props { - $new-props: append($new-props, transition-property-name($prop, $vendor), comma); - } - - @return $new-props; -} - -@function transition-property-name($prop, $vendor: false) { - // put other properties that need to be prefixed here aswell - @if $vendor and $prop == transform { - @return unquote('-'+$vendor+'-'+$prop); - } - @else { - @return $prop; - } -} \ No newline at end of file diff --git a/assets/_sass/bourbon/functions/_unpack.scss b/assets/_sass/bourbon/functions/_unpack.scss deleted file mode 100644 index 3775963..0000000 --- a/assets/_sass/bourbon/functions/_unpack.scss +++ /dev/null @@ -1,17 +0,0 @@ -// Convert shorthand to the 4-value syntax - -@function unpack($shorthand) { - @if length($shorthand) == 1 { - @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); - } - @else if length($shorthand) == 2 { - @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); - } - @else if length($shorthand) == 3 { - @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); - } - @else { - @return $shorthand; - } -} - diff --git a/assets/_sass/bourbon/helpers/_convert-units.scss b/assets/_sass/bourbon/helpers/_convert-units.scss deleted file mode 100644 index 3443db3..0000000 --- a/assets/_sass/bourbon/helpers/_convert-units.scss +++ /dev/null @@ -1,15 +0,0 @@ -//************************************************************************// -// Helper function for str-to-num fn. -// Source: http://sassmeister.com/gist/9647408 -//************************************************************************// -@function _convert-units($number, $unit) { - $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn'; - $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn; - $index: index($strings, $unit); - - @if not $index { - @warn "Unknown unit `#{$unit}`."; - @return false; - } - @return $number * nth($units, $index); -} diff --git a/assets/_sass/bourbon/helpers/_gradient-positions-parser.scss b/assets/_sass/bourbon/helpers/_gradient-positions-parser.scss deleted file mode 100644 index 07d30b6..0000000 --- a/assets/_sass/bourbon/helpers/_gradient-positions-parser.scss +++ /dev/null @@ -1,13 +0,0 @@ -@function _gradient-positions-parser($gradient-type, $gradient-positions) { - @if $gradient-positions - and ($gradient-type == linear) - and (type-of($gradient-positions) != color) { - $gradient-positions: _linear-positions-parser($gradient-positions); - } - @else if $gradient-positions - and ($gradient-type == radial) - and (type-of($gradient-positions) != color) { - $gradient-positions: _radial-positions-parser($gradient-positions); - } - @return $gradient-positions; -} diff --git a/assets/_sass/bourbon/helpers/_is-num.scss b/assets/_sass/bourbon/helpers/_is-num.scss deleted file mode 100644 index 71459e1..0000000 --- a/assets/_sass/bourbon/helpers/_is-num.scss +++ /dev/null @@ -1,8 +0,0 @@ -//************************************************************************// -// Helper for linear-gradient-parser -//************************************************************************// -@function _is-num($char) { - $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9; - $index: index($values, $char); - @return if($index, true, false); -} diff --git a/assets/_sass/bourbon/helpers/_linear-angle-parser.scss b/assets/_sass/bourbon/helpers/_linear-angle-parser.scss deleted file mode 100644 index e0401ed..0000000 --- a/assets/_sass/bourbon/helpers/_linear-angle-parser.scss +++ /dev/null @@ -1,25 +0,0 @@ -// Private function for linear-gradient-parser -@function _linear-angle-parser($image, $first-val, $prefix, $suffix) { - $offset: null; - $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val)); - $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val)); - - @if ($unit-long == "grad") or - ($unit-long == "turn") { - $offset: if($unit-long == "grad", -100grad * 3, -0.75turn); - } - - @else if ($unit-short == "deg") or - ($unit-short == "rad") { - $offset: if($unit-short == "deg", -90 * 3, 1.6rad); - } - - @if $offset { - $num: _str-to-num($first-val); - - @return ( - webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix, - spec-image: $image - ); - } -} diff --git a/assets/_sass/bourbon/helpers/_linear-gradient-parser.scss b/assets/_sass/bourbon/helpers/_linear-gradient-parser.scss deleted file mode 100644 index 12bcdcd..0000000 --- a/assets/_sass/bourbon/helpers/_linear-gradient-parser.scss +++ /dev/null @@ -1,41 +0,0 @@ -@function _linear-gradient-parser($image) { - $image: unquote($image); - $gradients: (); - $start: str-index($image, "("); - $end: str-index($image, ","); - $first-val: str-slice($image, $start + 1, $end - 1); - - $prefix: str-slice($image, 0, $start); - $suffix: str-slice($image, $end, str-length($image)); - - $has-multiple-vals: str-index($first-val, " "); - $has-single-position: unquote(_position-flipper($first-val) + ""); - $has-angle: _is-num(str-slice($first-val, 0, 0)); - - @if $has-multiple-vals { - $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals); - } - - @else if $has-single-position != "" { - $pos: unquote($has-single-position + ""); - - $gradients: ( - webkit-image: -webkit- + $image, - spec-image: $prefix + "to " + $pos + $suffix - ); - } - - @else if $has-angle { - // Rotate degree for webkit - $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix); - } - - @else { - $gradients: ( - webkit-image: -webkit- + $image, - spec-image: $image - ); - } - - @return $gradients; -} diff --git a/assets/_sass/bourbon/helpers/_linear-positions-parser.scss b/assets/_sass/bourbon/helpers/_linear-positions-parser.scss deleted file mode 100644 index d26383e..0000000 --- a/assets/_sass/bourbon/helpers/_linear-positions-parser.scss +++ /dev/null @@ -1,61 +0,0 @@ -@function _linear-positions-parser($pos) { - $type: type-of(nth($pos, 1)); - $spec: null; - $degree: null; - $side: null; - $corner: null; - $length: length($pos); - // Parse Side and corner positions - @if ($length > 1) { - @if nth($pos, 1) == "to" { // Newer syntax - $side: nth($pos, 2); - - @if $length == 2 { // eg. to top - // Swap for backwards compatability - $degree: _position-flipper(nth($pos, 2)); - } - @else if $length == 3 { // eg. to top left - $corner: nth($pos, 3); - } - } - @else if $length == 2 { // Older syntax ("top left") - $side: _position-flipper(nth($pos, 1)); - $corner: _position-flipper(nth($pos, 2)); - } - - @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") { - $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); - } - @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") { - $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); - } - @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") { - $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); - } - @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") { - $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); - } - $spec: to $side $corner; - } - @else if $length == 1 { - // Swap for backwards compatability - @if $type == string { - $degree: $pos; - $spec: to _position-flipper($pos); - } - @else { - $degree: -270 - $pos; //rotate the gradient opposite from spec - $spec: $pos; - } - } - $degree: unquote($degree + ","); - $spec: unquote($spec + ","); - @return $degree $spec; -} - -@function _position-flipper($pos) { - @return if($pos == left, right, null) - if($pos == right, left, null) - if($pos == top, bottom, null) - if($pos == bottom, top, null); -} diff --git a/assets/_sass/bourbon/helpers/_linear-side-corner-parser.scss b/assets/_sass/bourbon/helpers/_linear-side-corner-parser.scss deleted file mode 100644 index 86ad88f..0000000 --- a/assets/_sass/bourbon/helpers/_linear-side-corner-parser.scss +++ /dev/null @@ -1,31 +0,0 @@ -// Private function for linear-gradient-parser -@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) { - $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 ); - $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val)); - $val-3: null; - $has-val-3: str-index($val-2, " "); - - @if $has-val-3 { - $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2)); - $val-2: str-slice($val-2, 0, $has-val-3 - 1); - } - - $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3); - $pos: unquote($pos + ""); - - // Use old spec for webkit - @if $val-1 == "to" { - @return ( - webkit-image: -webkit- + $prefix + $pos + $suffix, - spec-image: $image - ); - } - - // Bring the code up to spec - @else { - @return ( - webkit-image: -webkit- + $image, - spec-image: $prefix + "to " + $pos + $suffix - ); - } -} diff --git a/assets/_sass/bourbon/helpers/_radial-arg-parser.scss b/assets/_sass/bourbon/helpers/_radial-arg-parser.scss deleted file mode 100644 index a3a3704..0000000 --- a/assets/_sass/bourbon/helpers/_radial-arg-parser.scss +++ /dev/null @@ -1,69 +0,0 @@ -@function _radial-arg-parser($G1, $G2, $pos, $shape-size) { - @each $value in $G1, $G2 { - $first-val: nth($value, 1); - $pos-type: type-of($first-val); - $spec-at-index: null; - - // Determine if spec was passed to mixin - @if type-of($value) == list { - $spec-at-index: if(index($value, at), index($value, at), false); - } - @if $spec-at-index { - @if $spec-at-index > 1 { - @for $i from 1 through ($spec-at-index - 1) { - $shape-size: $shape-size nth($value, $i); - } - @for $i from ($spec-at-index + 1) through length($value) { - $pos: $pos nth($value, $i); - } - } - @else if $spec-at-index == 1 { - @for $i from ($spec-at-index + 1) through length($value) { - $pos: $pos nth($value, $i); - } - } - $G1: null; - } - - // If not spec calculate correct values - @else { - @if ($pos-type != color) or ($first-val != "transparent") { - @if ($pos-type == number) - or ($first-val == "center") - or ($first-val == "top") - or ($first-val == "right") - or ($first-val == "bottom") - or ($first-val == "left") { - - $pos: $value; - - @if $pos == $G1 { - $G1: null; - } - } - - @else if - ($first-val == "ellipse") - or ($first-val == "circle") - or ($first-val == "closest-side") - or ($first-val == "closest-corner") - or ($first-val == "farthest-side") - or ($first-val == "farthest-corner") - or ($first-val == "contain") - or ($first-val == "cover") { - - $shape-size: $value; - - @if $value == $G1 { - $G1: null; - } - - @else if $value == $G2 { - $G2: null; - } - } - } - } - } - @return $G1, $G2, $pos, $shape-size; -} diff --git a/assets/_sass/bourbon/helpers/_radial-gradient-parser.scss b/assets/_sass/bourbon/helpers/_radial-gradient-parser.scss deleted file mode 100644 index 6dde50f..0000000 --- a/assets/_sass/bourbon/helpers/_radial-gradient-parser.scss +++ /dev/null @@ -1,50 +0,0 @@ -@function _radial-gradient-parser($image) { - $image: unquote($image); - $gradients: (); - $start: str-index($image, "("); - $end: str-index($image, ","); - $first-val: str-slice($image, $start + 1, $end - 1); - - $prefix: str-slice($image, 0, $start); - $suffix: str-slice($image, $end, str-length($image)); - - $is-spec-syntax: str-index($first-val, "at"); - - @if $is-spec-syntax and $is-spec-syntax > 1 { - $keyword: str-slice($first-val, 1, $is-spec-syntax - 2); - $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); - $pos: append($pos, $keyword, comma); - - $gradients: ( - webkit-image: -webkit- + $prefix + $pos + $suffix, - spec-image: $image - ) - } - - @else if $is-spec-syntax == 1 { - $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); - - $gradients: ( - webkit-image: -webkit- + $prefix + $pos + $suffix, - spec-image: $image - ) - } - - @else if str-index($image, "cover") or str-index($image, "contain") { - @warn "Radial-gradient needs to be updated to conform to latest spec."; - - $gradients: ( - webkit-image: null, - spec-image: $image - ) - } - - @else { - $gradients: ( - webkit-image: -webkit- + $image, - spec-image: $image - ) - } - - @return $gradients; -} diff --git a/assets/_sass/bourbon/helpers/_radial-positions-parser.scss b/assets/_sass/bourbon/helpers/_radial-positions-parser.scss deleted file mode 100644 index 6a5b477..0000000 --- a/assets/_sass/bourbon/helpers/_radial-positions-parser.scss +++ /dev/null @@ -1,18 +0,0 @@ -@function _radial-positions-parser($gradient-pos) { - $shape-size: nth($gradient-pos, 1); - $pos: nth($gradient-pos, 2); - $shape-size-spec: _shape-size-stripper($shape-size); - - $pre-spec: unquote(if($pos, "#{$pos}, ", null)) - unquote(if($shape-size, "#{$shape-size},", null)); - $pos-spec: if($pos, "at #{$pos}", null); - - $spec: "#{$shape-size-spec} #{$pos-spec}"; - - // Add comma - @if ($spec != ' ') { - $spec: "#{$spec}," - } - - @return $pre-spec $spec; -} diff --git a/assets/_sass/bourbon/helpers/_render-gradients.scss b/assets/_sass/bourbon/helpers/_render-gradients.scss deleted file mode 100644 index 5765676..0000000 --- a/assets/_sass/bourbon/helpers/_render-gradients.scss +++ /dev/null @@ -1,26 +0,0 @@ -// User for linear and radial gradients within background-image or border-image properties - -@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) { - $pre-spec: null; - $spec: null; - $vendor-gradients: null; - @if $gradient-type == linear { - @if $gradient-positions { - $pre-spec: nth($gradient-positions, 1); - $spec: nth($gradient-positions, 2); - } - } - @else if $gradient-type == radial { - $pre-spec: nth($gradient-positions, 1); - $spec: nth($gradient-positions, 2); - } - - @if $vendor { - $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients); - } - @else if $vendor == false { - $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})"; - $vendor-gradients: unquote($vendor-gradients); - } - @return $vendor-gradients; -} diff --git a/assets/_sass/bourbon/helpers/_shape-size-stripper.scss b/assets/_sass/bourbon/helpers/_shape-size-stripper.scss deleted file mode 100644 index ee5eda4..0000000 --- a/assets/_sass/bourbon/helpers/_shape-size-stripper.scss +++ /dev/null @@ -1,10 +0,0 @@ -@function _shape-size-stripper($shape-size) { - $shape-size-spec: null; - @each $value in $shape-size { - @if ($value == "cover") or ($value == "contain") { - $value: null; - } - $shape-size-spec: "#{$shape-size-spec} #{$value}"; - } - @return $shape-size-spec; -} diff --git a/assets/_sass/bourbon/helpers/_str-to-num.scss b/assets/_sass/bourbon/helpers/_str-to-num.scss deleted file mode 100644 index b3d6168..0000000 --- a/assets/_sass/bourbon/helpers/_str-to-num.scss +++ /dev/null @@ -1,50 +0,0 @@ -//************************************************************************// -// Helper function for linear/radial-gradient-parsers. -// Source: http://sassmeister.com/gist/9647408 -//************************************************************************// -@function _str-to-num($string) { - // Matrices - $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; - $numbers: 0 1 2 3 4 5 6 7 8 9; - - // Result - $result: 0; - $divider: 0; - $minus: false; - - // Looping through all characters - @for $i from 1 through str-length($string) { - $character: str-slice($string, $i, $i); - $index: index($strings, $character); - - @if $character == '-' { - $minus: true; - } - - @else if $character == '.' { - $divider: 1; - } - - @else { - @if not $index { - $result: if($minus, $result * -1, $result); - @return _convert-units($result, str-slice($string, $i)); - } - - $number: nth($numbers, $index); - - @if $divider == 0 { - $result: $result * 10; - } - - @else { - // Move the decimal dot to the left - $divider: $divider * 10; - $number: $number / $divider; - } - - $result: $result + $number; - } - } - @return if($minus, $result * -1, $result); -} diff --git a/assets/_sass/bourbon/settings/_prefixer.scss b/assets/_sass/bourbon/settings/_prefixer.scss deleted file mode 100644 index ecab49f..0000000 --- a/assets/_sass/bourbon/settings/_prefixer.scss +++ /dev/null @@ -1,6 +0,0 @@ -// Variable settings for /addons/prefixer.scss -$prefix-for-webkit: true !default; -$prefix-for-mozilla: true !default; -$prefix-for-microsoft: true !default; -$prefix-for-opera: true !default; -$prefix-for-spec: true !default; // required for keyframe mixin diff --git a/assets/_sass/bourbon/settings/_px-to-em.scss b/assets/_sass/bourbon/settings/_px-to-em.scss deleted file mode 100644 index f2f9a3e..0000000 --- a/assets/_sass/bourbon/settings/_px-to-em.scss +++ /dev/null @@ -1 +0,0 @@ -$em-base: 16px !default; diff --git a/assets/_sass/neat/_neat-helpers.scss b/assets/_sass/neat/_neat-helpers.scss deleted file mode 100644 index e915c69..0000000 --- a/assets/_sass/neat/_neat-helpers.scss +++ /dev/null @@ -1,7 +0,0 @@ -// Functions -@import "functions/private"; -@import "functions/new-breakpoint"; - -// Settings -@import "settings/grid"; -@import "settings/visual-grid"; diff --git a/assets/_sass/neat/_neat.scss b/assets/_sass/neat/_neat.scss deleted file mode 100644 index e93d636..0000000 --- a/assets/_sass/neat/_neat.scss +++ /dev/null @@ -1,21 +0,0 @@ -// Bourbon Neat 1.6.0.pre -// MIT Licensed -// Copyright (c) 2012-2013 thoughtbot, inc. - -// Helpers -@import "neat-helpers"; - -// Grid -@import "grid/private"; -@import "grid/reset"; -@import "grid/grid"; -@import "grid/omega"; -@import "grid/outer-container"; -@import "grid/span-columns"; -@import "grid/row"; -@import "grid/shift"; -@import "grid/pad"; -@import "grid/fill-parent"; -@import "grid/media"; -@import "grid/to-deprecate"; -@import "grid/visual-grid"; diff --git a/assets/_sass/neat/functions/_new-breakpoint.scss b/assets/_sass/neat/functions/_new-breakpoint.scss deleted file mode 100644 index a89c9ce..0000000 --- a/assets/_sass/neat/functions/_new-breakpoint.scss +++ /dev/null @@ -1,16 +0,0 @@ -@function new-breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) { - - @if length($query) == 1 { - $query: $default-feature nth($query, 1) $total-columns; - } - - @else if length($query) % 2 == 0 { - $query: append($query, $total-columns); - } - - @if not belongs-to($query, $visual-grid-breakpoints) { - $visual-grid-breakpoints: append($visual-grid-breakpoints, $query, comma) !global; - } - - @return $query; -} diff --git a/assets/_sass/neat/functions/_private.scss b/assets/_sass/neat/functions/_private.scss deleted file mode 100644 index 6f03cfc..0000000 --- a/assets/_sass/neat/functions/_private.scss +++ /dev/null @@ -1,125 +0,0 @@ -// Checks if a number is even -@function is-even($int) { - @if $int%2 == 0 { - @return true; - } - - @return false; -} - -// Checks if an element belongs to a list -@function belongs-to($tested-item, $list) { - @each $item in $list { - @if $item == $tested-item { - @return true; - } - } - - @return false; -} - -// Contains display value -@function contains-display-value($query) { - @if belongs-to(table, $query) or belongs-to(block, $query) or belongs-to(inline-block, $query) or belongs-to(inline, $query) { - @return true; - } - - @return false; -} - -// Parses the first argument of span-columns() -@function container-span($span: $span) { - @if length($span) == 3 { - $container-columns: nth($span, 3); - @return $container-columns; - } - - @else if length($span) == 2 { - $container-columns: nth($span, 2); - @return $container-columns; - } - - @else { - @return $grid-columns; - } -} - -@function container-shift($shift: $shift) { - $parent-columns: $grid-columns !global !default; - - @if length($shift) == 3 { - $container-columns: nth($shift, 3); - @return $container-columns; - } - - @else if length($shift) == 2 { - $container-columns: nth($shift, 2); - @return $container-columns; - } - - @else { - @return $parent-columns; - } -} - -// Generates a striped background -@function gradient-stops($grid-columns, $color: $visual-grid-color) { - $transparent: rgba(0,0,0,0); - - $column-width: flex-grid(1, $grid-columns); - $gutter-width: flex-gutter($grid-columns); - $column-offset: $column-width; - - $values: ($transparent 0, $color 0); - - @for $i from 1 to $grid-columns*2 { - @if is-even($i) { - $values: append($values, $transparent $column-offset, comma); - $values: append($values, $color $column-offset, comma); - $column-offset: $column-offset + $column-width; - } - - @else { - $values: append($values, $color $column-offset, comma); - $values: append($values, $transparent $column-offset, comma); - $column-offset: $column-offset + $gutter-width; - } - } - - @return $values; -} - -// Layout direction -@function get-direction($layout, $default) { - $direction: nil; - - @if $layout == LTR or $layout == RTL { - $direction: direction-from-layout($layout); - } @else { - $direction: direction-from-layout($default); - } - - @return $direction; -} - -@function direction-from-layout($layout) { - $direction: nil; - - @if $layout == LTR { - $direction: right; - } @else { - $direction: left; - } - - @return $direction; -} - -@function get-opposite-direction($direction) { - $opposite-direction: left; - - @if $direction == left { - $opposite-direction: right; - } - - @return $opposite-direction; -} diff --git a/assets/_sass/neat/grid/_fill-parent.scss b/assets/_sass/neat/grid/_fill-parent.scss deleted file mode 100644 index 859c977..0000000 --- a/assets/_sass/neat/grid/_fill-parent.scss +++ /dev/null @@ -1,7 +0,0 @@ -@mixin fill-parent() { - width: 100%; - - @if $border-box-sizing == false { - @include box-sizing(border-box); - } -} diff --git a/assets/_sass/neat/grid/_grid.scss b/assets/_sass/neat/grid/_grid.scss deleted file mode 100644 index e074b6c..0000000 --- a/assets/_sass/neat/grid/_grid.scss +++ /dev/null @@ -1,5 +0,0 @@ -@if $border-box-sizing == true { - * { - @include box-sizing(border-box); - } -} diff --git a/assets/_sass/neat/grid/_media.scss b/assets/_sass/neat/grid/_media.scss deleted file mode 100644 index bf27f70..0000000 --- a/assets/_sass/neat/grid/_media.scss +++ /dev/null @@ -1,38 +0,0 @@ -@mixin media($query:$feature $value $columns, $total-columns: $grid-columns) { - @if length($query) == 1 { - @media screen and ($default-feature: nth($query, 1)) { - $default-grid-columns: $grid-columns; - $grid-columns: $total-columns !global; - @content; - $grid-columns: $default-grid-columns !global; - } - } - - @else { - $loopTo: length($query); - $mediaQuery: 'screen and '; - $default-grid-columns: $grid-columns; - $grid-columns: $total-columns !global; - - @if length($query) % 2 != 0 { - $grid-columns: nth($query, $loopTo) !global; - $loopTo: $loopTo - 1; - } - - $i: 1; - @while $i <= $loopTo { - $mediaQuery: $mediaQuery + '(' + nth($query, $i) + ': ' + nth($query, $i + 1) + ') '; - - @if ($i + 1) != $loopTo { - $mediaQuery: $mediaQuery + 'and '; - } - - $i: $i + 2; - } - - @media #{$mediaQuery} { - @content; - $grid-columns: $default-grid-columns !global; - } - } -} diff --git a/assets/_sass/neat/grid/_omega.scss b/assets/_sass/neat/grid/_omega.scss deleted file mode 100644 index c99ed6c..0000000 --- a/assets/_sass/neat/grid/_omega.scss +++ /dev/null @@ -1,61 +0,0 @@ -// Remove last element gutter -@mixin omega($query: block, $direction: default) { - $table: if(belongs-to(table, $query), true, false); - $auto: if(belongs-to(auto, $query), true, false); - - @if $direction != default { - @warn "The omega mixin will no longer take a $direction argument. To change the layout direction, use row($direction) or set $default-layout-direction instead." - } @else { - $direction: get-direction($layout-direction, $default-layout-direction); - } - - @if $table { - @warn "The omega mixin no longer removes padding in table layouts." - } - - @if length($query) == 1 { - @if $auto { - &:last-child { - margin-#{$direction}: 0; - } - } - - @else if contains-display-value($query) and $table == false { - margin-#{$direction}: 0; - } - - @else { - @include nth-child($query, $direction); - } - } - - @else if length($query) == 2 { - @if $auto { - &:last-child { - margin-#{$direction}: 0; - } - } - - @else { - @include nth-child(nth($query, 1), $direction); - } - } - - @else { - @warn "Too many arguments passed to the omega() mixin." - } -} - -@mixin nth-child($query, $direction) { - $opposite-direction: get-opposite-direction($direction); - - &:nth-child(#{$query}) { - margin-#{$direction}: 0; - } - - @if type-of($query) == number { - &:nth-child(#{$query}+1) { - clear: $opposite-direction; - } - } -} diff --git a/assets/_sass/neat/grid/_outer-container.scss b/assets/_sass/neat/grid/_outer-container.scss deleted file mode 100644 index 22c541f..0000000 --- a/assets/_sass/neat/grid/_outer-container.scss +++ /dev/null @@ -1,8 +0,0 @@ -@mixin outer-container { - @include clearfix; - max-width: $max-width; - margin: { - left: auto; - right: auto; - } -} diff --git a/assets/_sass/neat/grid/_pad.scss b/assets/_sass/neat/grid/_pad.scss deleted file mode 100644 index 3ef5d80..0000000 --- a/assets/_sass/neat/grid/_pad.scss +++ /dev/null @@ -1,8 +0,0 @@ -@mixin pad($padding: flex-gutter()) { - $padding-list: null; - @each $value in $padding { - $value: if($value == 'default', flex-gutter(), $value); - $padding-list: join($padding-list, $value); - } - padding: $padding-list; -} diff --git a/assets/_sass/neat/grid/_private.scss b/assets/_sass/neat/grid/_private.scss deleted file mode 100644 index b195336..0000000 --- a/assets/_sass/neat/grid/_private.scss +++ /dev/null @@ -1,43 +0,0 @@ -$parent-columns: $grid-columns !default; -$fg-column: $column; -$fg-gutter: $gutter; -$fg-max-columns: $grid-columns; -$container-display-table: false !default; -$layout-direction: nil !default; - -@function flex-grid($columns, $container-columns: $fg-max-columns) { - $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; - $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; - @return percentage($width / $container-width); -} - -@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { - $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; - @return percentage($gutter / $container-width); -} - -@function grid-width($n) { - @return $n * $gw-column + ($n - 1) * $gw-gutter; -} - -@function get-parent-columns($columns) { - @if $columns != $grid-columns { - $parent-columns: $columns !global; - } @else { - $parent-columns: $grid-columns !global; - } - - @return $parent-columns; -} - -@function is-display-table($container-is-display-table, $display) { - $display-table: false; - - @if $container-is-display-table == true { - $display-table: true; - } @else if $display == table { - $display-table: true; - } - - @return $display-table; -} diff --git a/assets/_sass/neat/grid/_reset.scss b/assets/_sass/neat/grid/_reset.scss deleted file mode 100644 index 496c4a7..0000000 --- a/assets/_sass/neat/grid/_reset.scss +++ /dev/null @@ -1,12 +0,0 @@ -@mixin reset-display { - $container-display-table: false !global; -} - -@mixin reset-layout-direction { - $layout-direction: $default-layout-direction !global; -} - -@mixin reset-all { - @include reset-display; - @include reset-layout-direction; -} diff --git a/assets/_sass/neat/grid/_row.scss b/assets/_sass/neat/grid/_row.scss deleted file mode 100644 index 81da6d3..0000000 --- a/assets/_sass/neat/grid/_row.scss +++ /dev/null @@ -1,17 +0,0 @@ -@mixin row($display: block, $direction: $default-layout-direction) { - @include clearfix; - $layout-direction: $direction !global; - - @if $display == table { - display: table; - @include fill-parent; - table-layout: fixed; - $container-display-table: true !global; - } - - @else { - display: block; - $container-display-table: false !global; - } -} - diff --git a/assets/_sass/neat/grid/_shift.scss b/assets/_sass/neat/grid/_shift.scss deleted file mode 100644 index 1d27b9b..0000000 --- a/assets/_sass/neat/grid/_shift.scss +++ /dev/null @@ -1,16 +0,0 @@ -@mixin shift($n-columns: 1) { - @include shift-in-context($n-columns); -} - -@mixin shift-in-context($shift: $columns of $container-columns) { - $n-columns: nth($shift, 1); - $parent-columns: container-shift($shift) !global; - - $direction: get-direction($layout-direction, $default-layout-direction); - $opposite-direction: get-opposite-direction($direction); - - margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns); - - // Reset nesting context - $parent-columns: $grid-columns !global; -} diff --git a/assets/_sass/neat/grid/_span-columns.scss b/assets/_sass/neat/grid/_span-columns.scss deleted file mode 100644 index c79193d..0000000 --- a/assets/_sass/neat/grid/_span-columns.scss +++ /dev/null @@ -1,43 +0,0 @@ -@mixin span-columns($span: $columns of $container-columns, $display: block) { - $columns: nth($span, 1); - $container-columns: container-span($span); - - // Set nesting context (used by shift()) - $parent-columns: get-parent-columns($container-columns) !global; - - $direction: get-direction($layout-direction, $default-layout-direction); - $opposite-direction: get-opposite-direction($direction); - - $display-table: is-display-table($container-display-table, $display); - - @if $display-table { - display: table-cell; - width: percentage($columns / $container-columns); - } @else { - float: #{$opposite-direction}; - - @if $display != no-display { - display: block; - } - - @if $display == collapse { - @warn "The 'collapse' argument will be deprecated. Use 'block-collapse' instead." - } - - @if $display == collapse or $display == block-collapse { - width: flex-grid($columns, $container-columns) + flex-gutter($container-columns); - - &:last-child { - width: flex-grid($columns, $container-columns); - } - - } @else { - margin-#{$direction}: flex-gutter($container-columns); - width: flex-grid($columns, $container-columns); - - &:last-child { - margin-#{$direction}: 0; - } - } - } -} diff --git a/assets/_sass/neat/grid/_to-deprecate.scss b/assets/_sass/neat/grid/_to-deprecate.scss deleted file mode 100644 index d0a681f..0000000 --- a/assets/_sass/neat/grid/_to-deprecate.scss +++ /dev/null @@ -1,57 +0,0 @@ -@mixin breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) { - @warn "The breakpoint() mixin was renamed to media() in Neat 1.0. Please update your project with the new syntax before the next version bump."; - - @if length($query) == 1 { - @media screen and ($default-feature: nth($query, 1)) { - $default-grid-columns: $grid-columns; - $grid-columns: $total-columns; - @content; - $grid-columns: $default-grid-columns; - } - } - - @else if length($query) == 2 { - @media screen and (nth($query, 1): nth($query, 2)) { - $default-grid-columns: $grid-columns; - $grid-columns: $total-columns; - @content; - $grid-columns: $default-grid-columns; - } - } - - @else if length($query) == 3 { - @media screen and (nth($query, 1): nth($query, 2)) { - $default-grid-columns: $grid-columns; - $grid-columns: nth($query, 3); - @content; - $grid-columns: $default-grid-columns; - } - } - - @else if length($query) == 4 { - @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { - $default-grid-columns: $grid-columns; - $grid-columns: $total-columns; - @content; - $grid-columns: $default-grid-columns; - } - } - - @else if length($query) == 5 { - @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { - $default-grid-columns: $grid-columns; - $grid-columns: nth($query, 5); - @content; - $grid-columns: $default-grid-columns; - } - } - - @else { - @warn "Wrong number of arguments for breakpoint(). Read the documentation for more details."; - } -} - -@mixin nth-omega($nth, $display: block, $direction: default) { - @warn "The nth-omega() mixin is deprecated. Please use omega() instead."; - @include omega($nth $display, $direction); -} diff --git a/assets/_sass/neat/grid/_visual-grid.scss b/assets/_sass/neat/grid/_visual-grid.scss deleted file mode 100644 index 1c822fd..0000000 --- a/assets/_sass/neat/grid/_visual-grid.scss +++ /dev/null @@ -1,41 +0,0 @@ -@mixin grid-column-gradient($values...) { - background-image: deprecated-webkit-gradient(linear, left top, left bottom, $values); - background-image: -webkit-linear-gradient(left, $values); - background-image: -moz-linear-gradient(left, $values); - background-image: -ms-linear-gradient(left, $values); - background-image: -o-linear-gradient(left, $values); - background-image: unquote("linear-gradient(left, #{$values})"); -} - -@if $visual-grid == true or $visual-grid == yes { - body:before { - content: ''; - display: inline-block; - @include grid-column-gradient(gradient-stops($grid-columns)); - height: 100%; - left: 0; - margin: 0 auto; - max-width: $max-width; - opacity: $visual-grid-opacity; - position: fixed; - right: 0; - width: 100%; - pointer-events: none; - - @if $visual-grid-index == back { - z-index: -1; - } - - @else if $visual-grid-index == front { - z-index: 9999; - } - - @each $breakpoint in $visual-grid-breakpoints { - @if $breakpoint != nil { - @include media($breakpoint) { - @include grid-column-gradient(gradient-stops($grid-columns)); - } - } - } - } -} diff --git a/assets/_sass/neat/settings/_grid.scss b/assets/_sass/neat/settings/_grid.scss deleted file mode 100644 index f1dcda4..0000000 --- a/assets/_sass/neat/settings/_grid.scss +++ /dev/null @@ -1,7 +0,0 @@ -$column: golden-ratio(1em, 3) !default; // Column width -$gutter: golden-ratio(1em, 1) !default; // Gutter between each two columns -$grid-columns: 12 !default; // Total number of columns in the grid -$max-width: em(1088) !default; // Max-width of the outer container -$border-box-sizing: true !default; // Makes all elements have a border-box layout -$default-feature: min-width; // Default @media feature for the breakpoint() mixin -$default-layout-direction: LTR !default; diff --git a/assets/_sass/neat/settings/_visual-grid.scss b/assets/_sass/neat/settings/_visual-grid.scss deleted file mode 100644 index 611c2b3..0000000 --- a/assets/_sass/neat/settings/_visual-grid.scss +++ /dev/null @@ -1,5 +0,0 @@ -$visual-grid: false !default; // Display the base grid -$visual-grid-color: #EEE !default; -$visual-grid-index: back !default; // Show grid behind content (back) or overlay it over the content (front) -$visual-grid-opacity: 0.4 !default; -$visual-grid-breakpoints: () !default; diff --git a/assets/_sass/styles.scss b/assets/_sass/styles.scss deleted file mode 100644 index e81f3de..0000000 --- a/assets/_sass/styles.scss +++ /dev/null @@ -1,328 +0,0 @@ -@import "bourbon/bourbon"; -@import "neat/neat"; - -// Colors -$header: #153E56; -$white: #ffffff; -$mid-gray: #75787b; -$border-gray: #babbbd; -$link: #0072ce; -$link-active: #002d72; -$link-hover: #7eb8dd; - -$header-height: 80px; -$header-height-mobile: 65px; - -// Fonts -$serif: "Merriweather", "Georgia", "Times New Roman", serif; -$sans-serif: "Open Sans", Arial, sans-serif; - -// Mobile Breakpoints -$mobile: new-breakpoint(min-width 0px max-width 640px 4); -$slimmer: new-breakpoint(min-width 641px max-width 980px 12); - -/** more normalize **/ - -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -html, body { - height: 100%; -} - -/* -Typography -================================== -*/ - -body { - font-family: $serif; - font-weight: 400; - font-style: normal; - line-height: 1.9em; -} - -header h1 { - font-family: $serif; - font-weight: normal; -} - -h1, h2, h3, h4, h5, h6 { - font-family: $sans-serif; -} - -h1 { - margin-top: 0.8em; - margin-bottom: 1em; - font-size: 24pt; - line-height: 1.3em; -} - -h2, h3, h4, h5, h6 { - margin-top: 2.0em; - line-height: 1.2em; -} - -h2:before, h3:before, h4:before, h5:before, h6:before { - content: ''; - display: block; position: relative; - width: 0; height: 4.6em; - margin-top: -4.6em; -} - -/** Overall structure, desktop and mobile */ - -header { - background-color: $header; - padding: 1.3em; - color: $white; - - position: fixed; - height: $header-height; - width: 100%; - - h1 { - margin: 0; - font-size: 26pt; - } - - h1 a, - h1 a:link, - h1 a:visited { - color: $white; - border-bottom: 0px; - } - - h1 a:hover { - border-bottom: 1px solid #fff; - } -} - -aside { - @include span-columns(3.25); - margin-top: $header-height; -} - -article { - @include shift(0.25); - @include span-columns(8); - margin-bottom: 20px; - margin-top: $header-height; -} - -@media screen and (max-width: 600px) { - - header { - padding: 20px 10px; - height: $header-height-mobile; - h1 { - font-size: 18pt; - } - } - - aside { - @include span-columns(12); - margin-top: $header-height-mobile; - } - - article { - @include span-columns(12); - padding-left: 5px; - padding-right: 10px; - margin-top: 0px; - } - -} - -@media screen and (max-width: 320px) { - header { - h1 { - font-size: 16pt; - } - } -} - -/* todo: errrr */ -img {width: 700px;} - - -/* Lists */ - -article ul { - padding-left: 1.1em; -} - -article li { - margin-bottom: 1em; -} - -li h3, -li h4 { - margin: 0; -} - -li p { - margin-top: 0; -} - -ul > li > ul { - margin-top: 10px; -} - - -/* Navigation */ - -aside { - - p { - padding-left: 15px; - } - - .sidebar-nav a { - display: block; - padding: 10px; - -webkit-transition: .4s; - transition: .4s; - } - .sidebar-nav a, - .sidebar-nav a:link, - .sidebar-nav a:visited { - border-bottom: none; - color: $mid-gray; - } - - .sidebar-nav li:hover, - .sidebar-nav .sidebar-nav-active { - color: $mid-gray; - border-left: 5px solid $header; - background-color: transparent; - border-bottom: 1px solid $border-gray; - padding-left: 0; - } - .sidebar-nav ul { - margin: 0; - padding: 0; - } - .sidebar-nav li { - list-style: none; - border-bottom: 1px solid $border-gray; - font-size: 1.125em; - padding-left: 5px; - } - .sidebar-nav li:last-child { - border-bottom: none; - } - -} - - - -p > code, li > code { - padding: 2px 4px; - background-color: #eaeaff; - border: 1px solid #d5d5d5; - font-size: 10pt; - font-family: monospace; -} - -pre { - max-width: 100%; - font-size: 0.875em; - overflow-y: scroll; - background-color: #f1f2f2; - padding: 10px; -} - - -/* Links */ - -/* for hover effects */ -a { - -webkit-transition: .2s; - -moz-transition: .2s; - transition: .2s; -} - -a, -a:link, -a:visited { - color: $link; - border-bottom: 1px dotted $link; - text-decoration: none; -} - -a:hover { - border-bottom: 1px solid $link-hover; - color: $link-hover; - text-decoration: none; -} - -a:active { - border-bottom: 1px solid $link; - color: $link-active; - text-decoration: none; -} - -a:focus { - border-bottom: 1px solid $link; - color: $link; - outline: thin dotted; - text-decoration: none; -} - -a.skip-link { - color: $link; - border-bottom: none; - padding: .25em; -} - -a.skip-link:hover, -a.skip-link:active, -a.skip-link:focus { - background-color: $link; - color: $white; - border-bottom: none; -} - - -/* Helpers */ - -/* Hide from both screenreaders and browsers: h5bp.com/u */ -.hidden { - display: none !important; - visibility: hidden; -} - -/* Hide only visually, but have it available for screenreaders: h5bp.com/v */ -.visuallyhidden { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -/* Extends the .visuallyhidden class to allow the element to be focusable - * when navigated to via the keyboard: h5bp.com/p */ -.visuallyhidden.focusable:active, -.visuallyhidden.focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; -} - -/* Hide visually and from screenreaders, but maintain layout */ -.invisible { - visibility: hidden; -} diff --git a/assets/css/google-fonts.css b/assets/css/google-fonts.css deleted file mode 100644 index 2cc3e76..0000000 --- a/assets/css/google-fonts.css +++ /dev/null @@ -1,77 +0,0 @@ -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 300; - src: local("Merriweather Light"), - local("Merriweather-Light"), - url("data:application/x-font-woff;base64,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") format("woff"), - url("../fonts/merriweather-69bd3f15962cf91348a133d3d38571a5c67eca65.ttf") format("truetype"); -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 400; - /* IE6-8 compat */ - src: url("../fonts/merriweather-006a72f9b37d353a87e0a853c811c2036304cd53.eot"); - src: local("Merriweather"), - url("data:application/x-font-woff;base64,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") format("woff"), - url("../fonts/merriweather-956aa75249c84b5fcee1c10527af21a83eb780b5.svg#Merriweather") format("svg"), - url("../fonts/merriweather-006a72f9b37d353a87e0a853c811c2036304cd53.eot") format("embedded-opentype"), - url("../fonts/merriweather-d392237948e74246a2fb0d0d886498776a185e54.ttf") format("truetype"); -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 700; - src: local("Merriweather Bold"), - local("Merriweather-Bold"), - url("data:application/x-font-woff;base64,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") format("woff"), - url("../fonts/merriweather-e6d0ffb2d0348d9e22de97e57214b7db795e9513.ttf") format("truetype"); -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 300; - src: local("Open Sans Light"), - local("OpenSans-Light"), - url("data:application/x-font-woff;base64,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") format("woff"), - url("../fonts/opensans-23a898729b3a62cb5f7e5a8367d375a1784700ca.ttf") format("truetype"); -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - /* IE6-8 compat */ - src: url("../fonts/opensans-f0cc9c782f41b44a31392230103f5b4e101a944a.eot"); - src: local("Open Sans"), - local("OpenSans"), - url("data:application/x-font-woff;base64,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") format("woff"), - url("../fonts/opensans-d4d19ed3a763ce10e050662542bc0318bb620096.svg#OpenSans") format("svg"), - url("../fonts/opensans-f0cc9c782f41b44a31392230103f5b4e101a944a.eot") format("embedded-opentype"), - url("../fonts/opensans-3e193feab52524db86cd1508693f2e5086102669.ttf") format("truetype"); -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 600; - src: local("Open Sans Semibold"), - local("OpenSans-Semibold"), - url("data:application/x-font-woff;base64,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") format("woff"), - url("../fonts/opensans-dd44beeac9a044f2c478b70838e447f0af077825.ttf") format("truetype"); -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 700; - src: local("Open Sans Bold"), - local("OpenSans-Bold"), - url("data:application/x-font-woff;base64,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") format("woff"), - url("../fonts/opensans-3954f1cc512d376e366c33802aecc5e80c1a1f33.ttf") format("truetype"); -} - diff --git a/assets/css/normalize.css b/assets/css/normalize.css deleted file mode 100644 index 562891a..0000000 --- a/assets/css/normalize.css +++ /dev/null @@ -1,406 +0,0 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ - -/* ========================================================================== - HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined in IE 8/9. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -/** - * Correct `inline-block` display not defined in IE 8/9. - */ - -audio, -canvas, -video { - display: inline-block; -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* ========================================================================== - Base - ========================================================================== */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* ========================================================================== - Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background: transparent; -} - -/** - * Address `outline` inconsistency between Chrome and other browsers. - */ - -a:focus { - outline: thin dotted; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* ========================================================================== - Typography - ========================================================================== */ - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari 5, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9, Safari 5, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari 5 and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Correct font family set oddly in Safari 5 and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -/** - * Improve readability of pre-formatted text in all browsers. - */ - -pre { - white-space: pre-wrap; -} - -/** - * Set consistent quote types. - */ - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* ========================================================================== - Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9. - */ - -img { - border: 0; -} - -/** - * Correct overflow displayed oddly in IE 9. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* ========================================================================== - Figures - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari 5. - */ - -figure { - margin: 0; -} - -/* ========================================================================== - Forms - ========================================================================== */ - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Correct font family not being inherited in all browsers. - * 2. Correct font size not being inherited in all browsers. - * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. - */ - -button, -input, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -button, -input { - line-height: normal; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. - * Correct `select` style inheritance in Firefox 4+ and Opera. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * 1. Remove default vertical scrollbar in IE 8/9. - * 2. Improve readability and alignment in all browsers. - */ - -textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ -} - -/* ========================================================================== - Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} \ No newline at end of file diff --git a/assets/css/styles.css b/assets/css/styles.css deleted file mode 100644 index 7d0d63f..0000000 --- a/assets/css/styles.css +++ /dev/null @@ -1,260 +0,0 @@ -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -/** more normalize **/ -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -html, body { - height: 100%; } - -/* -Typography -================================== -*/ -body { - font-family: "Merriweather", "Georgia", "Times New Roman", serif; - font-weight: 400; - font-style: normal; - line-height: 1.9em; } - -header h1 { - font-family: "Merriweather", "Georgia", "Times New Roman", serif; - font-weight: normal; } - -h1, h2, h3, h4, h5, h6 { - font-family: "Open Sans", Arial, sans-serif; } - -h1 { - margin-top: 0.8em; - margin-bottom: 1em; - font-size: 24pt; - line-height: 1.3em; } - -h2, h3, h4, h5, h6 { - margin-top: 2.0em; - line-height: 1.2em; } - -h2:before, h3:before, h4:before, h5:before, h6:before { - content: ''; - display: block; - position: relative; - width: 0; - height: 4.6em; - margin-top: -4.6em; } - -/** Overall structure, desktop and mobile */ -header { - background-color: #153E56; - padding: 1.3em; - color: #ffffff; - position: fixed; - height: 80px; - width: 100%; } - header h1 { - margin: 0; - font-size: 26pt; } - header h1 a, - header h1 a:link, - header h1 a:visited { - color: #ffffff; - border-bottom: 0px; } - header h1 a:hover { - border-bottom: 1px solid #fff; } - -aside { - float: left; - display: block; - margin-right: 2.35765%; - width: 25.36421%; - margin-top: 80px; } - aside:last-child { - margin-right: 0; } - -article { - margin-left: 2.13245%; - float: left; - display: block; - margin-right: 2.35765%; - width: 65.88078%; - margin-bottom: 20px; - margin-top: 80px; } - article:last-child { - margin-right: 0; } - -@media screen and (max-width: 600px) { - header { - padding: 20px 10px; - height: 65px; } - header h1 { - font-size: 18pt; } - - aside { - float: left; - display: block; - margin-right: 2.35765%; - width: 100%; - margin-top: 65px; } - aside:last-child { - margin-right: 0; } - - article { - float: left; - display: block; - margin-right: 2.35765%; - width: 100%; - padding-left: 5px; - padding-right: 10px; - margin-top: 0px; } - article:last-child { - margin-right: 0; } } -@media screen and (max-width: 320px) { - header h1 { - font-size: 16pt; } } -/* todo: errrr */ -img { - width: 700px; } - -/* Lists */ -article ul { - padding-left: 1.1em; } - -article li { - margin-bottom: 1em; } - -li h3, -li h4 { - margin: 0; } - -li p { - margin-top: 0; } - -ul > li > ul { - margin-top: 10px; } - -/* Navigation */ -aside p { - padding-left: 15px; } -aside .sidebar-nav a { - display: block; - padding: 10px; - -webkit-transition: .4s; - transition: .4s; } -aside .sidebar-nav a, -aside .sidebar-nav a:link, -aside .sidebar-nav a:visited { - border-bottom: none; - color: #75787b; } -aside .sidebar-nav li:hover, -aside .sidebar-nav .sidebar-nav-active { - color: #75787b; - border-left: 5px solid #153E56; - background-color: transparent; - border-bottom: 1px solid #babbbd; - padding-left: 0; } -aside .sidebar-nav ul { - margin: 0; - padding: 0; } -aside .sidebar-nav li { - list-style: none; - border-bottom: 1px solid #babbbd; - font-size: 1.125em; - padding-left: 5px; } -aside .sidebar-nav li:last-child { - border-bottom: none; } - -p > code, li > code { - padding: 2px 4px; - background-color: #eaeaff; - border: 1px solid #d5d5d5; - font-size: 10pt; - font-family: monospace; } - -pre { - max-width: 100%; - font-size: 0.875em; - overflow-y: scroll; - background-color: #f1f2f2; - padding: 10px; } - -/* Links */ -/* for hover effects */ -a { - -webkit-transition: .2s; - -moz-transition: .2s; - transition: .2s; } - -a, -a:link, -a:visited { - color: #0072ce; - border-bottom: 1px dotted #0072ce; - text-decoration: none; } - -a:hover { - border-bottom: 1px solid #7eb8dd; - color: #7eb8dd; - text-decoration: none; } - -a:active { - border-bottom: 1px solid #0072ce; - color: #002d72; - text-decoration: none; } - -a:focus { - border-bottom: 1px solid #0072ce; - color: #0072ce; - outline: thin dotted; - text-decoration: none; } - -a.skip-link { - color: #0072ce; - border-bottom: none; - padding: .25em; } - -a.skip-link:hover, -a.skip-link:active, -a.skip-link:focus { - background-color: #0072ce; - color: #ffffff; - border-bottom: none; } - -/* Helpers */ -/* Hide from both screenreaders and browsers: h5bp.com/u */ -.hidden { - display: none !important; - visibility: hidden; } - -/* Hide only visually, but have it available for screenreaders: h5bp.com/v */ -.visuallyhidden { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; } - -/* Extends the .visuallyhidden class to allow the element to be focusable - * when navigated to via the keyboard: h5bp.com/p */ -.visuallyhidden.focusable:active, -.visuallyhidden.focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; } - -/* Hide visually and from screenreaders, but maintain layout */ -.invisible { - visibility: hidden; } - -/*# sourceMappingURL=styles.css.map */ diff --git a/assets/css/styles.css.map b/assets/css/styles.css.map deleted file mode 100644 index 346c2d0..0000000 --- a/assets/css/styles.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "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", -"sources": ["../_sass/neat/grid/_grid.scss","../_sass/bourbon/addons/_prefixer.scss","../_sass/styles.scss","../_sass/neat/grid/_span-columns.scss","../_sass/neat/grid/_shift.scss"], -"names": [], -"file": "styles.css" -} \ No newline at end of file diff --git a/assets/css/syntax.css b/assets/css/syntax.css deleted file mode 100644 index 2774b76..0000000 --- a/assets/css/syntax.css +++ /dev/null @@ -1,60 +0,0 @@ -.highlight { background: #ffffff; } -.highlight .c { color: #999988; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .k { font-weight: bold } /* Keyword */ -.highlight .o { font-weight: bold } /* Operator */ -.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ -.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ -.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #aa0000 } /* Generic.Error */ -.highlight .gh { color: #999999 } /* Generic.Heading */ -.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ -.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #555555 } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ -.highlight .gt { color: #aa0000 } /* Generic.Traceback */ -.highlight .kc { font-weight: bold } /* Keyword.Constant */ -.highlight .kd { font-weight: bold } /* Keyword.Declaration */ -.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #009999 } /* Literal.Number */ -.highlight .s { color: #d14 } /* Literal.String */ -.highlight .na { color: #008080 } /* Name.Attribute */ -.highlight .nb { color: #0086B3 } /* Name.Builtin */ -.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ -.highlight .no { color: #008080 } /* Name.Constant */ -.highlight .ni { color: #800080 } /* Name.Entity */ -.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ -.highlight .nn { color: #555555 } /* Name.Namespace */ -.highlight .nt { color: #000080 } /* Name.Tag */ -.highlight .nv { color: #008080 } /* Name.Variable */ -.highlight .ow { font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #009999 } /* Literal.Number.Float */ -.highlight .mh { color: #009999 } /* Literal.Number.Hex */ -.highlight .mi { color: #009999 } /* Literal.Number.Integer */ -.highlight .mo { color: #009999 } /* Literal.Number.Oct */ -.highlight .sb { color: #d14 } /* Literal.String.Backtick */ -.highlight .sc { color: #d14 } /* Literal.String.Char */ -.highlight .sd { color: #d14 } /* Literal.String.Doc */ -.highlight .s2 { color: #d14 } /* Literal.String.Double */ -.highlight .se { color: #d14 } /* Literal.String.Escape */ -.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ -.highlight .si { color: #d14 } /* Literal.String.Interpol */ -.highlight .sx { color: #d14 } /* Literal.String.Other */ -.highlight .sr { color: #009926 } /* Literal.String.Regex */ -.highlight .s1 { color: #d14 } /* Literal.String.Single */ -.highlight .ss { color: #990073 } /* Literal.String.Symbol */ -.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #008080 } /* Name.Variable.Class */ -.highlight .vg { color: #008080 } /* Name.Variable.Global */ -.highlight .vi { color: #008080 } /* Name.Variable.Instance */ -.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/assets/favicon.ico b/assets/favicon.ico deleted file mode 100644 index 4333e86..0000000 Binary files a/assets/favicon.ico and /dev/null differ diff --git a/assets/fonts/merriweather-006a72f9b37d353a87e0a853c811c2036304cd53.eot b/assets/fonts/merriweather-006a72f9b37d353a87e0a853c811c2036304cd53.eot deleted file mode 100644 index 32b479e..0000000 Binary files a/assets/fonts/merriweather-006a72f9b37d353a87e0a853c811c2036304cd53.eot and /dev/null differ diff --git a/assets/fonts/merriweather-69bd3f15962cf91348a133d3d38571a5c67eca65.ttf b/assets/fonts/merriweather-69bd3f15962cf91348a133d3d38571a5c67eca65.ttf deleted file mode 100644 index 5665aea..0000000 Binary files a/assets/fonts/merriweather-69bd3f15962cf91348a133d3d38571a5c67eca65.ttf and /dev/null differ diff --git a/assets/fonts/merriweather-956aa75249c84b5fcee1c10527af21a83eb780b5.svg b/assets/fonts/merriweather-956aa75249c84b5fcee1c10527af21a83eb780b5.svg deleted file mode 100644 index 6fa055a..0000000 --- a/assets/fonts/merriweather-956aa75249c84b5fcee1c10527af21a83eb780b5.svg +++ /dev/null @@ -1,461 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/fonts/merriweather-d392237948e74246a2fb0d0d886498776a185e54.ttf b/assets/fonts/merriweather-d392237948e74246a2fb0d0d886498776a185e54.ttf deleted file mode 100644 index d89a2ff..0000000 Binary files a/assets/fonts/merriweather-d392237948e74246a2fb0d0d886498776a185e54.ttf and /dev/null differ diff --git a/assets/fonts/merriweather-e6d0ffb2d0348d9e22de97e57214b7db795e9513.ttf b/assets/fonts/merriweather-e6d0ffb2d0348d9e22de97e57214b7db795e9513.ttf deleted file mode 100644 index d29a1aa..0000000 Binary files a/assets/fonts/merriweather-e6d0ffb2d0348d9e22de97e57214b7db795e9513.ttf and /dev/null differ diff --git a/assets/fonts/opensans-23a898729b3a62cb5f7e5a8367d375a1784700ca.ttf b/assets/fonts/opensans-23a898729b3a62cb5f7e5a8367d375a1784700ca.ttf deleted file mode 100644 index 0012a52..0000000 Binary files a/assets/fonts/opensans-23a898729b3a62cb5f7e5a8367d375a1784700ca.ttf and /dev/null differ diff --git a/assets/fonts/opensans-3954f1cc512d376e366c33802aecc5e80c1a1f33.ttf b/assets/fonts/opensans-3954f1cc512d376e366c33802aecc5e80c1a1f33.ttf deleted file mode 100644 index 1460061..0000000 Binary files a/assets/fonts/opensans-3954f1cc512d376e366c33802aecc5e80c1a1f33.ttf and /dev/null differ diff --git a/assets/fonts/opensans-3e193feab52524db86cd1508693f2e5086102669.ttf b/assets/fonts/opensans-3e193feab52524db86cd1508693f2e5086102669.ttf deleted file mode 100644 index c122ce4..0000000 Binary files a/assets/fonts/opensans-3e193feab52524db86cd1508693f2e5086102669.ttf and /dev/null differ diff --git a/assets/fonts/opensans-d4d19ed3a763ce10e050662542bc0318bb620096.svg b/assets/fonts/opensans-d4d19ed3a763ce10e050662542bc0318bb620096.svg deleted file mode 100644 index 052c59f..0000000 --- a/assets/fonts/opensans-d4d19ed3a763ce10e050662542bc0318bb620096.svg +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/fonts/opensans-dd44beeac9a044f2c478b70838e447f0af077825.ttf b/assets/fonts/opensans-dd44beeac9a044f2c478b70838e447f0af077825.ttf deleted file mode 100644 index 47d538a..0000000 Binary files a/assets/fonts/opensans-dd44beeac9a044f2c478b70838e447f0af077825.ttf and /dev/null differ diff --git a/assets/fonts/opensans-f0cc9c782f41b44a31392230103f5b4e101a944a.eot b/assets/fonts/opensans-f0cc9c782f41b44a31392230103f5b4e101a944a.eot deleted file mode 100644 index 1d98e6e..0000000 Binary files a/assets/fonts/opensans-f0cc9c782f41b44a31392230103f5b4e101a944a.eot and /dev/null differ diff --git a/assets/js/Universal-Federated-Analytics-Min.js b/assets/js/Universal-Federated-Analytics-Min.js deleted file mode 100644 index e91bc6a..0000000 --- a/assets/js/Universal-Federated-Analytics-Min.js +++ /dev/null @@ -1,218 +0,0 @@ -/* - .ooooo. ooo. .oo. .ooooo. oooo d8b - d88" `88b `888P"Y88b d88" `88b `888""8P - 888888888 88888 888 888 888 888 888 - 888 88888 888 888 888 888 888 - `"88888" o888o o888o `Y8bod8P" d888b - -*********************************************************************************************************** -Copyright 2015 by E-Nor Inc. -Universal Federated Analytics: Google Analytics Government Wide Site Usage Measurement. -05/19/2015 Version: 2.01 -***********************************************************************************************************/ - -var oCONFIG={GWT_UAID:['UA-33523145-1'],FORCE_SSL:true,ANONYMIZE_IP:true,AGENCY:'',SUB_AGENCY:'',VERSION:'20150519 v2.01 - Universal Analytics',USE_MAIN_CUSTOM_DIMENSIONS:true,MAIN_AGENCY_CUSTOM_DIMENSION_SLOT:'dimension1',MAIN_SUBAGENCY_CUSTOM_DIMENSION_SLOT:'dimension2',MAIN_CODEVERSION_CUSTOM_DIMENSION_SLOT:'dimension3',USE_PARALLEL_CUSTOM_DIMENSIONS:false,PARALLEL_AGENCY_CUSTOM_DIMENSION_SLOT:'dimension1',PARALLEL_SUBAGENCY_CUSTOM_DIMENSION_SLOT:'dimension2',PARALLEL_CODEVERSION_CUSTOM_DIMENSION_SLOT:'dimension3',COOKIE_DOMAIN:location.hostname.replace('www.','').toLowerCase(),COOKIE_TIMEOUT:60*60*24*2*365,SEARCH_PARAMS:'q|querytext|nasaInclude|k|qt',YOUTUBE:false,AUTOTRACKER:true,EXTS:'doc|docx|xls|xlsx|xlsm|ppt|pptx|exe|zip|pdf|js|txt|csv|dxf|dwgd|rfa|rvt|dwfx|dwg|wmv|jpg|msi|7z|gz|tgz|wma|mov|avi|mp3|mp4|csv|mobi|epub|swf|rar',SUBDOMAIN_BASED:true,DOUNBLECLICK_LINK:false,ENHANCED_LINK:false,OPTOUT_PAGE:false,PUA_NAME:'GSA_ENOR'};function _onEveryPage(){_updateConfig();_defineCookieDomain();_defineAgencyCDsValues();} -_onEveryPage();function _defineCookieDomain() -{var domainPattern=/(([^.\/]+\.[^.\/]{2,3}\.[^.\/]{2})|(([^.\/]+\.)[^.\/]{2,4}))(\/.*)?$/;if(domainPattern.test(oCONFIG.SUBDOMAIN_BASED.toString())) -{oCONFIG.COOKIE_DOMAIN=oCONFIG.SUBDOMAIN_BASED.toLowerCase().replace('www.','');oCONFIG.SUBDOMAIN_BASED=true;} -else -{if(oCONFIG.SUBDOMAIN_BASED.toString()=='false') -{oCONFIG.COOKIE_DOMAIN=document.location.hostname.match(/(([^.\/]+\.[^.\/]{2,3}\.[^.\/]{2})|(([^.\/]+\.)[^.\/]{2,4}))(\/.*)?$/)[1];oCONFIG.SUBDOMAIN_BASED=true;} -else if(oCONFIG.SUBDOMAIN_BASED.toString()=='auto'||oCONFIG.SUBDOMAIN_BASED=='true') -{oCONFIG.COOKIE_DOMAIN=location.hostname.toLowerCase().replace('www.','');oCONFIG.SUBDOMAIN_BASED=false;} -else -{oCONFIG.COOKIE_DOMAIN=location.hostname.toLowerCase().replace('www.','');oCONFIG.SUBDOMAIN_BASED=false;}}} -function _defineAgencyCDsValues() -{oCONFIG.AGENCY=oCONFIG.AGENCY||'unspecified:'+oCONFIG.COOKIE_DOMAIN;oCONFIG.SUB_AGENCY=oCONFIG.SUB_AGENCY||(''+oCONFIG.COOKIE_DOMAIN);oCONFIG.SUB_AGENCY=oCONFIG.AGENCY+' - '+oCONFIG.SUB_AGENCY;} -function _cleanBooleanParam(_paramValue){switch(_paramValue.toString().toLowerCase()){case'true':case'on':case'yes':case'1':return'true';case'false':case'off':case'no':case'0':return'false';default:return _paramValue;}} -function _isValidUANum(_UANumber){_UANumber=_UANumber.toLowerCase();var _regEx=/^ua\-([0-9]+)\-[0-9]+$/;var match=_UANumber.match(_regEx);return(match!=null&&match.length>0);} -function _cleanDimensionValue(_paramValue){try{pattern=/^dimension([1-9]|[1-9][0-9]|1([0-9][0-9])|200)$/;if(pattern.test(_paramValue)) -return _paramValue;var _tmpValue='dimension'+_paramValue.match(/\d+$/g)[0];if(pattern.test(_tmpValue)) -return _tmpValue;return'';}catch(err){}} -function _updateConfig(){var _JSElement=document.getElementById('_fed_an_ua_tag').getAttribute('src');_JSElement=_JSElement.replace(/\?/g,'&');var _paramList=_JSElement.split('&');for(var i=1;i<_paramList.length;i++){_keyValuePair=_paramList[i].toLowerCase();_key=_keyValuePair.split('=')[0];_value=_keyValuePair.split('=')[1];switch(_key){case'pua':var _UAList=_value.split(',');for(var j=0;j<_UAList.length;j++) -if(_isValidUANum(_UAList[j])) -oCONFIG.GWT_UAID.push(_UAList[j].toUpperCase());break;case'agency':oCONFIG.AGENCY=_value.toUpperCase();break;case'subagency':oCONFIG.SUB_AGENCY=_value.toUpperCase();break;case'maincd':_value=_cleanBooleanParam(_value);if('true'==_value||'false'==_value) -oCONFIG.USE_MAIN_CUSTOM_DIMENSIONS=_value;break;case'fedagencydim':_value=_cleanDimensionValue(_value);if(''!=_value) -oCONFIG.MAIN_AGENCY_CUSTOM_DIMENSION_SLOT=_value.toLowerCase();break;case'fedsubagencydim':_value=_cleanDimensionValue(_value);if(''!=_value) -oCONFIG.MAIN_SUBAGENCY_CUSTOM_DIMENSION_SLOT=_value.toLowerCase();break;case'fedversiondim':_value=_cleanDimensionValue(_value);if(''!=_value) -oCONFIG.MAIN_CODEVERSION_CUSTOM_DIMENSION_SLOT=_value.toLowerCase();break;case'parallelcd':_value=_cleanBooleanParam(_value);if('true'==_value||'false'==_value) -oCONFIG.USE_PARALLEL_CUSTOM_DIMENSIONS=_value;break;case'palagencydim':_value=_cleanDimensionValue(_value);if(''!=_value) -oCONFIG.PARALLEL_AGENCY_CUSTOM_DIMENSION_SLOT=_value.toLowerCase();break;case'palsubagencydim':_value=_cleanDimensionValue(_value);if(''!=_value) -oCONFIG.PARALLEL_SUBAGENCY_CUSTOM_DIMENSION_SLOT=_value.toLowerCase();break;case'palversiondim':_value=_cleanDimensionValue(_value);if(''!=_value) -oCONFIG.PARALLEL_CODEVERSION_CUSTOM_DIMENSION_SLOT=_value.toLowerCase();break;case'cto':oCONFIG.COOKIE_TIMEOUT=parseInt(_value)*2628000;break;case'sp':oCONFIG.SEARCH_PARAMS+='|'+_value.replace(/,/g,'|');break;case'exts':oCONFIG.EXTS+='|'+_value.replace(/,/g,'|');break;case'yt':_value=_cleanBooleanParam(_value);if('true'==_value||'false'==_value) -oCONFIG.YOUTUBE=_value;break;case'autotracker':_value=_cleanBooleanParam(_value);if('true'==_value||'false'==_value) -oCONFIG.AUTOTRACKER=_value;break;case'sdor':oCONFIG.SUBDOMAIN_BASED=_cleanBooleanParam(_value);break;case'dclink':_value=_cleanBooleanParam(_value);if('true'==_value||'false'==_value) -oCONFIG.DOUNBLECLICK_LINK=_value;break;case'enhlink':_value=_cleanBooleanParam(_value);if('true'==_value||'false'==_value) -oCONFIG.ENHANCED_LINK=_value;break;case'optout':_value=_cleanBooleanParam(_value);if('true'==_value||'false'==_value) -oCONFIG.OPTOUT_PAGE=_value;break;default:break;}}} -function _sendCustomDimensions(_slotNums,_val) -{if(_slotNums.length>0&&_val!=''&&_val!=undefined) -{if(tObjectCheck!=window['GoogleAnalyticsObject']) -{createTracker(false);} -for(var i=0;i0&&_val!=''&&_val!=undefined) -{if(tObjectCheck!=window['GoogleAnalyticsObject']) -{createTracker(false);} -for(var i=0;i0) -{_sendCustomDimensions(cdsArr,((_param1!=undefined)?_param1:''));}} -catch(err) -{}} -else if(_hitType.toLowerCase().indexOf('metric')!=-1) -{try -{var mtrcsTmpArr=_hitType.toLowerCase().split(',');var mtrcsArr=[];mtrcsPattern=/^metric([1-9]|[1-9][0-9]|1([0-9][0-9])|200)$/;for(var ixx=0;ixx0) -{_sendCustomMetrics(mtrcsArr,((_param1!=''||_param1!=undefined||!isNaN(_param1))?parseFloat(_param1):1));}} -catch(err) -{}}}} -function _URIHandler(pageName){var re=new RegExp('([?&])('+oCONFIG.SEARCH_PARAMS+')(=[^&]*)','i');if(re.test(pageName)){pageName=pageName.replace(re,'$1query$3');} -return pageName;} -var tObjectCheck;if(typeof window['GoogleAnalyticsObject']=='undefined') -{(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');tObjectCheck=window['GoogleAnalyticsObject'];} -else -{tObjectCheck=window['GoogleAnalyticsObject'];} -createTracker(true);function createTracker(sendPv) -{for(var dpv=0;dpv0){window[window['GoogleAnalyticsObject']](oCONFIG.PUA_NAME+dpv+'.set',oCONFIG.PARALLEL_AGENCY_CUSTOM_DIMENSION_SLOT,oCONFIG.AGENCY);window[window['GoogleAnalyticsObject']](oCONFIG.PUA_NAME+dpv+'.set',oCONFIG.PARALLEL_SUBAGENCY_CUSTOM_DIMENSION_SLOT,oCONFIG.SUB_AGENCY);window[window['GoogleAnalyticsObject']](oCONFIG.PUA_NAME+dpv+'.set',oCONFIG.PARALLEL_CODEVERSION_CUSTOM_DIMENSION_SLOT,oCONFIG.VERSION);} -if(document.title.search(/404|not found/i)!==-1) -{var vpv404='/vpv404/'+_adjPageUri;_adjPageUri=vpv404.replace(/\/\//g,'/')+'/'+document.referrer;} -if(sendPv) -{window[window['GoogleAnalyticsObject']](oCONFIG.PUA_NAME+dpv+'.send','pageview',_adjPageUri);}}} -function _initAutoTracker() -{var mainDomain=oCONFIG.COOKIE_DOMAIN;var extDoc=oCONFIG.EXTS.split("|");var arr=document.getElementsByTagName("a");for(i=0;i0&&precentage<=33&&_f33==false){_sendEvent('YouTube Video','33%',videoURL,0);}else if(precentage>0&&precentage<=66&&_f66==false){_sendEvent('YouTube Video','66%',videoURL,0);}else if(precentage>0&&precentage<=90&&_f90==false){_sendEvent('YouTube Video','90%',videoURL,0);}}}}} -function _initIdAssigner(){var _allDocLinks=document.getElementsByTagName('a');for(var sid=0;sid<_allDocLinks.length;sid++){var currentId=_allDocLinks[sid].getAttribute('id');if(currentId==null||currentId==''||currentId==undefined){_allDocLinks[sid].setAttribute('id','anch_'+sid);}}} -function _tagClicks(evObj,evCat,evAct,evLbl,evVal) -{if(evObj.addEventListener) -{evObj.addEventListener('mousedown',function(){_sendEvent(evCat,evAct,evLbl,evVal);});} -else if(evObj.attachEvent) -{evObj.attachEvent('onmousedown',function(){_sendEvent(evCat,evAct,evLbl,evVal);});}} -if(document.addEventListener) -{document.addEventListener('DOMContentLoaded',function(){if(tObjectCheck!=window["GoogleAnalyticsObject"]) -{createTracker(false);} -oCONFIG.ENHANCED_LINK.toString()=='true'?_initIdAssigner():'';oCONFIG.AUTOTRACKER.toString()=='true'?_initAutoTracker():'';oCONFIG.YOUTUBE.toString()=='true'?_initYouTubeTracker():'';});} -else if(document.attachEvent) -{document.attachEvent('onreadystatechange',function(){if(document.readyState==="complete") -{if(tObjectCheck!=window["GoogleAnalyticsObject"]) -{createTracker(false);} -oCONFIG.ENHANCED_LINK.toString()=='true'?_initIdAssigner():'';oCONFIG.AUTOTRACKER.toString()=='true'?_initAutoTracker():'';oCONFIG.YOUTUBE.toString()=='true'?_initYouTubeTracker():'';}});} diff --git a/assets/js/html5.js b/assets/js/html5.js deleted file mode 100644 index 448cebd..0000000 --- a/assets/js/html5.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); -a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; -c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| -"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); -if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d #mq-test-1 { width: 42px; }',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document); - -/*! Respond.js v1.3.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ -(function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.compatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this); diff --git a/assets/sass/main.scss b/assets/sass/main.scss new file mode 100644 index 0000000..caf3b03 --- /dev/null +++ b/assets/sass/main.scss @@ -0,0 +1,317 @@ +// USWDS SASS variable overrides go here, before we import USWDS itself. + +$font-path: '../vendor/uswds/fonts'; +$image-path: '../vendor/uswds/img'; + +@import 'uswds'; + +/*************************************** + Begin site customizations. +****************************************/ + +.usa-footer-return-to-top { + padding-left: 0; +} + +.site-header-navbar { + border-bottom: none; + + @include media($nav-width) { + height: 8rem; + width: 100%; + display: block; + } + + // Firefox fix so that navbar buttons to align right + @-moz-document url-prefix() { + @include media($nav-width) { + padding-top: 1px; + } + } +} + +.site-header { + + background-color: #153E56; + + @include media($nav-width) { + border-bottom: none; + } + + .site-logo { + margin-left: $site-margins-mobile; + + @include media($nav-width) { + margin-left: $site-margins; + } + } + + .usa-banner { + padding-bottom: 0; + } + + @media screen and (max-width: 480px) { + .usa-banner-header { + padding-top: 0; + padding-bottom: 0; + + p { + padding-top: 5px; + } + } + } + + @media screen and (min-width: 481px) { + .usa-banner-header { + p { + margin-top: 1px; + } + } + } + + .usa-banner-inner { + max-width: 100%; + padding-top: 3px; + padding-bottom: 3px; + } + + .usa-banner-content { + margin-left: 0; + } + + .usa-button-list { + float: right; + display: none; + margin-top: -5px; + + @include media($nav-width) { + line-height: 8rem; + margin-top: 0; + display: block; + padding-right: $site-margins; + } + + li { + display: inline; + font-family: $font-sans; + + &:last-child .usa-button { + margin-right: 0; + } + } + } +} + +.site-logo { + @include media($nav-width) { + margin-top: 0; + } + + a { + color: $color-white; + } + + em { + font-family: $font-serif; + font-size: 1.4rem; + line-height: 4rem; + + @media screen and (min-width: 951px) { + font-size: 2.6rem !important; + } + + @include media($nav-width) { + font-size: $h2-font-size; + line-height: 8rem; + } + } +} + +// Header -------------- // +.sticky { + position: -webkit-sticky; + position: sticky; + top: 0; + + &:before, + &:after { + content: ''; + display: table; + } +} + + +// Sidebar Nav --------- // + +.sidenav { + display: none; + clear: both; + + @include media($nav-width) { + display: block; + float: left; + height: 100vh; + margin-bottom: 525px; + margin-top: 0px; + padding-right: 1rem; + padding-left: 3rem; + overflow: auto; + top: 0rem; + width: $width-nav-sidebar; + } + + .lt-ie9 & { + width: 25%; + } + + .usa-navigation-submenu { + &[aria-hidden="false"] { + display: block; + } + } +} + +// Main Content --------- // + +.main-content { + font-family: $font-serif; + + position: absolute; + right: 0; + bottom: 0; + display: inline-block; // starting: not scrolled + position: relative; + width: 100%; + top: 3rem; // height of disclaimer + navbar on mobile + + padding-top: 0; + margin-top: 0; + + padding-right: 3rem; + padding-left: 3rem; + + font-size: 1.5rem; + + p, li { + line-height: 1.7; + } + + p, h1, h2, h3, h4, h5, h6, ul, ol { + max-width: 66ch !important; + } + + @include media($nav-width) { + width: calc(100% - #{$width-nav-sidebar}); + top: 0; + } + + .lt-ie9 & { + width: 75%; + } + + @media screen and (max-width: 481px) { + h1 {font-size: 3rem;} + h2 {font-size: 2.2rem;} + h3 {font-size: 1.7rem;} + } + + h1 { + display: inline-block; + margin-top: 0; + margin-bottom: 0.2em; + padding-bottom: 0px; + } + + h2 { + margin-top: 1.5em; + margin-bottom: 0.5em + } + + h2 { + color: $color-primary-darker; + } +} + +@mixin outline-inverse-button { + // TODO: Fix this with button mixin + .usa-button.usa-button-outline-inverse { + box-shadow: inset 0 0 0 2px $color-primary; + color: $color-primary; + + &:hover { + box-shadow: inset 0 0 0 2px $color-primary-darker; + color: $color-primary-darker; + } + } +} + +.sidenav-mobile { + clear: both; + + @include outline-inverse-button; + + @include media($nav-width) { + display: none; + } + + .usa-sidenav-sub_list { + &[aria-hidden=true] { + display: none; + } + } + + li > button { + @include button-unstyled; + font-weight: $font-normal; + padding: 1.4rem 1.5rem 1rem 1.8rem; + + &:hover { + background-color: $color-gray-lightest; + color: $color-primary; + } + + &[aria-expanded=false] { + background-image: url('#{$image-path}/plus-alt.png'); + background-image: url('#{$image-path}/plus-alt.svg'); + background-repeat: no-repeat; + background-position: right 0 center; + background-size: 1rem; + } + + &[aria-expanded=true] { + background-image: url('#{$image-path}/minus-alt.png'); + background-image: url('#{$image-path}/minus-alt.svg'); + background-repeat: no-repeat; + background-position: right 0 center; + background-size: 1rem; + } + } + + .usa-button-list { + margin-top: 4rem; + } +} + +pre { + max-width: 80%; + font-size: 0.875em; + overflow-y: scroll; + background-color: #f1f2f2; + padding: 10px; + + white-space: pre-wrap; + line-height: 14pt; +} + +p > code, li > code { + padding: 2px 4px; + background-color: #eaeaff; + border: 1px solid #d5d5d5; + font-size: 10pt; + font-family: monospace; +} + +a.usa-sidenav-edit { + color: #0072ce; + text-decoration: underline; +} diff --git a/compliance/bod-18-01/compliance.py b/compliance/bod-18-01/compliance.py new file mode 100755 index 0000000..b7a3bee --- /dev/null +++ b/compliance/bod-18-01/compliance.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python + +import utils +import glob + +## Todo for DHS: +# * compare data across all dates + +## Todo for me: +# * pre-bod path and post-bod path +# * parents-only data going back to 2015? +# * cross-reference with DAP? + +# get mapping of domains to agency +base_domains = utils.domains_to_agencies() + +# get current and pending preloaded domains +# Downloads live from remote sources. (clear cache/ to re-download) +preloaded = set(utils.fetch_preloaded()) & set(base_domains) + +# See download.py for which dates are downloaded for each phase. + +# pre-BOD measurements (no 3DES checking, old dir structure) +pre_bod = [x.split("/")[-1] for x in glob.glob("data/pulse/pre-bod/*")] +pre_bod.sort() + +# post-BOD measurements (bod_crypto measured, new dir structure) +post_bod = [x.split("/")[-1] for x in glob.glob("data/pulse/post-bod/*")] +post_bod.sort() + + +# post-bod paths +def pshtts_and_sslyzes_for(date): + pshtts = [] + sslyzes = [] + + if date in post_bod: + pshtts.append("data/pulse/post-bod/%s/parents/results/pshtt.csv" % date) + pshtts.append("data/pulse/post-bod/%s/subdomains/scan/results/pshtt.csv" % date) + sslyzes.append("data/pulse/post-bod/%s/parents/results/sslyze.csv" % date) + sslyzes.append("data/pulse/post-bod/%s/subdomains/scan/results/sslyze.csv" % date) + elif date in pre_bod: + pshtts.append("data/pulse/pre-bod/%s/scan/pshtt.csv" % date) + pshtts.append("data/pulse/pre-bod/%s/subdomains/scan/censys/results/pshtt.csv" % date) + pshtts.append("data/pulse/pre-bod/%s/subdomains/scan/url/results/pshtt.csv" % date) + sslyzes.append("data/pulse/pre-bod/%s/scan/sslyze.csv" % date) + sslyzes.append("data/pulse/pre-bod/%s/subdomains/scan/censys/results/sslyze.csv" % date) + sslyzes.append("data/pulse/pre-bod/%s/subdomains/scan/url/results/sslyze.csv" % date) + + return pshtts, sslyzes + +def pct(num, denom): + return round((num / denom) * 100) + +def compliance_stats(name, date, filter): + pshtts, sslyzes = pshtts_and_sslyzes_for(date) + data = utils.load_pshtt_sslyze(pshtts, sslyzes, base_domains, preloaded, filter=filter) + totals = utils.compliance_totals(data) + + count = len(data.keys()) + + if count == 0: + print("No rows returned, no data to display.") + return + + print() + print("=====================================================") + print(" [%s] %s" % (date, name)) + print("=====================================================") + print() + print("Total domains: %i" % count) + print() + print("== Direct enforcement ==") + print("Enforces HTTPS: %i (%i%%)" % (totals['enforces'], pct(totals['enforces'], count))) + print("Strong HSTS: %i (%i%%)" % (totals['hsts'], pct(totals['hsts'], count))) + print("RC4 support: %i (%i%%)" % (totals['rc4'], pct(totals['rc4'], count))) + + if date in post_bod: + print("3DES support: %i (%i%%)" % (totals['3des'], pct(totals['3des'], count))) + print("Free of Known-weak Crypto: %i (%i%%)" % (totals['bod_crypto'], pct(totals['bod_crypto'], count))) + print("Compliant with BOD 18-01: %i (%i%%)" % (totals['compliant'], pct(totals['compliant'], count))) + + elif date in pre_bod: + print("Compliant with M-15-13: %i (%i%%)" % (totals['m1513'], pct(totals['m1513'], count))) + + print() + +def compliance_csv(dates, when, filter, path): + if when == "pre": + header = [ + "Date", "Total Hostnames", + "Enforces HTTPS", "HSTS", + "M-15-13", + "RC4", + "Enforces HTTPS (%)", "HSTS (%)", + "M-15-13 (%)", + "RC4 (%)", + ] + elif when == "post": + header = [ + "Date", "Total Hostnames", + "Enforces HTTPS", "HSTS", + "M-15-13", + "RC4", "3DES", "Free of SSLv2/SSLv3/RC4/3DES", + "BOD 18-01", + "Enforces HTTPS (%)", "HSTS (%)", + "M-15-13 (%)", + "RC4 (%)", "3DES (%)", "Free of SSLv2/SSLv3/RC4/3DES (%)", + "BOD 18-01 (%)", + ] + + rows = [] + for date in dates: + rows.append(compliance_csv_row(date, filter)) + + utils.save_csv(header, rows, path) + +def compliance_csv_row(date, filter): + print("[%s] Running report for row..." % date) + pshtts, sslyzes = pshtts_and_sslyzes_for(date) + data = utils.load_pshtt_sslyze(pshtts, sslyzes, base_domains, preloaded, filter=filter) + totals = utils.compliance_totals(data) + + count = len(data.keys()) + + if date in pre_bod: + return [ + date, + count, + totals['enforces'], + totals['hsts'], + totals['m1513'], + totals['rc4'], + pct(totals['enforces'], count), + pct(totals['hsts'], count), + pct(totals['m1513'], count), + pct(totals['rc4'], count), + ] + elif date in post_bod: + return [ + date, + count, + totals['enforces'], + totals['hsts'], + totals['m1513'], + totals['rc4'], + totals['3des'], + totals['bod_crypto'], + totals['compliant'], + pct(totals['enforces'], count), + pct(totals['hsts'], count), + pct(totals['m1513'], count), + pct(totals['rc4'], count), + pct(totals['3des'], count), + pct(totals['bod_crypto'], count), + pct(totals['compliant'], count), + ] + + +# # All executive hostnames pre-BOD. +# compliance_csv(pre_bod, "pre", +# utils.executive_only, +# "cache/pre-bod-executive.csv" +# ) +# # All executive hostnames post-BOD. +# compliance_csv(post_bod, "post", +# utils.executive_only, +# "cache/post-bod-executive.csv" +# ) + + +# CFO Act +compliance_csv(pre_bod, "pre", + utils.cfo_act_only, + "cache/pre-bod-cfo.csv" +) +compliance_csv(post_bod, "post", + utils.cfo_act_only, + "cache/post-bod-cfo.csv" +) + +# Non-CFO Act +compliance_csv(pre_bod, "pre", + utils.executive_non_cfo_act, + "cache/pre-bod-non-cfo.csv" +) +compliance_csv(post_bod, "post", + utils.executive_non_cfo_act, + "cache/post-bod-non-cfo.csv" +) + +# # CFO Act (minus DoD) +# compliance_csv(pre_bod, "pre", +# utils.cfo_act_only_sans_dod, +# "cache/pre-bod-cfo-no-dod.csv" +# ) +# compliance_csv(post_bod, "post", +# utils.cfo_act_only_sans_dod, +# "cache/post-bod-cfo-no-dod.csv" +# ) + +# # DoD only +# compliance_csv(pre_bod, "pre", +# utils.for_agencies(["Department of Defense"]), +# "cache/pre-bod-dod.csv" +# ) +# compliance_csv(post_bod, "post", +# utils.for_agencies(["Department of Defense"]), +# "cache/post-bod-dod.csv" +# ) + + diff --git a/compliance/bod-18-01/download.py b/compliance/bod-18-01/download.py new file mode 100644 index 0000000..3996f93 --- /dev/null +++ b/compliance/bod-18-01/download.py @@ -0,0 +1,75 @@ +## +# Download data from the Pulse S3 bucket to measure scans over time. +# Must be run from a machine where "aws s3 cp" has credentials for the bucket. + +import os +import subprocess + +AWS_REGION = "us-gov-west-1" +BUCKET_NAME = "cg-4adefb86-dadb-4ecf-be3e-f1c7b4f6d084" +DATA_DIR = "data/pulse" + +# Before BOD 18-01 was issued and before Pulse data was restructured +pre_bod = ["2017-02-10", "2017-02-12", "2017-02-15", "2017-02-17", "2017-02-20", "2017-02-22", "2017-02-24", "2017-02-27", "2017-03-01", "2017-03-03", "2017-03-06", "2017-03-08", "2017-03-10", "2017-03-13", "2017-03-15", "2017-03-17", "2017-03-20", "2017-03-22", "2017-03-24", "2017-03-27", "2017-03-30", "2017-03-31", "2017-04-04", "2017-04-06", "2017-04-08", "2017-04-11", "2017-04-13", "2017-04-20", "2017-04-22", "2017-04-25", "2017-04-27", "2017-04-29", "2017-05-02", "2017-05-04", "2017-05-06", "2017-05-09", "2017-05-11", "2017-05-13", "2017-05-16", "2017-05-18", "2017-05-20", "2017-05-23", "2017-05-25", "2017-05-27", "2017-05-30", "2017-06-01", "2017-06-03", "2017-06-05", "2017-07-02", "2017-07-03", "2017-07-05", "2017-07-07", "2017-07-10", "2017-07-12", "2017-07-14", "2017-07-17", "2017-07-19", "2017-07-21", "2017-07-25", "2017-07-26", "2017-07-28", "2017-07-31", "2017-08-02", "2017-08-07", "2017-08-09", "2017-08-11", "2017-08-14", "2017-08-16", "2017-08-18", "2017-08-21", "2017-08-23", "2017-08-25", "2017-09-28"] + +# After BOD 18-01 was issued and after Pulse data was restructured +# Exceptions: +# 2018-01-02: no subdomains/scan/results +post_bod = ["2017-11-20", "2017-11-25", "2017-12-11", "2017-12-13", "2017-12-15", "2017-12-16", "2017-12-17", "2017-12-18", "2017-12-19", "2017-12-20", "2017-12-21", "2017-12-22", "2017-12-23", "2017-12-24", "2017-12-25", "2017-12-26", "2017-12-27", "2017-12-28", "2017-12-29", "2017-12-30", "2017-12-31", "2018-01-01", "2018-01-03", "2018-01-04", "2018-01-05", "2018-01-06", "2018-01-07", "2018-01-08", "2018-01-09", "2018-01-10", "2018-01-11", "2018-01-12", "2018-01-13", "2018-01-14", "2018-01-15", "2018-01-16", "2018-01-17", "2018-01-18", "2018-01-19", "2018-01-20", "2018-01-21", "2018-01-22", "2018-01-23", "2018-01-24", "2018-01-25", "2018-01-26", "2018-01-27", "2018-01-28", "2018-01-29", "2018-01-30", "2018-01-31", "2018-02-01", "2018-02-02", "2018-02-03", "2018-02-04", "2018-02-05", "2018-02-06", "2018-02-07", "2018-02-08", "2018-02-09", "2018-02-10", "2018-02-11", "2018-02-12", "2018-02-13", "2018-02-14", "2018-02-15", "2018-02-16", "2018-02-17", "2018-02-18", "2018-02-19", "2018-02-20", "2018-02-21", "2018-02-22", "2018-02-23", "2018-02-24", "2018-02-25", "2018-02-26", "2018-02-27", "2018-02-28", "2018-03-01", "2018-03-02", "2018-03-03", "2018-03-04", "2018-03-05", "2018-03-06", "2018-03-07", "2018-03-08", "2018-03-09", "2018-03-10", "2018-03-11", "2018-03-15", "2018-03-16", "2018-03-17", "2018-03-18", "2018-03-19", "2018-03-20", "2018-03-21", "2018-03-23", "2018-03-24", "2018-03-25", "2018-03-26", "2018-03-27", "2018-03-28", "2018-03-29", "2018-03-30", "2018-03-31", "2018-04-01", "2018-04-02", "2018-04-03", "2018-04-09", "2018-04-10", "2018-04-11", "2018-04-12", "2018-04-13", "2018-04-14", "2018-04-15", "2018-04-16", "2018-04-25", "2018-04-26", "2018-04-27", "2018-04-28"] + +def shell_out(command, env=None): + response = subprocess.check_output(command, shell=False, env=env) + output = str(response, encoding='UTF-8') + return output + +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: # Python >2.5 + if exc.errno == errno.EEXIST: + pass + else: + raise + + +# when = "pre" or "post" +def download_date(date, when="post"): + + def download(date, file): + url = "s3://%s/archive/%s/%s" % (BUCKET_NAME, date, file) + + # local destinations are relative to data/ + path = os.path.join(DATA_DIR, "%s-bod" % when, date, file) + + shell_out(["aws", "s3", "cp", url, path]) + + try: + # Newer streamlined directory structure + if when == "post": + download(date, "parents/results/pshtt.csv") + download(date, "parents/results/sslyze.csv") + download(date, "parents/results/meta.json") + download(date, "subdomains/scan/results/pshtt.csv") + download(date, "subdomains/scan/results/sslyze.csv") + download(date, "subdomains/scan/results/meta.json") + + # Older, more laborious directory structure + elif when == "pre": + download(date, "scan/pshtt.csv") + download(date, "scan/sslyze.csv") + download(date, "scan/meta.json") + download(date, "subdomains/scan/url/results/pshtt.csv") + download(date, "subdomains/scan/url/results/sslyze.csv") + download(date, "subdomains/scan/url/results/meta.json") + download(date, "subdomains/scan/censys/results/pshtt.csv") + download(date, "subdomains/scan/censys/results/sslyze.csv") + download(date, "subdomains/scan/censys/results/meta.json") + except subprocess.CalledProcessError: + print("[%s] MISSING SOMETHING" % date) + + +# for date in post_bod: +# download_date(date, "post") + +# for date in pre_bod: +# download_date(date, "pre") diff --git a/compliance/bod-18-01/scratch.py b/compliance/bod-18-01/scratch.py new file mode 100644 index 0000000..b9ca86f --- /dev/null +++ b/compliance/bod-18-01/scratch.py @@ -0,0 +1,116 @@ + +######################################################### +# +# Just scratch space, this won't execute or import properly. +# +######################################################### + +name = "Pre-BOD (all executive)" +compliance_stats(name, pre_bod[-1], utils.executive_only) + +name = "Most recent (all executive)" +compliance_stats(name, post_bod[-1], utils.executive_only) + +name = "Most recent (all legislative)" +compliance_stats(name, post_bod[-1], utils.legislative_only) + +name = "Most recent (all judicial)" +compliance_stats(name, post_bod[-1], utils.judicial_only) + +name = "Most recent (CFO Act only)" +compliance_stats(name, post_bod[-1], utils.cfo_act_only) + +name = "Most recent (CFO Act only, minus DoD)" +compliance_stats(name, post_bod[-1], utils.cfo_act_only_sans_dod) + +name = "Most recent (DoD only)" +compliance_stats(name, post_bod[-1], utils.for_agencies(["Department of Defense"])) + +name = "Most recent (non-CFO Act)" +compliance_stats(name, post_bod[-1], utils.executive_non_cfo_act) + + +# All executive hostnames pre-BOD. +compliance_csv(pre_bod, "pre", + utils.executive_only, + "cache/pre-bod-executive.csv" +) +# All executive hostnames post-BOD. +compliance_csv(post_bod, "post", + utils.executive_only, + "cache/post-bod-executive.csv" +) + +# CFO Act +compliance_csv(pre_bod, "pre", + utils.cfo_act_only, + "cache/pre-bod-cfo.csv" +) +compliance_csv(post_bod, "post", + utils.cfo_act_only, + "cache/post-bod-cfo.csv" +) + +# Non-CFO Act +compliance_csv(pre_bod, "pre", + utils.executive_non_cfo_act, + "cache/pre-bod-non-cfo.csv" +) +compliance_csv(post_bod, "post", + utils.executive_non_cfo_act, + "cache/post-bod-non-cfo.csv" +) + +# CFO Act (minus DoD) +compliance_csv(pre_bod, "pre", + utils.cfo_act_only_sans_dod, + "cache/pre-bod-cfo-no-dod.csv" +) +compliance_csv(post_bod, "post", + utils.cfo_act_only_sans_dod, + "cache/post-bod-cfo-no-dod.csv" +) + +# DoD only +compliance_csv(pre_bod, "pre", + utils.for_agencies(["Department of Defense"]), + "cache/pre-bod-dod.csv" +) +compliance_csv(post_bod, "post", + utils.for_agencies(["Department of Defense"]), + "cache/post-bod-dod.csv" +) + + +cfo_act_groups = [ + "U.S. Department of Agriculture", + "Department of Commerce", + "Department of Defense", + "Department of Education", + "Department of Energy", + "Department of Health and Human Services", + "Department of Homeland Security", + "Department of Housing and Urban Development", + "Department of the Interior", + [ + "Department of Justice", + "Terrorist Screening Center", # (DOJ/FBI) as seen in .gov data + ], + "Department of Labor", + [ + "Department of State", + "Department of State, Office of Inspector General", # seen in .gov data + ], + "Department of Transportation", + "Department of the Treasury", + "Department of Veterans Affairs", + "Environmental Protection Agency", + "National Aeronautics and Space Administration", + "U.S. Agency for International Development", + "General Services Administration", + "National Science Foundation", + "Nuclear Regulatory Commission", + "Office of Personnel Management", + "Small Business Administration", + "Social Security Administration" +] diff --git a/compliance/bod-18-01/utils.py b/compliance/bod-18-01/utils.py new file mode 100644 index 0000000..094b15e --- /dev/null +++ b/compliance/bod-18-01/utils.py @@ -0,0 +1,610 @@ +import csv +import io +import os +import errno +import urllib +import urllib.request +import logging +import requests +import base64 +import re +import json + +# == compliance + +# Given a dict of pshtt results for a hostname, what are the +# Uses, Enforces, and HSTS conclusions? +# +# borrows the pulse.cio.gov code for calculating conclusions: +# https://github.com/18F/pulse/blob/0528773b1d39a664ff8f62d655b8bb7c8979874c/data/processing.py#L408-L509 +def compliance_for(pshtt, sslyze, parent_preloaded=False): + report = {} + # assumes that HTTPS would be technically present, with or without issues + if (pshtt["Downgrades HTTPS"] == "True"): + https = 0 # No + else: + if (pshtt["Valid HTTPS"] == "True"): + https = 2 # Yes + elif ( + (pshtt["HTTPS Bad Chain"] == "True") and + (pshtt["HTTPS Bad Hostname"] == "False") + ): + https = 1 # Yes + else: + https = -1 # No + + + ### + # Is HTTPS enforced? + + if (https <= 0): + behavior = 0 # N/A + + else: + + # "Yes (Strict)" means HTTP immediately redirects to HTTPS, + # *and* that HTTP eventually redirects to HTTPS. + # + # Since a pure redirector domain can't "default" to HTTPS + # for itself, we'll say it "Enforces HTTPS" if it immediately + # redirects to an HTTPS URL. + if ( + (pshtt["Strictly Forces HTTPS"] == "True") and + ( + (pshtt["Defaults to HTTPS"] == "True") or + (pshtt["Redirect"] == "True") + ) + ): + behavior = 3 # Yes (Strict) + + # "Yes" means HTTP eventually redirects to HTTPS. + elif ( + (pshtt["Strictly Forces HTTPS"] == "False") and + (pshtt["Defaults to HTTPS"] == "True") + ): + behavior = 2 # Yes + + # Either both are False, or just 'Strict Force' is True, + # which doesn't matter on its own. + # A "present" is better than a downgrade. + else: + behavior = 1 # Present (considered 'No') + + report['enforces'] = behavior + + + ### + # Characterize the presence and completeness of HSTS. + + if pshtt["HSTS Max Age"]: + hsts_age = int(pshtt["HSTS Max Age"]) + else: + hsts_age = None + + # If this is a subdomain, it can be considered as having HSTS, via + # the preloading of its parent. + if parent_preloaded: + hsts = 3 # Yes, via preloading + + # Otherwise, without HTTPS there can be no HSTS for the domain directly. + elif (https <= 0): + hsts = -1 # N/A (considered 'No') + + else: + + # HSTS is present for the canonical endpoint. + if (pshtt["HSTS"] == "True") and hsts_age: + + # Say No for too-short max-age's, and note in the extended details. + if hsts_age >= 31536000: + hsts = 2 # Yes, directly + else: + hsts = 1 # No + + else: + hsts = 0 # No + + # Separate preload status from HSTS status: + # + # * Domains can be preloaded through manual overrides. + # * Confusing to mix an endpoint-level decision with a domain-level decision. + if pshtt["HSTS Preloaded"] == "True": + preloaded = 2 # Yes + elif (pshtt["HSTS Preload Ready"] == "True"): + preloaded = 1 # Ready for submission + else: + preloaded = 0 # No + + report['hsts'] = hsts + report['hsts_age'] = hsts_age + report['preloaded'] = preloaded + + ### + # Get cipher/protocol data via sslyze for a host. + + sslv2 = None + sslv3 = None + any_rc4 = None + any_3des = None + + # values: unknown or N/A (-1), No (0), Yes (1) + bod_crypto = None + + # N/A if no HTTPS + if (https <= 0): + bod_crypto = -1 # N/A + + elif sslyze is None: + # LOGGER.info("[https][%s] No sslyze scan data found." % name) + bod_crypto = -1 # Unknown + + else: + ### + # BOD 18-01 (cyber.dhs.gov) cares about SSLv2, SSLv3, RC4, and 3DES. + any_rc4 = boolean_for(sslyze["Any RC4"]) + # TODO: kill conditional once everything is synced + if sslyze.get("Any 3DES"): + any_3des = boolean_for(sslyze["Any 3DES"]) + sslv2 = boolean_for(sslyze["SSLv2"]) + sslv3 = boolean_for(sslyze["SSLv3"]) + + if any_rc4 or any_3des or sslv2 or sslv3: + bod_crypto = 0 + else: + bod_crypto = 1 + + report['bod_crypto'] = bod_crypto + report['rc4'] = any_rc4 + report['3des'] = any_3des + report['sslv2'] = sslv2 + report['sslv3'] = sslv3 + + # Final calculation: is the service compliant with all of M-15-13 + # (HTTPS+HSTS) and BOD 18-01 (that + RC4/3DES/SSLv2/SSLv3)? + + # For M-15-13 compliance, the service has to enforce HTTPS, + # and has to have strong HSTS in place (can be via preloading). + m1513 = (behavior >= 2) and (hsts >= 2) + + # For BOD compliance, only ding if we have scan data: + # * If our scanner dropped, give benefit of the doubt. + # * If they have no HTTPS, this will fix itself once HTTPS comes on. + bod1801 = m1513 and (bod_crypto != 0) + + # Phew! + report['m1513'] = m1513 + report['compliant'] = bod1801 # equivalent, since BOD is a superset + + return report + + +# Given a compliance report (e.g. uses=1, enforces=2, hsts=2) +# return a dict with them turned into labels +def compliance_labels(report): + return { + 'enforces': (report['enforces'] >= 2), + 'hsts': (report['hsts'] >= 2), + 'bod_crypto': (report['bod_crypto'] == 1), + 'compliant': report['compliant'], + 'm1513': report['m1513'], + 'rc4': report['rc4'], + '3des': report['3des'] + } + +def boolean_for(string): + if string == "False": + return False + elif string == "True": + return True + else: + return None + +# Given a set of domains, calculate the compliance totals +# that meet BOD 18-01 requirements. +# Adapted from a snapshot of Pulse code: +# https://github.com/18F/pulse/blob/0528773b1d39a664ff8f62d655b8bb7c8979874c/data/processing.py#L511-L539 + +def compliance_totals(data): + total_report = { + 'enforces': 0, + 'hsts': 0, + 'bod_crypto': 0, + 'compliant': 0, + 'm1513': 0, + 'rc4': 0, + '3des': 0 + } + + for domain in data.keys(): + # calculated in compliance_for() method using pshtt data + report = data[domain]['compliance'] + + # Needs to be Default or Strict to be 'Yes' + if report['enforces'] >= 2: + total_report['enforces'] += 1 + + # Needs to be present with >= 1 year max-age for canonical endpoint + if report['hsts'] >= 2: + total_report['hsts'] += 1 + + if report['bod_crypto'] == 1: + total_report['bod_crypto'] += 1 + + if report['compliant']: + total_report['compliant'] += 1 + + if report['m1513']: + total_report['m1513'] += 1 + + if report['rc4']: + total_report['rc4'] += 1 + + if report['3des']: + total_report['3des'] += 1 + + return total_report + +# == filters == + +def live_only(pshtt, agency, branch): + return pshtt["Live"] == "True" + +# return a dynamic filter function for a given agency +def for_agencies(filter_agencies): + # render case-insensitive + filtered = [agency.lower() for agency in filter_agencies] + + def the_filter(pshtt, agency, branch): + live = live_only(pshtt, agency, branch) + return live and (agency.lower() in filtered) + + return the_filter + +# a specific list of executive branch domains +# used to filter on DAP-tracked domains +def specific_executive(list_of_domains): + + def the_filter(pshtt, agency, branch): + executive = executive_only(pshtt, agency, branch) + return executive and (pshtt['Domain'] in list_of_domains) + + return the_filter + +def executive_only(pshtt, agency, branch): + live = live_only(pshtt, agency, branch) + return live and (branch == "executive") + +def non_executive(pshtt, agency, branch): + live = live_only(pshtt, agency, branch) + return live and (branch != "executive") + +def legislative_only(pshtt, agency, branch): + live = live_only(pshtt, agency, branch) + return live and (branch == "legislative") + +def judicial_only(pshtt, agency, branch): + live = live_only(pshtt, agency, branch) + return live and (branch == "judicial") + +def cfo_act_only(pshtt, agency, branch): + live = live_only(pshtt, agency, branch) + return live and cfo_act(agency) + +def executive_non_cfo_act(pshtt, agency, branch): + executive = executive_only(pshtt, agency, branch) + return executive and (not cfo_act(agency)) + +def cfo_act_only_sans_dod(pshtt, agency, branch): + live = live_only(pshtt, agency, branch) + return live and cfo_act_sans_dod(agency) + +# Return base domain for a subdomain. +# Simplified to not use PSL for the federal use case, while handling .fed.us. +def base_domain_for(subdomain): + if subdomain.endswith(".fed.us"): + return str.join(".", subdomain.split(".")[-3:]) + else: # .gov + return str.join(".", subdomain.split(".")[-2:]) + +# save an array of domain names to a CSV at a given path +def save_domains(domains, path): + output = io.StringIO() + writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC) + header = ["Domain", "Base Domain"] + writer.writerow(header) + for domain in domains: + writer.writerow([domain, base_domain_for(domain)]) + write(output.getvalue(), path) + +def save_csv(header, rows, path): + output = io.StringIO() + writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC) + writer.writerow(header) + for row in rows: + writer.writerow(row) + write(output.getvalue(), path) + + +# Load the first column of a CSV into memory as an array of strings. +def load_domains(domain_csv, whole_rows=False): + domains = [] + with open(domain_csv, newline='') as csvfile: + for row in csv.reader(csvfile): + if (not row[0]) or (row[0].lower() == "domain") or (row[0].lower() == "domain name"): + continue + + row[0] = row[0].lower() + + if whole_rows: + domains.append(row) + else: + domains.append(row[0]) + return domains + +# Return true if it's a CFO Act agency +def cfo_act(agency): + return agency in [ + "U.S. Department of Agriculture", + "Department of Commerce", + "Department of Defense", + "Department of Education", + "Department of Energy", + "Department of Health and Human Services", + "Department of Homeland Security", + "Department of Housing and Urban Development", + "Department of the Interior", + "Department of Justice", + "Terrorist Screening Center", # (DOJ/FBI) as seen in .gov data + "Department of Labor", + "Department of State", + "Department of State, Office of Inspector General", # seen in .gov data + "Department of Transportation", + "Department of the Treasury", + "Department of Veterans Affairs", + "Environmental Protection Agency", + "National Aeronautics and Space Administration", + "U.S. Agency for International Development", + "General Services Administration", + "National Science Foundation", + "Nuclear Regulatory Commission", + "Office of Personnel Management", + "Small Business Administration", + "Social Security Administration" + ] + +# Return true if it's a CFO act agency and not DoD +def cfo_act_sans_dod(agency): + return cfo_act(agency) and (agency != "Department of Defense") + +# Taken from a snapshot of Pulse's branch detection code: +# https://github.com/18F/pulse/blob/c5b15bc1d2c9e4ff3b20e352e0a0b4f3d131d70f/data/processing.py#L1165-L1174 +def branch_for(domain_type): + if (not domain_type.startswith("Federal Agency - ")): + return None + + branch = domain_type.replace("Federal Agency - ", "") + branch = branch.lower().strip() + + return branch + + +# Download official GSA .gov dataset and create a dict of domains to agencies/branches. +def domains_to_agencies(): + official_csv = "cache/federal-domains.csv" + if not os.path.exists(official_csv): + print("Downloading federal domains...") + + # Snapshot as of 2018-04-27 + url = "https://github.com/GSA/data/raw/4513ad8ce1548fdb34509e7361d806a5a1e4288b/dotgov-domains/current-federal.csv" + official_csv = download(url, "cache/federal-domains.csv") + + official_data = load_domains(official_csv, whole_rows=True) + + # header row for latest .gov data + headers = [ + "Domain Name", "Domain Type", + "Agency", "Organization", "City", "State" + ] + + domain_map = {} + for row in official_data: + # Turn row headers into a dict. + dict_row = {} + for i, cell in enumerate(row): + dict_row[headers[i]] = cell + + domain = dict_row["Domain Name"].lower() + agency = dict_row["Agency"].strip() + domain_type = dict_row["Domain Type"] + branch = branch_for(domain_type) + + domain_map[domain] = { + "agency": agency, + "branch": branch + } + + return domain_map + +# Not great at error handling. +def download(url, destination): + filename, headers = urllib.request.urlretrieve(url, destination) + return filename + +# Load one or more pshtt scan files, and turn them into a dict. +# If sending in multiple paths, send from oldest to newest, as +# later scan results for the same domain will overwrite older ones. +def load_pshtt_sslyze(pshtts, sslyzes, base_domains, preloaded, filter=None): + data = {} + + for path in pshtts: + headers = [] + with open(path, newline='') as csvfile: + for row in csv.reader(csvfile): + if (row[0].lower() == "domain"): + headers = row + continue + + domain = row[0].lower() + base_domain = base_domain_for(domain) + if not base_domains.get(base_domain): + # print("[load_pshtt] Skipping %s, not a (current) federal domain." % domain) + continue + + agency = base_domains[base_domain]["agency"] + branch = base_domains[base_domain]["branch"] + + if agency == "Non-Federal Agency": + # print("[load_pshtt] Skipping %s, marked as non-federal." % domain) + continue + + pshtt = {} + for i, cell in enumerate(row): + pshtt[headers[i]] = cell + + if filter and (not filter(pshtt, agency, branch)): + # print("[load_pshtt] Skipping %s, didn't pass filter." % domain) + continue + + # might overwrite a scan result from a previous + # CSV file - that's fine, we'll just go with the + # latest one, so inputs should use latest last. + data[domain] = { + 'pshtt': pshtt, + 'base_domain': base_domain, + 'agency': agency, + 'branch': branch, + 'cfo_act': cfo_act(agency) + } + + for path in sslyzes: + headers = [] + with open(path, newline='') as csvfile: + for row in csv.reader(csvfile): + if (row[0].lower() == "domain"): + headers = row + continue + + domain = row[0].lower() + base_domain = base_domain_for(domain) + if not data.get(domain): + # print("[load_sslyze] Skipping %s, filtered out." % domain) + continue + + sslyze = {} + for i, cell in enumerate(row): + sslyze[headers[i]] = cell + + # if no TLSv1.2 value, then no scan was performed + if sslyze["TLSv1.2"]: + data[domain]['sslyze'] = sslyze + + + # Run each domain through compliance_for, with the pshtt, sslyze, + # and whether its parent is known to be preloaded + domains = list(data.keys()) + domains.sort() + for domain in domains: + # Debugging: + # print(domain) + + base_domain = base_domain_for(domain) + if domain == base_domain: + parent_preloaded = False # Not relevant for base domains themselves. + else: + parent_preloaded = (base_domain in preloaded) + + data[domain]['compliance'] = compliance_for(data[domain]['pshtt'], data[domain].get('sslyze'), parent_preloaded) + + return data + +def fetch_preloaded(): + preload_json = None + + preload_path = "cache/preload.json" + + if os.path.exists(preload_path): + logging.debug("Using cached Chrome preload list.") + preload_json = json.loads(open(preload_path).read()) + else: + logging.debug("Fetching Chrome preload list from source...") + + # Downloads the chromium preloaded domain list and sets it to a global set + file_url = 'https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json?format=TEXT' + + # TODO: proper try/except around this network request + request = requests.get(file_url) + raw = request.content + + # To avoid parsing the contents of the file out of the source tree viewer's + # HTML, we download it as a raw file. googlesource.com Base64-encodes the + # file to avoid potential content injection issues, so we need to decode it + # before using it. https://code.google.com/p/gitiles/issues/detail?id=7 + raw = base64.b64decode(raw).decode('utf-8') + + # The .json file contains '//' comments, which are not actually valid JSON, + # and confuse Python's JSON decoder. Begone, foul comments! + raw = ''.join([re.sub(r'^\s*//.*$', '', line) + for line in raw.splitlines()]) + + preload_json = json.loads(raw) + + logging.debug("Caching preload list at %s" % preload_path) + write(json_for(preload_json), preload_path) + + # For our purposes, we only care about entries that includeSubDomains + fully_preloaded = [] + for entry in preload_json['entries']: + if entry.get('include_subdomains', False) is True: + fully_preloaded.append(entry['name']) + + return fully_preloaded + +def fetch_preload_pending(): + + pending_path = "cache/preload-pending.json" + if not os.path.exists(pending_path): + logging.debug("Fetching Chrome pending preload list...") + + pending_url = "https://hstspreload.org/api/v2/pending" + download(pending_url, pending_path) + + raw = open(pending_path).read() + pending_json = json.loads(raw) + + # For our purposes, we only care about entries that include subdomains. + pending = [] + for entry in pending_json: + if entry.get('include_subdomains', False) is True: + pending.append(entry['name']) + + return pending + +def write(content, destination): + mkdir_p(os.path.dirname(destination)) + + f = open(destination, 'w', encoding='utf-8') + f.write(content) + f.close() + +def json_for(object): + return json.dumps(object, sort_keys=True, + indent=2, default=format_datetime) + +def format_datetime(obj): + if isinstance(obj, datetime.date): + return obj.isoformat() + elif isinstance(obj, str): + return obj + else: + return None + +# mkdir -p in python, from: +# https://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: # Python >2.5 + if exc.errno == errno.EEXIST: + pass + else: + raise diff --git a/compliance/compliance.py b/compliance/m-15-13/compliance.py similarity index 100% rename from compliance/compliance.py rename to compliance/m-15-13/compliance.py diff --git a/compliance/data/analytics-domains/all-domains-30-days-2017-01-01.csv b/compliance/m-15-13/data/analytics-domains/all-domains-30-days-2017-01-01.csv similarity index 100% rename from compliance/data/analytics-domains/all-domains-30-days-2017-01-01.csv rename to compliance/m-15-13/data/analytics-domains/all-domains-30-days-2017-01-01.csv diff --git a/compliance/data/censys-2016-08-04.csv b/compliance/m-15-13/data/censys-2016-08-04.csv similarity index 100% rename from compliance/data/censys-2016-08-04.csv rename to compliance/m-15-13/data/censys-2016-08-04.csv diff --git a/compliance/data/censys-2016-12-05.csv b/compliance/m-15-13/data/censys-2016-12-05.csv similarity index 100% rename from compliance/data/censys-2016-12-05.csv rename to compliance/m-15-13/data/censys-2016-12-05.csv diff --git a/compliance/data/censys-2016-12-31.csv b/compliance/m-15-13/data/censys-2016-12-31.csv similarity index 100% rename from compliance/data/censys-2016-12-31.csv rename to compliance/m-15-13/data/censys-2016-12-31.csv diff --git a/compliance/data/dap-2016-07-12.csv b/compliance/m-15-13/data/dap-2016-07-12.csv similarity index 100% rename from compliance/data/dap-2016-07-12.csv rename to compliance/m-15-13/data/dap-2016-07-12.csv diff --git a/compliance/data/dap-2016-12-05.csv b/compliance/m-15-13/data/dap-2016-12-05.csv similarity index 100% rename from compliance/data/dap-2016-12-05.csv rename to compliance/m-15-13/data/dap-2016-12-05.csv diff --git a/compliance/data/dap-2016-12-31.csv b/compliance/m-15-13/data/dap-2016-12-31.csv similarity index 100% rename from compliance/data/dap-2016-12-31.csv rename to compliance/m-15-13/data/dap-2016-12-31.csv diff --git a/compliance/data/eot-2012.csv b/compliance/m-15-13/data/eot-2012.csv similarity index 100% rename from compliance/data/eot-2012.csv rename to compliance/m-15-13/data/eot-2012.csv diff --git a/compliance/data/eot-2016.csv b/compliance/m-15-13/data/eot-2016.csv similarity index 100% rename from compliance/data/eot-2016.csv rename to compliance/m-15-13/data/eot-2016.csv diff --git a/compliance/data/eot-seeds/eot-2012-seeds.csv b/compliance/m-15-13/data/eot-seeds/eot-2012-seeds.csv similarity index 100% rename from compliance/data/eot-seeds/eot-2012-seeds.csv rename to compliance/m-15-13/data/eot-seeds/eot-2012-seeds.csv diff --git a/compliance/data/eot-seeds/eot-2016-seeds.csv b/compliance/m-15-13/data/eot-seeds/eot-2016-seeds.csv similarity index 100% rename from compliance/data/eot-seeds/eot-2016-seeds.csv rename to compliance/m-15-13/data/eot-seeds/eot-2016-seeds.csv diff --git a/compliance/data/parents-2015-06-13.csv b/compliance/m-15-13/data/parents-2015-06-13.csv similarity index 100% rename from compliance/data/parents-2015-06-13.csv rename to compliance/m-15-13/data/parents-2015-06-13.csv diff --git a/compliance/data/parents-2015-06-19.csv b/compliance/m-15-13/data/parents-2015-06-19.csv similarity index 100% rename from compliance/data/parents-2015-06-19.csv rename to compliance/m-15-13/data/parents-2015-06-19.csv diff --git a/compliance/data/parents-2015-06-26.csv b/compliance/m-15-13/data/parents-2015-06-26.csv similarity index 100% rename from compliance/data/parents-2015-06-26.csv rename to compliance/m-15-13/data/parents-2015-06-26.csv diff --git a/compliance/data/parents-2015-07-03.csv b/compliance/m-15-13/data/parents-2015-07-03.csv similarity index 100% rename from compliance/data/parents-2015-07-03.csv rename to compliance/m-15-13/data/parents-2015-07-03.csv diff --git a/compliance/data/parents-2015-07-10.csv b/compliance/m-15-13/data/parents-2015-07-10.csv similarity index 100% rename from compliance/data/parents-2015-07-10.csv rename to compliance/m-15-13/data/parents-2015-07-10.csv diff --git a/compliance/data/parents-2015-07-17.csv b/compliance/m-15-13/data/parents-2015-07-17.csv similarity index 100% rename from compliance/data/parents-2015-07-17.csv rename to compliance/m-15-13/data/parents-2015-07-17.csv diff --git a/compliance/data/parents-2015-07-24.csv b/compliance/m-15-13/data/parents-2015-07-24.csv similarity index 100% rename from compliance/data/parents-2015-07-24.csv rename to compliance/m-15-13/data/parents-2015-07-24.csv diff --git a/compliance/data/parents-2015-07-31.csv b/compliance/m-15-13/data/parents-2015-07-31.csv similarity index 100% rename from compliance/data/parents-2015-07-31.csv rename to compliance/m-15-13/data/parents-2015-07-31.csv diff --git a/compliance/data/parents-2015-08-07.csv b/compliance/m-15-13/data/parents-2015-08-07.csv similarity index 100% rename from compliance/data/parents-2015-08-07.csv rename to compliance/m-15-13/data/parents-2015-08-07.csv diff --git a/compliance/data/parents-2015-08-14.csv b/compliance/m-15-13/data/parents-2015-08-14.csv similarity index 100% rename from compliance/data/parents-2015-08-14.csv rename to compliance/m-15-13/data/parents-2015-08-14.csv diff --git a/compliance/data/parents-2015-08-21.csv b/compliance/m-15-13/data/parents-2015-08-21.csv similarity index 100% rename from compliance/data/parents-2015-08-21.csv rename to compliance/m-15-13/data/parents-2015-08-21.csv diff --git a/compliance/data/parents-2015-08-28.csv b/compliance/m-15-13/data/parents-2015-08-28.csv similarity index 100% rename from compliance/data/parents-2015-08-28.csv rename to compliance/m-15-13/data/parents-2015-08-28.csv diff --git a/compliance/data/parents-2015-09-04.csv b/compliance/m-15-13/data/parents-2015-09-04.csv similarity index 100% rename from compliance/data/parents-2015-09-04.csv rename to compliance/m-15-13/data/parents-2015-09-04.csv diff --git a/compliance/data/parents-2015-09-11.csv b/compliance/m-15-13/data/parents-2015-09-11.csv similarity index 100% rename from compliance/data/parents-2015-09-11.csv rename to compliance/m-15-13/data/parents-2015-09-11.csv diff --git a/compliance/data/parents-2015-09-18.csv b/compliance/m-15-13/data/parents-2015-09-18.csv similarity index 100% rename from compliance/data/parents-2015-09-18.csv rename to compliance/m-15-13/data/parents-2015-09-18.csv diff --git a/compliance/data/parents-2015-09-25.csv b/compliance/m-15-13/data/parents-2015-09-25.csv similarity index 100% rename from compliance/data/parents-2015-09-25.csv rename to compliance/m-15-13/data/parents-2015-09-25.csv diff --git a/compliance/data/parents-2015-10-09.csv b/compliance/m-15-13/data/parents-2015-10-09.csv similarity index 100% rename from compliance/data/parents-2015-10-09.csv rename to compliance/m-15-13/data/parents-2015-10-09.csv diff --git a/compliance/data/parents-2015-10-16.csv b/compliance/m-15-13/data/parents-2015-10-16.csv similarity index 100% rename from compliance/data/parents-2015-10-16.csv rename to compliance/m-15-13/data/parents-2015-10-16.csv diff --git a/compliance/data/parents-2015-10-22.csv b/compliance/m-15-13/data/parents-2015-10-22.csv similarity index 100% rename from compliance/data/parents-2015-10-22.csv rename to compliance/m-15-13/data/parents-2015-10-22.csv diff --git a/compliance/data/parents-2015-10-30.csv b/compliance/m-15-13/data/parents-2015-10-30.csv similarity index 100% rename from compliance/data/parents-2015-10-30.csv rename to compliance/m-15-13/data/parents-2015-10-30.csv diff --git a/compliance/data/parents-2015-11-06.csv b/compliance/m-15-13/data/parents-2015-11-06.csv similarity index 100% rename from compliance/data/parents-2015-11-06.csv rename to compliance/m-15-13/data/parents-2015-11-06.csv diff --git a/compliance/data/parents-2015-11-13.csv b/compliance/m-15-13/data/parents-2015-11-13.csv similarity index 100% rename from compliance/data/parents-2015-11-13.csv rename to compliance/m-15-13/data/parents-2015-11-13.csv diff --git a/compliance/data/parents-2015-11-21.csv b/compliance/m-15-13/data/parents-2015-11-21.csv similarity index 100% rename from compliance/data/parents-2015-11-21.csv rename to compliance/m-15-13/data/parents-2015-11-21.csv diff --git a/compliance/data/parents-2015-11-28.csv b/compliance/m-15-13/data/parents-2015-11-28.csv similarity index 100% rename from compliance/data/parents-2015-11-28.csv rename to compliance/m-15-13/data/parents-2015-11-28.csv diff --git a/compliance/data/parents-2015-12-04.csv b/compliance/m-15-13/data/parents-2015-12-04.csv similarity index 100% rename from compliance/data/parents-2015-12-04.csv rename to compliance/m-15-13/data/parents-2015-12-04.csv diff --git a/compliance/data/parents-2015-12-10.csv b/compliance/m-15-13/data/parents-2015-12-10.csv similarity index 100% rename from compliance/data/parents-2015-12-10.csv rename to compliance/m-15-13/data/parents-2015-12-10.csv diff --git a/compliance/data/parents-2015-12-18.csv b/compliance/m-15-13/data/parents-2015-12-18.csv similarity index 100% rename from compliance/data/parents-2015-12-18.csv rename to compliance/m-15-13/data/parents-2015-12-18.csv diff --git a/compliance/data/parents-2015-12-26.csv b/compliance/m-15-13/data/parents-2015-12-26.csv similarity index 100% rename from compliance/data/parents-2015-12-26.csv rename to compliance/m-15-13/data/parents-2015-12-26.csv diff --git a/compliance/data/parents-2016-01-02.csv b/compliance/m-15-13/data/parents-2016-01-02.csv similarity index 100% rename from compliance/data/parents-2016-01-02.csv rename to compliance/m-15-13/data/parents-2016-01-02.csv diff --git a/compliance/data/parents-2016-01-08.csv b/compliance/m-15-13/data/parents-2016-01-08.csv similarity index 100% rename from compliance/data/parents-2016-01-08.csv rename to compliance/m-15-13/data/parents-2016-01-08.csv diff --git a/compliance/data/parents-2016-01-15.csv b/compliance/m-15-13/data/parents-2016-01-15.csv similarity index 100% rename from compliance/data/parents-2016-01-15.csv rename to compliance/m-15-13/data/parents-2016-01-15.csv diff --git a/compliance/data/parents-2016-01-23.csv b/compliance/m-15-13/data/parents-2016-01-23.csv similarity index 100% rename from compliance/data/parents-2016-01-23.csv rename to compliance/m-15-13/data/parents-2016-01-23.csv diff --git a/compliance/data/parents-2016-01-29.csv b/compliance/m-15-13/data/parents-2016-01-29.csv similarity index 100% rename from compliance/data/parents-2016-01-29.csv rename to compliance/m-15-13/data/parents-2016-01-29.csv diff --git a/compliance/data/parents-2016-02-04.csv b/compliance/m-15-13/data/parents-2016-02-04.csv similarity index 100% rename from compliance/data/parents-2016-02-04.csv rename to compliance/m-15-13/data/parents-2016-02-04.csv diff --git a/compliance/data/parents-2016-02-08.csv b/compliance/m-15-13/data/parents-2016-02-08.csv similarity index 100% rename from compliance/data/parents-2016-02-08.csv rename to compliance/m-15-13/data/parents-2016-02-08.csv diff --git a/compliance/data/parents-2016-02-17.csv b/compliance/m-15-13/data/parents-2016-02-17.csv similarity index 100% rename from compliance/data/parents-2016-02-17.csv rename to compliance/m-15-13/data/parents-2016-02-17.csv diff --git a/compliance/data/parents-2016-02-26.csv b/compliance/m-15-13/data/parents-2016-02-26.csv similarity index 100% rename from compliance/data/parents-2016-02-26.csv rename to compliance/m-15-13/data/parents-2016-02-26.csv diff --git a/compliance/data/parents-2016-03-03.csv b/compliance/m-15-13/data/parents-2016-03-03.csv similarity index 100% rename from compliance/data/parents-2016-03-03.csv rename to compliance/m-15-13/data/parents-2016-03-03.csv diff --git a/compliance/data/parents-2016-03-13.csv b/compliance/m-15-13/data/parents-2016-03-13.csv similarity index 100% rename from compliance/data/parents-2016-03-13.csv rename to compliance/m-15-13/data/parents-2016-03-13.csv diff --git a/compliance/data/parents-2016-03-18.csv b/compliance/m-15-13/data/parents-2016-03-18.csv similarity index 100% rename from compliance/data/parents-2016-03-18.csv rename to compliance/m-15-13/data/parents-2016-03-18.csv diff --git a/compliance/data/parents-2016-03-25.csv b/compliance/m-15-13/data/parents-2016-03-25.csv similarity index 100% rename from compliance/data/parents-2016-03-25.csv rename to compliance/m-15-13/data/parents-2016-03-25.csv diff --git a/compliance/data/parents-2016-04-01.csv b/compliance/m-15-13/data/parents-2016-04-01.csv similarity index 100% rename from compliance/data/parents-2016-04-01.csv rename to compliance/m-15-13/data/parents-2016-04-01.csv diff --git a/compliance/data/parents-2016-04-08.csv b/compliance/m-15-13/data/parents-2016-04-08.csv similarity index 100% rename from compliance/data/parents-2016-04-08.csv rename to compliance/m-15-13/data/parents-2016-04-08.csv diff --git a/compliance/data/parents-2016-04-15.csv b/compliance/m-15-13/data/parents-2016-04-15.csv similarity index 100% rename from compliance/data/parents-2016-04-15.csv rename to compliance/m-15-13/data/parents-2016-04-15.csv diff --git a/compliance/data/parents-2016-04-22.csv b/compliance/m-15-13/data/parents-2016-04-22.csv similarity index 100% rename from compliance/data/parents-2016-04-22.csv rename to compliance/m-15-13/data/parents-2016-04-22.csv diff --git a/compliance/data/parents-2016-04-29.csv b/compliance/m-15-13/data/parents-2016-04-29.csv similarity index 100% rename from compliance/data/parents-2016-04-29.csv rename to compliance/m-15-13/data/parents-2016-04-29.csv diff --git a/compliance/data/parents-2016-05-06.csv b/compliance/m-15-13/data/parents-2016-05-06.csv similarity index 100% rename from compliance/data/parents-2016-05-06.csv rename to compliance/m-15-13/data/parents-2016-05-06.csv diff --git a/compliance/data/parents-2016-05-13.csv b/compliance/m-15-13/data/parents-2016-05-13.csv similarity index 100% rename from compliance/data/parents-2016-05-13.csv rename to compliance/m-15-13/data/parents-2016-05-13.csv diff --git a/compliance/data/parents-2016-05-20.csv b/compliance/m-15-13/data/parents-2016-05-20.csv similarity index 100% rename from compliance/data/parents-2016-05-20.csv rename to compliance/m-15-13/data/parents-2016-05-20.csv diff --git a/compliance/data/parents-2016-05-27.csv b/compliance/m-15-13/data/parents-2016-05-27.csv similarity index 100% rename from compliance/data/parents-2016-05-27.csv rename to compliance/m-15-13/data/parents-2016-05-27.csv diff --git a/compliance/data/parents-2016-06-03.csv b/compliance/m-15-13/data/parents-2016-06-03.csv similarity index 100% rename from compliance/data/parents-2016-06-03.csv rename to compliance/m-15-13/data/parents-2016-06-03.csv diff --git a/compliance/data/parents-2016-07-05.csv b/compliance/m-15-13/data/parents-2016-07-05.csv similarity index 100% rename from compliance/data/parents-2016-07-05.csv rename to compliance/m-15-13/data/parents-2016-07-05.csv diff --git a/compliance/data/parents-2016-07-08.csv b/compliance/m-15-13/data/parents-2016-07-08.csv similarity index 100% rename from compliance/data/parents-2016-07-08.csv rename to compliance/m-15-13/data/parents-2016-07-08.csv diff --git a/compliance/data/parents-2016-07-15.csv b/compliance/m-15-13/data/parents-2016-07-15.csv similarity index 100% rename from compliance/data/parents-2016-07-15.csv rename to compliance/m-15-13/data/parents-2016-07-15.csv diff --git a/compliance/data/parents-2016-07-22.csv b/compliance/m-15-13/data/parents-2016-07-22.csv similarity index 100% rename from compliance/data/parents-2016-07-22.csv rename to compliance/m-15-13/data/parents-2016-07-22.csv diff --git a/compliance/data/parents-2016-07-29.csv b/compliance/m-15-13/data/parents-2016-07-29.csv similarity index 100% rename from compliance/data/parents-2016-07-29.csv rename to compliance/m-15-13/data/parents-2016-07-29.csv diff --git a/compliance/data/parents-2016-08-05.csv b/compliance/m-15-13/data/parents-2016-08-05.csv similarity index 100% rename from compliance/data/parents-2016-08-05.csv rename to compliance/m-15-13/data/parents-2016-08-05.csv diff --git a/compliance/data/parents-2016-08-12.csv b/compliance/m-15-13/data/parents-2016-08-12.csv similarity index 100% rename from compliance/data/parents-2016-08-12.csv rename to compliance/m-15-13/data/parents-2016-08-12.csv diff --git a/compliance/data/parents-2016-08-19.csv b/compliance/m-15-13/data/parents-2016-08-19.csv similarity index 100% rename from compliance/data/parents-2016-08-19.csv rename to compliance/m-15-13/data/parents-2016-08-19.csv diff --git a/compliance/data/parents-2016-08-26.csv b/compliance/m-15-13/data/parents-2016-08-26.csv similarity index 100% rename from compliance/data/parents-2016-08-26.csv rename to compliance/m-15-13/data/parents-2016-08-26.csv diff --git a/compliance/data/parents-2016-09-02.csv b/compliance/m-15-13/data/parents-2016-09-02.csv similarity index 100% rename from compliance/data/parents-2016-09-02.csv rename to compliance/m-15-13/data/parents-2016-09-02.csv diff --git a/compliance/data/parents-2016-09-09.csv b/compliance/m-15-13/data/parents-2016-09-09.csv similarity index 100% rename from compliance/data/parents-2016-09-09.csv rename to compliance/m-15-13/data/parents-2016-09-09.csv diff --git a/compliance/data/parents-2016-09-16.csv b/compliance/m-15-13/data/parents-2016-09-16.csv similarity index 100% rename from compliance/data/parents-2016-09-16.csv rename to compliance/m-15-13/data/parents-2016-09-16.csv diff --git a/compliance/data/parents-2016-09-23.csv b/compliance/m-15-13/data/parents-2016-09-23.csv similarity index 100% rename from compliance/data/parents-2016-09-23.csv rename to compliance/m-15-13/data/parents-2016-09-23.csv diff --git a/compliance/data/parents-2016-10-03.csv b/compliance/m-15-13/data/parents-2016-10-03.csv similarity index 100% rename from compliance/data/parents-2016-10-03.csv rename to compliance/m-15-13/data/parents-2016-10-03.csv diff --git a/compliance/data/parents-2016-10-07.csv b/compliance/m-15-13/data/parents-2016-10-07.csv similarity index 100% rename from compliance/data/parents-2016-10-07.csv rename to compliance/m-15-13/data/parents-2016-10-07.csv diff --git a/compliance/data/parents-2016-10-14.csv b/compliance/m-15-13/data/parents-2016-10-14.csv similarity index 100% rename from compliance/data/parents-2016-10-14.csv rename to compliance/m-15-13/data/parents-2016-10-14.csv diff --git a/compliance/data/parents-2016-10-21.csv b/compliance/m-15-13/data/parents-2016-10-21.csv similarity index 100% rename from compliance/data/parents-2016-10-21.csv rename to compliance/m-15-13/data/parents-2016-10-21.csv diff --git a/compliance/data/parents-2016-10-28.csv b/compliance/m-15-13/data/parents-2016-10-28.csv similarity index 100% rename from compliance/data/parents-2016-10-28.csv rename to compliance/m-15-13/data/parents-2016-10-28.csv diff --git a/compliance/data/parents-2016-11-04.csv b/compliance/m-15-13/data/parents-2016-11-04.csv similarity index 100% rename from compliance/data/parents-2016-11-04.csv rename to compliance/m-15-13/data/parents-2016-11-04.csv diff --git a/compliance/data/parents-2016-11-11.csv b/compliance/m-15-13/data/parents-2016-11-11.csv similarity index 100% rename from compliance/data/parents-2016-11-11.csv rename to compliance/m-15-13/data/parents-2016-11-11.csv diff --git a/compliance/data/parents-2016-11-18.csv b/compliance/m-15-13/data/parents-2016-11-18.csv similarity index 100% rename from compliance/data/parents-2016-11-18.csv rename to compliance/m-15-13/data/parents-2016-11-18.csv diff --git a/compliance/data/parents-2016-11-25.csv b/compliance/m-15-13/data/parents-2016-11-25.csv similarity index 100% rename from compliance/data/parents-2016-11-25.csv rename to compliance/m-15-13/data/parents-2016-11-25.csv diff --git a/compliance/data/parents-2016-12-02.csv b/compliance/m-15-13/data/parents-2016-12-02.csv similarity index 100% rename from compliance/data/parents-2016-12-02.csv rename to compliance/m-15-13/data/parents-2016-12-02.csv diff --git a/compliance/data/parents-2016-12-05.csv b/compliance/m-15-13/data/parents-2016-12-05.csv similarity index 100% rename from compliance/data/parents-2016-12-05.csv rename to compliance/m-15-13/data/parents-2016-12-05.csv diff --git a/compliance/data/parents-2016-12-08.csv b/compliance/m-15-13/data/parents-2016-12-08.csv similarity index 100% rename from compliance/data/parents-2016-12-08.csv rename to compliance/m-15-13/data/parents-2016-12-08.csv diff --git a/compliance/data/parents-2016-12-17.csv b/compliance/m-15-13/data/parents-2016-12-17.csv similarity index 100% rename from compliance/data/parents-2016-12-17.csv rename to compliance/m-15-13/data/parents-2016-12-17.csv diff --git a/compliance/data/parents-2016-12-21.csv b/compliance/m-15-13/data/parents-2016-12-21.csv similarity index 100% rename from compliance/data/parents-2016-12-21.csv rename to compliance/m-15-13/data/parents-2016-12-21.csv diff --git a/compliance/data/parents-2016-12-24.csv b/compliance/m-15-13/data/parents-2016-12-24.csv similarity index 100% rename from compliance/data/parents-2016-12-24.csv rename to compliance/m-15-13/data/parents-2016-12-24.csv diff --git a/compliance/data/parents-2016-12-26.csv b/compliance/m-15-13/data/parents-2016-12-26.csv similarity index 100% rename from compliance/data/parents-2016-12-26.csv rename to compliance/m-15-13/data/parents-2016-12-26.csv diff --git a/compliance/data/parents-2016-12-28.csv b/compliance/m-15-13/data/parents-2016-12-28.csv similarity index 100% rename from compliance/data/parents-2016-12-28.csv rename to compliance/m-15-13/data/parents-2016-12-28.csv diff --git a/compliance/data/parents-2016-12-31.csv b/compliance/m-15-13/data/parents-2016-12-31.csv similarity index 100% rename from compliance/data/parents-2016-12-31.csv rename to compliance/m-15-13/data/parents-2016-12-31.csv diff --git a/compliance/reports.py b/compliance/m-15-13/reports.py similarity index 95% rename from compliance/reports.py rename to compliance/m-15-13/reports.py index 177e22a..6c3e9dc 100644 --- a/compliance/reports.py +++ b/compliance/m-15-13/reports.py @@ -8,13 +8,13 @@ name = "All executive parent domains" compliance_stats(name, parents_only, utils.executive_only) -name ="All executive CFO Act parent domains" +name = "All executive CFO Act parent domains" compliance_stats(name, parents_only, utils.cfo_act_only) -name ="All executive CFO Act (minus DoD) parent domains" +name = "All executive CFO Act (minus DoD) parent domains" compliance_stats(name, parents_only, utils.cfo_act_only_sans_dod) -name ="All executive non-CFO-Act parent domains" +name = "All executive non-CFO-Act parent domains" compliance_stats(name, parents_only, utils.executive_non_cfo_act) @@ -24,13 +24,13 @@ name = "All executive subdomains" compliance_stats(name, subdomains, utils.executive_only) -name ="All executive CFO Act subdomains" +name = "All executive CFO Act subdomains" compliance_stats(name, subdomains, utils.cfo_act_only) -name ="All executive CFO Act (minus DoD) subdomains" +name = "All executive CFO Act (minus DoD) subdomains" compliance_stats(name, subdomains, utils.cfo_act_only_sans_dod) -name ="All executive non-CFO-Act subdomains" +name = "All executive non-CFO-Act subdomains" compliance_stats(name, subdomains, utils.executive_non_cfo_act) # agency = "General Services Administration" diff --git a/compliance/utils.py b/compliance/m-15-13/utils.py similarity index 100% rename from compliance/utils.py rename to compliance/m-15-13/utils.py diff --git a/deploy/fabfile.py b/deploy/fabfile.py deleted file mode 100644 index adea85a..0000000 --- a/deploy/fabfile.py +++ /dev/null @@ -1,44 +0,0 @@ -import time -from fabric.api import run, execute, env, cd - -""" -Manage auto-deploy webhooks remotely. - -Production hook: - - forever start -l $HOME/hookshot.log -a deploy/hookshot.js -p 4000 -b production -c "cd $HOME/production/current && git pull && bundle exec jekyll build >> $HOME/hookshot.log" - forever restart deploy/hookshot.js -p 4000 -b production -c "cd $HOME/production/current && git pull && bundle exec jekyll build >> $HOME/hookshot.log" - forever stop deploy/hookshot.js -p 4000 -b production -c "cd $HOME/production/current && git pull && bundle exec jekyll build >> $HOME/hookshot.log" -""" - -environment = "production" -branch = "master" -port = 4000 - -env.hosts = ["site@https"] -env.use_ssh_config = True - -home = "/home/site" -log = "%s/hookshot.log" % home -current = "%s/%s/current" % (home, environment) - -# principal command to run upon update -command = "cd %s && git pull && bundle exec jekyll build >> %s" % (current, log) - -def start(): - run( - "cd %s && forever start -l %s -a deploy/hookshot.js -p %i -b %s -c \"%s\"" - % (current, log, port, branch, command) - ) - -def stop(): - run( - "cd %s && forever stop deploy/hookshot.js -p %i -b %s -c \"%s\"" - % (current, port, branch, command) - ) - -def restart(): - run( - "cd %s && forever restart deploy/hookshot.js -p %i -b %s -c \"%s\"" - % (current, port, branch, command) - ) diff --git a/deploy/hookshot.js b/deploy/hookshot.js deleted file mode 100755 index 2542332..0000000 --- a/deploy/hookshot.js +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env node - -var hookshot = require("hookshot"); -var spawn = require("child_process").spawn; -var options = require('minimist')(process.argv.slice(2)); - -var branch = options.b || options.branch; -var command = options.c || options.command; -var port = options.p || options.port; - -if (!branch || !command || !port) { - console.error("--branch, --command, and --port are all required.") - process.exit(1); -} - -hookshot('refs/heads/' + branch, command).listen(port); - -console.log("Huzzah! Listening on port " + port + " for push events on " + branch + ".") diff --git a/deploy/site.conf b/deploy/site.conf deleted file mode 100644 index 028a60b..0000000 --- a/deploy/site.conf +++ /dev/null @@ -1,45 +0,0 @@ -server { - server_name https.cio.gov; - listen 443 ssl http2 default_server; - - ssl_certificate /etc/letsencrypt/live/pulse.cio.gov/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/pulse.cio.gov/privkey.pem; - - include ssl/ssl.rules; - include headers.rules; - - error_page 404 /404/index.html; - error_page 500 /500/index.html; - - location / { - root /home/site/production/current/_site; - default_type text/html; - } - - # production hook runs on port 4000 - location /deploy { - proxy_pass http://localhost:4000/; - proxy_http_version 1.1; - proxy_redirect off; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - proxy_max_temp_file_size 0; - - proxy_connect_timeout 10; - proxy_send_timeout 30; - proxy_read_timeout 30; - } - - access_log /home/site/production/nginx_access.log main; - error_log /home/site/production/nginx_error.log; -} - -# redirect for those clients not preloaded with https.cio.gov -server { - listen 80; - server_name https.cio.gov; - return 301 https://https.cio.gov$request_uri; -} diff --git a/favicon.ico b/favicon.ico new file mode 100755 index 0000000..c8c9f1c Binary files /dev/null and b/favicon.ico differ diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..5d99d3d --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,46 @@ +'use strict'; + +const path = require('path'); +const gulp = require('gulp'); +const sass = require('gulp-sass'); +const sourcemaps = require('gulp-sourcemaps'); +const exec = require('child_process').exec; + +const PORT = process.env.PORT || '8000'; + +const USWDS_DIST = 'node_modules/uswds/dist'; +const USWDS_DIST_DIR = path.join(__dirname, ...USWDS_DIST.split('/')); + +const PROJECT_SASS_SRC = "./assets/sass/**/*.scss"; +const PROJECT_CSS_DEST = './assets/css' + +const PROJECT_ASSETS_SRC = `${USWDS_DIST}/@(js|fonts|img)/**/**` +const PROJECT_ASSETS_DEST = './assets/vendor/uswds' + + +gulp.task('copy-uswds-assets', () => { + return gulp.src(PROJECT_ASSETS_SRC) + .pipe(gulp.dest(PROJECT_ASSETS_DEST)); +}); + +gulp.task('build-sass', () => { + return gulp.src(PROJECT_SASS_SRC) + .pipe(sourcemaps.init()) + .pipe(sass({ + includePaths: [ + path.join(USWDS_DIST_DIR, 'scss'), + ] + }).on('error', sass.logError)) + .pipe(sourcemaps.write()) + .pipe(gulp.dest(PROJECT_CSS_DEST)); +}); + +/** entry points **/ + +// gulp.task('init', gulp.series('copy-uswds-assets')); + +gulp.task('watch', () => { + gulp.watch(PROJECT_SASS_SRC, gulp.series('copy-uswds-assets','build-sass')); +}); + +gulp.task('default', gulp.series('copy-uswds-assets', 'build-sass')); diff --git a/manifest.yml b/manifest.yml deleted file mode 100644 index e9ab2e3..0000000 --- a/manifest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -applications: -- name: https-site - memory: 128M - buildpack: staticfile-buildpack diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..426aeff --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7152 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz", + "integrity": "sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==" + }, + "@babel/core": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz", + "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-compilation-targets": "^7.13.10", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helpers": "^7.13.10", + "@babel/parser": "^7.13.10", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz", + "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==", + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", + "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", + "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", + "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + }, + "@babel/helpers": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.10.tgz", + "integrity": "sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", + "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.0", + "@babel/types": "^7.13.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", + "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@gulp-sourcemaps/identity-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", + "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==", + "requires": { + "acorn": "^6.4.1", + "normalize-path": "^3.0.0", + "postcss": "^7.0.16", + "source-map": "^0.6.0", + "through2": "^3.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "@gulp-sourcemaps/map-sources": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", + "requires": { + "normalize-path": "^2.0.1", + "through2": "^2.0.3" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "requires": { + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" + } + }, + "@types/vfile-message": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz", + "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==", + "requires": { + "vfile-message": "*" + } + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-foreach": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-foreach/-/array-foreach-1.0.2.tgz", + "integrity": "sha1-zTbkLw9IIQjEBrNcNhKolwsvzOo=" + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "requires": { + "async-done": "^1.2.2" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "~2.0.0" + } + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "requires": { + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "requires": { + "resolve": "^1.17.0" + } + }, + "browserify": { + "version": "16.5.2", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", + "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "requires": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } + }, + "caniuse-lite": { + "version": "1.0.30001198", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001198.tgz", + "integrity": "sha512-r5GGgESqOPZzwvdLVER374FpQu2WluCF1Z2DSiFJ89KSmGjT0LVKjgv4NcAqHmGWF9ihNpqRI9KXO9Ex4sKsgA==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classlist-polyfill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz", + "integrity": "sha1-k1vC39lFiodrJ5YXUUY4vKqWSi4=" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "requires": { + "is-regexp": "^2.0.0" + } + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + } + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "requires": { + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + } + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "debug-fabulous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", + "requires": { + "debug": "3.X", + "memoizee": "0.4.X", + "object-assign": "4.X" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "del": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "requires": { + "globby": "^10.0.1", + "graceful-fs": "^4.2.2", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.1", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "requires": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + } + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domready": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz", + "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.686", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.686.tgz", + "integrity": "sha512-SOJT3m00NX/gT3sD6E3PcZX6u3+zUmQq4+yp8QCKLOwf2ECnmh9eAY+eonhC/AAu5Gg2WrtUU2m7/+e85O0l6A==" + }, + "elem-dataset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/elem-dataset/-/elem-dataset-1.1.1.tgz", + "integrity": "sha1-GPB/p/xx69SbD59jgZywPIJ2V3o=" + }, + "element-closest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/element-closest/-/element-closest-2.0.2.tgz", + "integrity": "sha1-cqdAoQdFM4LijfnOXbtajfD5Zuw=" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + }, + "dependencies": { + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=" + }, + "globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "requires": { + "sparkles": "^1.0.0" + } + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + } + } + }, + "gulp-sass": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.1.0.tgz", + "integrity": "sha512-xIiwp9nkBLcJDpmYHbEHdoWZv+j+WtYaKD6Zil/67F3nrAaZtWYN5mDwerdo7EvcdBenSAj7Xb2hx2DqURLGdA==", + "requires": { + "chalk": "^2.3.0", + "lodash": "^4.17.11", + "node-sass": "^4.8.3", + "plugin-error": "^1.0.1", + "replace-ext": "^1.0.0", + "strip-ansi": "^4.0.0", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "gulp-sourcemaps": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", + "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==", + "requires": { + "@gulp-sourcemaps/identity-map": "^2.0.1", + "@gulp-sourcemaps/map-sources": "^1.0.0", + "acorn": "^6.4.1", + "convert-source-map": "^1.0.0", + "css": "^3.0.0", + "debug-fabulous": "^1.0.0", + "detect-newline": "^2.0.0", + "graceful-fs": "^4.0.0", + "source-map": "^0.6.0", + "strip-bom-string": "^1.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "requires": { + "glogg": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "requires": { + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==" + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" + }, + "keyboardevent-key-polyfill": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keyboardevent-key-polyfill/-/keyboardevent-key-polyfill-1.1.0.tgz", + "integrity": "sha1-ijGdjkWhMXL8pWKGNy+QwdTHAUw=" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "known-css-properties": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.16.0.tgz", + "integrity": "sha512-0g5vDDPvNnQk7WM/aE92dTDxXJoOE0biiIcUb3qkn/F6h/ZQZPlZIbE2XSXH2vFPfphkgCxuR2vH6HHnobEOaQ==" + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "requires": { + "chalk": "^2.4.2" + } + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "requires": { + "es5-ext": "~0.10.2" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "matches-selector": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz", + "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==" + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-util-compact": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "dependencies": { + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + } + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "requires": { + "mime-db": "1.46.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + } + } + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, + "node-sass": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=" + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "requires": { + "once": "^1.3.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "requires": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-jsx": { + "version": "0.36.4", + "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.4.tgz", + "integrity": "sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA==", + "requires": { + "@babel/core": ">=7.2.2" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-markdown": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz", + "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==", + "requires": { + "remark": "^10.0.1", + "unist-util-find-all-after": "^1.0.2" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" + }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + }, + "dependencies": { + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "requires": { + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==" + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==" + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "receptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/receptor/-/receptor-1.0.0.tgz", + "integrity": "sha1-v1RHfgOH5Evr84VRILvaWt6gj4s=", + "requires": { + "element-closest": "^2.0.1", + "keyboardevent-key-polyfill": "^1.0.2", + "matches-selector": "^1.0.0", + "object-assign": "^4.1.0" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remark": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", + "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "requires": { + "remark-parse": "^6.0.0", + "remark-stringify": "^6.0.0", + "unified": "^7.0.0" + } + }, + "remark-parse": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", + "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", + "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve-id-refs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/resolve-id-refs/-/resolve-id-refs-0.1.0.tgz", + "integrity": "sha1-MSZiS4h0idqPwK6IljL4QTrGw+w=" + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "requires": { + "sver-compat": "^1.5.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "requires": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + }, + "stream-http": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", + "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" + }, + "stylelint": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-11.1.1.tgz", + "integrity": "sha512-Vx6TAJsxG6qksiFvxQTKriQhp1CqUWdpTDITEkAjTR+l+8Af7qNlvrUDXfpuFJgXh/ayF8xdMSKE+SstcsPmMA==", + "requires": { + "autoprefixer": "^9.5.1", + "balanced-match": "^1.0.0", + "chalk": "^2.4.2", + "cosmiconfig": "^5.2.0", + "debug": "^4.1.1", + "execall": "^2.0.0", + "file-entry-cache": "^5.0.1", + "get-stdin": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^9.2.0", + "globjoin": "^0.1.4", + "html-tags": "^3.0.0", + "ignore": "^5.0.6", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.16.0", + "leven": "^3.1.0", + "lodash": "^4.17.14", + "log-symbols": "^3.0.0", + "mathml-tag-names": "^2.1.0", + "meow": "^5.0.0", + "micromatch": "^4.0.0", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.14", + "postcss-html": "^0.36.0", + "postcss-jsx": "^0.36.3", + "postcss-less": "^3.1.4", + "postcss-markdown": "^0.36.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.1", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.1", + "postcss-sass": "^0.4.1", + "postcss-scss": "^2.0.0", + "postcss-selector-parser": "^3.1.0", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.0.2", + "resolve-from": "^5.0.0", + "signal-exit": "^3.0.2", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.1.0", + "strip-ansi": "^5.2.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.2.3", + "v8-compile-cache": "^2.1.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "requires": { + "path-type": "^3.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + } + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=" + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=" + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "requires": { + "minimist": "^1.1.0" + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "requires": { + "postcss": "^7.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "requires": { + "acorn-node": "^1.2.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "requires": { + "process": "~0.11.0" + } + }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "requires": { + "through2": "^2.0.3" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "requires": { + "glob": "^7.1.2" + } + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==" + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unified": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", + "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "requires": { + "@types/unist": "^2.0.0", + "@types/vfile": "^3.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^3.0.0", + "x-is-string": "^0.1.0" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "unist-util-find-all-after": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz", + "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==", + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "uswds": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/uswds/-/uswds-1.6.13.tgz", + "integrity": "sha512-s0Nr/TU4bcrqG89oC9ncxR9uhx2mf7C83qKnyKkhWHsdda9J8bDCcf7fFSDLcNC2DQYWHvXXPCRly9/od8XtAg==", + "requires": { + "@types/node": "^8.5.5", + "array-filter": "^1.0.0", + "array-foreach": "^1.0.2", + "browserify": "^16.5.0", + "classlist-polyfill": "^1.0.3", + "del": "^5.1.0", + "domready": "^1.0.8", + "elem-dataset": "^1.1.1", + "lodash.debounce": "^4.0.7", + "object-assign": "^4.1.1", + "receptor": "^1.0.0", + "resolve-id-refs": "^0.1.0", + "stylelint": "^11.1.1", + "typescript": "^2.4.1", + "yargs": "^12.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + } + } + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "requires": { + "source-map": "^0.5.1" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", + "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "5.0.0-security.0" + } + }, + "yargs-parser": { + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..01af17a --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "scripts": { + "build": "gulp", + "federalist": "npm run build" + }, + "dependencies": { + "gulp": "^4.0.2", + "gulp-sass": "^4.1.0", + "gulp-sourcemaps": "^3.0.0", + "uswds": "^1.3.0" + } +} diff --git a/pages/apis.md b/pages/apis.md index ee5c605..2c66da4 100644 --- a/pages/apis.md +++ b/pages/apis.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: Migrating APIs to HTTPS permalink: /apis/ description: "An outline of the process for migrating a web API from HTTP to HTTPS." diff --git a/pages/certificate-policy.md b/pages/certificate-policy.md deleted file mode 100644 index dcb5aa4..0000000 --- a/pages/certificate-policy.md +++ /dev/null @@ -1,1819 +0,0 @@ ---- -layout: page -title: Certificate Policy -permalink: /uspki/certificate-policy/ -description: "Draft Certificate Policy for U.S. PKI." ---- - -**U.S. PKI** - - - -**Certificate Policy** -**for the** -**Issuance and Management of** -**Publicly-Trusted Certificates** - - - - -**Version 0.0.1** - -**October 28, 2016** - -For details on copyright and license information for this doucment, see section 1.1. - - -# 1. INTRODUCTION - -## 1.1 Overview -This CP describes an integrated set of technologies, protocols, identity-proofing, lifecycle management, and auditing requirements that are necessary (but not sufficient) for the issuance and management of Publicly-Trusted Certificates; Certificates that are trusted by virtue of the fact that their corresponding Root Certificate is distributed in widely-available application software. The requirements are not mandatory for Certification Authorities unless and until they become adopted and enforced by relying-party Application Software Suppliers. - -**Notice to Readers** - -The CP for the Issuance and Management of Publicly-Trusted Certificates describe a subset of the requirements that a Certification Authority must meet in order to issue Publicly Trusted Certificates. This document serves two purposes: to specify Baseline Requirements and to provide guidance and requirements for what a CA should include in its CPS. Except where explicitly stated otherwise, these Requirements apply only to relevant events that occur on or after the Effective Date. - -These Requirements do not address all of the issues relevant to the issuance and management of Publicly-Trusted Certificates. In accordance with RFC 3647 and to facilitate a comparison of other certificate policies and CPSs (e.g. for policy mapping), this CP includes all sections of the RFC 3647 framework. However, rather than beginning with a "no stipulation" comment in all empty sections, the CA/Browser Forum is leaving such sections initially blank until a decision of "no stipulation" is made. The CA/Browser Forum may update these Requirements from time to time, in order to address both existing and emerging threats to online security. In particular, it is expected that a future version will contain more formal and comprehensive audit requirements for delegated functions. - -These Requirements only address Certificates intended to be used for authenticating servers accessible through the Internet. Similar requirements for code signing, S/MIME, time-stamping, VoIP, IM, Web services, etc. may be covered in future versions. - -These Requirements do not address the issuance, or management of Certificates by enterprises that operate their own Public Key Infrastructure for internal purposes only, and for which the Root Certificate is not distributed by any Application Software Supplier. - -These Requirements are applicable to all Certification Authorities within a chain of trust. They are to be flowed down from the Root Certification Authority through successive Subordinate Certification Authorities. - -This work is based on the CA/Browser Forum Baseline Requirements v1.4.1, which is licensed under the Creative Commons Attribution-NoDerivatives 4.0 International License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nd/4.0/. - -All original additions and modifications made to create this document are in the public domain, and copyright and related rights in the work are waived worldwide through the CC0 1.0 Universal public domain dedication. To view a copy of this public domain dedication, visit https://creativecommons.org/publicdomain/zero/1.0/. - -## 1.2 Document name and identification -This certificate policy (CP) contains the requirements for the issuance and management of publicly-trusted SSL certificates, as adopted by the CA/Browser Forum. - - -The following Certificate Policy identifiers are reserved for use by CAs as an optional means of asserting compliance with this CP (OID arc 2.23.140.1.2) as follows: - -{joint-iso-itu-t(2) international-organizations(23) ca-browser-forum(140) certificate-policies(1) baseline-requirements(2) domain-validated(1)} (2.23.140.1.2.1); and - - -{joint-iso-itu-t(2) international-organizations(23) ca-browser-forum(140) certificate-policies(1) baseline-requirements(2) organization-validated(2)} (2.23.140.1.2.2); and - -{joint-iso-itu-t(2) international-organizations(23) ca-browser-forum(140) certificate-policies(1) baseline-requirements(2) individual-validated(3)} (2.23.140.1.2.3). - - -### 1.2.1.Revisions - -| **Ver.** | **Ballot** | **Description** | **Adopted** | **Effective\*** | -| --- | --- | --- | --- | --- | -| 1.0.0 | 62 | Version 1.0 of the Baseline Requirements Adopted | 22-Nov-11 | 01-Jul-12 | -| 1.0.1 | 71 | Revised Auditor Qualifications | 08-May-12 | 01-Jan-13 | -| 1.0.2 | 75 | Non-critical Name Constraints allowed as exception to RFC 5280 | 08-Jun-12 | 08-Jun-12 | -| 1.0.3 | 78 | Revised Domain/IP Address Validation, High Risk Requests, and Data Sources | 22-Jun-12 | 22-Jun-12 | -| 1.0.4 | 80 | OCSP responses for non-issued certificates | 02-Aug-12 | 01-Feb-13 01-Aug-13 | -| -- | 83 | Network and Certificate System Security Requirements adopted | 03-Aug-13 | 01-Jan-13 | -| 1.0.5 | 88 | User-assigned country code of XX allowed | 12-Sep-12 | 12-Sep-12 | -| 1.1.0 | -- | Published as Version 1.1 with no changes from 1.0.5 | 14-Sep-12 | 14-Sep-12 | -| 1.1.1 | 93 | Reasons for Revocation and Public Key Parameter checking | 07-Nov-12 | 07-Nov-12 01-Jan-13 | -| 1.1.2 | 96 | Wildcard certificates and new gTLDs | 20-Feb-13 | 20-Feb-13 01-Sep-13 | -| 1.1.3 | 97 | Prevention of Unknown Certificate Contents | 21-Feb-13 | 21-Feb-13 | -| 1.1.4 | 99 | Add DSA Keys (BR v.1.1.4) | 3-May-2013 | 3-May-2013 | -| 1.1.5 | 102 | Revision to subject domainComponent language in section 9.2.3 | 31-May-2013 | 31-May-2013 | -| 1.1.6 | 105 | Technical Constraints for Subordinate Certificate Authorities | 29-July-2013 | 29-July-2013 | -| 1.1.7 | 112 | Replace Definition of "Internal Server Name" with "Internal Name" | 3-April-2014 | 3-April-2014 | -| 1.1.8 | 120 | Affiliate Authority to Verify Domain | 5-June-2014 | 5-June-2014 | -| 1.1.9 | 129 | Clarification of PSL mentioned in Section 11.1.3 | 4-Aug-2014 | 4-Aug-2014 | -| 1.2.0 | 125 | CAA Records | 14-Oct-2014 | 15-Apr-2015 | -| 1.2.1 | 118 | SHA-1 Sunset | 16-Oct-2014 | 16-Jan-2015 1-Jan-2016 1-Jan-2017 | -| 1.2.2 | 134 | Application of RFC 5280 to Pre-certificates | 16-Oct-2014 | 16-Oct-2014 | -| 1.2.3 | 135 | ETSI Auditor Qualifications | 16-Oct-2014 | 16-Oct-2014 | -| 1.2.4 | 144 | Validation Rules for .onion Names | 18-Feb-2015 | 18-Feb-2015 | -| 1.2.5 | 148 | Issuer Field Correction | 2-April-2015 | 2-April-2015 | -| 1.3.0 | 146 | Convert Baseline Requirements to RFC 3647 Framework | 16-Apr-2015 | 16-Apr-2015 | -| 1.3.1 | 151 | Addition of Optional OIDs for Indicating Level of Validation | 28-Sep-2015 | 28-Sep-2015 | -| 1.3.2 | 156 | Amend Sections 1 and 2 of Baseline Requirements | 3-Dec-2015 | 3-Dec-2016 | -| 1.3.3 | 160 | Amend Section 4 of Baseline Requirements | 4-Feb-2016 | 4-Feb-2016 | -| 1.3.4 | 162 | Sunset of Exceptions | 15-Mar-2016 | 15-Mar-2016 | -| 1.3.5 | 168 | Baseline Requirements Corrections (Revised) | 10-May-2016 | 10-May-2016 | -| 1.3.6 | 171 | Updating ETSI Standards in CABF documents | 1-July-2016 | 1-July-2016 | -| 1.3.7 | 164 | Certificate Serial Number Entropy | 8-July-2016 | 30-Sep-2016 | -| 1.3.8 | 169 | Revised Validation Requirements | 5-Aug-2016 | 1-Mar-2017 | -| 1.3.9 | 174 | Reform of Requirements Relating to Conflicts with Local Law | 29-Aug-2016 | 27-Nov-2016 | -| 1.4.0 | 173 | Removal of requirement to cease use of public key due to incorrect info | 28-July-2016 | 11-Sept-2016 | -| 1.4.1 | 175 | Addition of givenName and surname | 7-Sept-2016 | 7-Sept-2016 | - -\* Effective Date and Additionally Relevant Compliance Date(s) - -### 1.2.2.Relevant Dates - -| **Compliance** | **Section(s)** | **Summary Description (See Full Text for Details)** | -| --- | --- | --- | -| 2013-01-01 | 6.1.6 | For RSA public keys, CAs SHALL confirm that the value of the public exponent is an odd number equal to 3 or more. | -| 2013-01-01 | 4.9.10 | CAs SHALL support an OCSP capability using the GET method. | -| 2013-01-01 | 5 | CAs SHALL comply with the Network and Certificate System Security Requirements. | -| 2013-08-01 | 4.9.10 | OCSP Responders SHALL NOT respond "Good" for Unissued Certificates. | -| 2013-09-01 | 3.2.2.6 | CAs SHALL revoke any certificate where wildcard character occurs in the first label position immediately to the left of a "registry-controlled" label or "public suffix". | -| 2013-12-31 | 6.1.5 | CAs SHALL confirm that the RSA Public Key is at least 2048 bits or that one of the following ECC curves is used: P-256, P-384, or P-521. A Root CA Certificate issued prior to 31 Dec. 2010 with an RSA key size less than 2048 bits MAY still serve as a trust anchor. | -| 2015-01-16 | 7.1.3 | CAs SHOULD NOT issue Subscriber Certificates utilizing the SHA-1 algorithm with an Expiry Date greater than 1 January 2017. | -| 2015-04-01 | 6.3.2 | CAs SHALL NOT issue certificates with validity periods longer than 39 months, except under certain circumstances. | -| 2015-04-15 | 2.2 | A CA's CPS must state whether it reviews CAA Records, and if so, its policy or practice on processing CAA records for Fully Qualified Domain Names. | -| 2015-11-01 | 7.1.4.2.1 | Issuance of Certificates with Reserved IP Address or Internal Name prohibited. | -| 2016-01-01 | 7.1.3 | CAs MUST NOT issue any new Subscriber certificates or Subordinate CA certificates using the SHA-1 hash algorithm. | -| 2016-06-30 | 6.1.7 | CAs MUST NOT issue Subscriber Certificates directly from Root CAs. | -| 2016-06-30 | 6.3.2 | CAs MUST NOT issue Subscriber Certificates with validity periods longer than 39 months, regardless of circumstance. | -| 2016‐09‐30 | 7.1 | CAs SHALL generate Certificate serial numbers greater than zero (0) containing at least 64 bits of output from a CSPRNG | -| 2016-10-01 | 7.1.4.2.1 | All Certificates with Reserved IP Address or Internal Name must be revoked. | -| 2016-12-03 | 1 and 2 | Ballot 156 amendments to sections 1.5.2, 2.3, and 2.4 are applicable | -| 2017-01-01 | 7.1.3 | CAs MUST NOT issue OCSP responder certificates using SHA-1 (inferred). | -| 2017-03-01 | 3.2.2.4 | CAs MUST follow revised validation requirements in section 3.2.2.4. | - - - -## 1.3 PKI Participants -The CA/Browser Forum is a voluntary organization of Certification Authorities and suppliers of Internet browser and other relying-party software applications. - -### 1.3.1 Certification Authorities -Certification Authority (CA) is defined in Section 1.6. Current CA Members of the CA/Browser Forum are listed here: https://cabforum.org/members. - -### 1.3.2 Registration Authorities -The CA MAY delegate the performance of all, or any part, of Section 3.2 requirements to a Delegated Third Party, provided that the process as a whole fulfills all of the requirements of Section 3.2. - -Before the CA authorizes a Delegated Third Party to perform a delegated function, the CA SHALL contractually require the Delegated Third Party to: - -1. Meet the qualification requirements of Section 5.3.1, when applicable to the delegated function; -2. Retain documentation in accordance with Section 5.5.2; -3. Abide by the other provisions of these Requirements that are applicable to the delegated function; and -4. Comply with (a) the CA's Certificate Policy/Certification Practice Statement or (b) the Delegated Third Party's practice statement that the CA has verified complies with these Requirements. - -The CA MAY designate an Enterprise RA to verify certificate requests from the Enterprise RA's own organization. -The CA SHALL NOT accept certificate requests authorized by an Enterprise RA unless the following requirements are satisfied: - -1. The CA SHALL confirm that the requested Fully-Qualified Domain Name(s) are within the Enterprise -RA's verified Domain Namespace. -2. If the certificate request includes a Subject name of a type other than a Fully-Qualified Domain Name, the CA SHALL confirm that the name is either that of the delegated enterprise, or an Affiliate of the delegated enterprise, or that the delegated enterprise is an agent of the named Subject. For example, the CA SHALL NOT issue a Certificate containing the Subject name "XYZ Co." on the authority of Enterprise RA "ABC Co.", unless the two companies are affiliated (see Section 3.2) or "ABC Co." is the agent of "XYZ Co". This requirement applies regardless of whether the accompanying requested Subject FQDN falls within the Domain Namespace of ABC Co.'s Registered Domain Name. - -The CA SHALL impose these limitations as a contractual requirement on the Enterprise RA and monitor compliance by the Enterprise RA. - - -### 1.3.3 Subscribers -As defined in Section 1.6.1. - - -### 1.3.4 Relying Parties -"Relying Party" and "Application Software Supplier" are defined in Section 1.6.1. Current Members of the CA/Browser Forum who are Application Software Suppliers are listed here: https://cabforum.org/members. - - -### 1.3.5 Other Participants -Other groups that have participated in the development of these Requirements include the AICPA/CICA WebTrust for Certification Authorities task force and ETSI ESI. Participation by such groups does not imply their endorsement, recommendation, or approval of the final product. - - -## 1.4 Certificate Usage - -### 1.4.1 Appropriate Certificate Uses -The primary goal of these Requirements is to enable efficient and secure electronic communication, while addressing user concerns about the trustworthiness of Certificates. These Requirements also serve to inform users and help them to make informed decisions when relying on Certificates. - - -### 1.4.2 Prohibited Certificate Uses -No stipulation. - -## 1.5 Policy administration -This Certificate Policy for Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates present criteria established by the CA/Browser Forum for use by Certification Authorities when issuing, maintaining, and revoking publicly-trusted Certificates. This CP may be revised from time to time, as appropriate, in accordance with procedures adopted by the CA/Browser Forum. Because one of the primary beneficiaries of this CP is the end user, the Forum openly invites anyone to make recommendations and suggestions by email to the CA/Browser Forum at questions@cabforum.org. The Forum members value all input, regardless of source, and will seriously consider all such input. - - -### 1.5.1 Organization Administering the Document -No stipulation. - -### 1.5.2 Contact Person -Contact information for the CA/Browser Forum is available here: https://cabforum.org/leadership/. In this section of a CA's CPS, the CA shall provide a link to a web page or an email address for contacting the person or persons responsible for operation of the CA. - -### 1.5.3 Person Determining CPS suitability for the policy -No stipulation. - -### 1.5.4 CPS approval procedures -No stipulation. - -## 1.6 Definitions and Acronyms - -### 1.6.1 Definitions - -**Affiliate**: A corporation, partnership, joint venture or other entity controlling, controlled by, or under common control with another entity, or an agency, department, political subdivision, or any entity operating under the direct control of a Government Entity. - -**Applicant**: The natural person or Legal Entity that applies for (or seeks renewal of) a Certificate. Once the Certificate issues, the Applicant is referred to as the Subscriber. For Certificates issued to devices, the Applicant is the entity that controls or operates the device named in the Certificate, even if the device is sending the actual certificate request. - -**Applicant Representative**: A natural person or human sponsor who is either the Applicant, employed by the Applicant, or an authorized agent who has express authority to represent the Applicant: (i) who signs and submits, or approves a certificate request on behalf of the Applicant, and/or (ii) who signs and submits a Subscriber Agreement on behalf of the Applicant, and/or (iii) who acknowledges the Terms of Use on behalf of the Applicant when the Applicant is an Affiliate of the CA or is the CA. - -**Application Software Supplier**: A supplier of Internet browser software or other relying-party application software that displays or uses Certificates and incorporates Root Certificates. - -**Attestation Letter**: A letter attesting that Subject Information is correct written by an accountant, lawyer, government official, or other reliable third party customarily relied upon for such information. - -**Audit Report**: A report from a Qualified Auditor stating the Qualified Auditor's opinion on whether an entity's processes and controls comply with the mandatory provisions of these Requirements. - -**Authorization Domain Name**: The Domain Name used to obtain authorization for certificate issuance for a given FQDN. The CA may use the FQDN returned from a DNS CNAME lookup as the FQDN for the purposes of domain validation. If the FQDN contains a wildcard character, then the CA MUST remove all wildcard labels from the left most portion of requested FQDN. The CA may prune zero or more labels from left to right until encountering a Base Domain Name and may use any one of the intermediate values for the purpose of domain validation. - -**Authorized Port**: One of the following ports: 80 (http), 443 (http), 115 (sftp), 25 (smtp), 22 (ssh). - -**Base Domain Name**: The portion of an applied-for FQDN that is the first domain name node left of a registry-controlled or public suffix plus the registry-controlled or public suffix (e.g. "example.co.uk" or "example.com"). For FQDNs where the right-most domain name node is a gTLD having ICANN Specification 13 in its registry agreement, the gTLD itself may be used as the Base Domain Name. - -**CAA**: From RFC 6844 ([http:tools.ietf.org/html/rfc6844](http://tools.ietf.org/html/rfc6844)): "The Certification Authority Authorization (CAA) DNS Resource Record allows a DNS domain name holder to specify the Certification Authorities (CAs) authorized to issue certificates for that domain. Publication of CAA Resource Records allows a public Certification Authority to implement additional controls to reduce the risk of unintended certificate mis-issue." - -**Certificate**: An electronic document that uses a digital signature to bind a public key and an identity. - -**Certificate Data**: Certificate requests and data related thereto (whether obtained from the Applicant or otherwise) in the CA's possession or control or to which the CA has access. - -**Certificate Management Process**: Processes, practices, and procedures associated with the use of keys, software, and hardware, by which the CA verifies Certificate Data, issues Certificates, maintains a Repository, and revokes Certificates. - -**Certificate Policy**: A set of rules that indicates the applicability of a named Certificate to a particular community and/or PKI implementation with common security requirements. - -**Certificate Problem Report**: Complaint of suspected Key Compromise, Certificate misuse, or other types of fraud, compromise, misuse, or inappropriate conduct related to Certificates. - -**Certificate Revocation List**: A regularly updated time-stamped list of revoked Certificates that is created and digitally signed by the CA that issued the Certificates. - -**Certification Authority**: An organization that is responsible for the creation, issuance, revocation, and management of Certificates. The term applies equally to both Roots CAs and Subordinate CAs. - -**Certification Practice Statement**: One of several documents forming the governance framework in which Certificates are created, issued, managed, and used. - -**Control**: "Control" (and its correlative meanings, "controlled by" and "under common control with") means possession, directly or indirectly, of the power to: (1) direct the management, personnel, finances, or plans of such entity; (2) control the election of a majority of the directors ; or (3) vote that portion of voting shares required for "control" under the law of the entity's Jurisdiction of Incorporation or Registration but in no case less than 10%. - -**Country**: Either a member of the United Nations OR a geographic region recognized as a Sovereign State by at least two UN member nations. - -**Cross Certificate**: A certificate that is used to establish a trust relationship between two Root CAs. - -**CSPRNG**: A random number generator intended for use in cryptographic system. - -**Delegated Third Party**: A natural person or Legal Entity that is not the CA but is authorized by the CA to assist in the Certificate Management Process by performing or fulfilling one or more of the CA requirements found herein. - -**Domain Authorization Document**: Documentation provided by, or a CA's documentation of a communication with, a Domain Name Registrar, the Domain Name Registrant, or the person or entity listed in WHOIS as the Domain Name Registrant (including any private, anonymous, or proxy registration service) attesting to the authority of an Applicant to request a Certificate for a specific Domain Namespace. - -**Domain Contact**: The Domain Name Registrant, technical contact, or administrative contract (or the equivalent under a ccTLD) as listed in the WHOIS record of the Base Domain Name or in a DNS SOA record. - -**Domain Name**: The label assigned to a node in the Domain Name System. - -**Domain Namespace**: The set of all possible Domain Names that are subordinate to a single node in the Domain Name System. - -**Domain Name Registrant**: Sometimes referred to as the "owner" of a Domain Name, but more properly the person(s) or entity(ies) registered with a Domain Name Registrar as having the right to control how a Domain Name is used, such as the natural person or Legal Entity that is listed as the "Registrant" by WHOIS or the Domain Name Registrar. - -**Domain Name Registrar**: A person or entity that registers Domain Names under the auspices of or by agreement with: (i) the Internet Corporation for Assigned Names and Numbers (ICANN), (ii) a national Domain Name authority/registry, or (iii) a Network Information Center (including their affiliates, contractors, delegates, successors, or assigns). - -**Effective Date**: 1 July 2012. - -**Enterprise RA**: An employee or agent of an organization unaffiliated with the CA who authorizes issuance of Certificates to that organization. - -**Expiry Date**: The "Not After" date in a Certificate that defines the end of a Certificate's validity period. - -**Fully-Qualified Domain Name**: A Domain Name that includes the labels of all superior nodes in the Internet Domain Name System. - -**Government Entity**: A government-operated legal entity, agency, department, ministry, branch, or similar element of the government of a country, or political subdivision within such country (such as a state, province, city, county, etc.). - -**High Risk Certificate Request**: A Request that the CA flags for additional scrutiny by reference to internal criteria and databases maintained by the CA, which may include names at higher risk for phishing or other fraudulent usage, names contained in previously rejected certificate requests or revoked Certificates, names listed on the Miller Smiles phishing list or the Google Safe Browsing list, or names that the CA identifies using its own risk-mitigation criteria. - -**Internal Name**: A string of characters (not an IP address) in a Common Name or Subject Alternative Name field of a Certificate that cannot be verified as globally unique within the public DNS at the time of certificate issuance because it does not end with a Top Level Domain registered in IANA's Root Zone Database. - -**Issuing CA**: In relation to a particular Certificate, the CA that issued the Certificate. This could be either a Root CA or a Subordinate CA. - -**Key Compromise**: A Private Key is said to be compromised if its value has been disclosed to an unauthorized person, an unauthorized person has had access to it, or there exists a practical technique by which an unauthorized person may discover its value. A Private Key is also considered compromised if methods have been developed that can easily calculate it based on the Public Key (such as a Debian weak key, see http://wiki.debian.org/SSLkeys) or if there is clear evidence that the specific method used to generate the Private Key was flawed. - -**Key Generation Script**: A documented plan of procedures for the generation of a CA Key Pair **.** - -**Key Pair**: The Private Key and its associated Public Key. - -**Legal Entity**: An [association](http://www.businessdictionary.com/definition/association.html), [corporation](http://www.businessdictionary.com/definition/corporation.html), [partnership](http://www.businessdictionary.com/definition/partnership.html), [proprietorship](http://www.businessdictionary.com/definition/proprietorship.html), [trust](http://www.businessdictionary.com/definition/trust.html), government entity or other entity with [legal](http://www.businessdictionary.com/definition/legal.html) [standing](http://www.investorwords.com/7216/standing.html)in a country's legal system. - -**Object Identifier**: A unique alphanumeric or numeric identifier registered under the International Organization for Standardization's applicable standard for a specific object or object class. - -**OCSP Responder**: An online server operated under the authority of the CA and connected to its Repository for processing Certificate status requests. See also, Online Certificate Status Protocol. - -**Online Certificate Status Protocol**: An online Certificate-checking protocol that enables relying-party application software to determine the status of an identified Certificate. See also OCSP Responder. - -**Parent Company**: A company that Controls a Subsidiary Company. - -**Private Key**: The key of a Key Pair that is kept secret by the holder of the Key Pair, and that is used to create Digital Signatures and/or to decrypt electronic records or files that were encrypted with the corresponding Public Key. - -**Public Key**: The key of a Key Pair that may be publicly disclosed by the holder of the corresponding Private Key and that is used by a Relying Party to verify Digital Signatures created with the holder's corresponding Private Key and/or to encrypt messages so that they can be decrypted only with the holder's corresponding Private Key. - -**Public Key Infrastructure**: A set of hardware, software, people, procedures, rules, policies, and obligations used to facilitate the trustworthy creation, issuance, management, and use of Certificates and keys based on Public Key Cryptography. - -**Publicly-Trusted Certificate**: A Certificate that is trusted by virtue of the fact that its corresponding Root Certificate is distributed as a trust anchor in widely-available application software. - -**Qualified Auditor**: A natural person or Legal Entity that meets the requirements of Section 8.3. - -**Random Value**: A value specified by a CA to the Applicant that exhibits at least 112 bits of entropy. - -**Registered Domain Name**: A Domain Name that has been registered with a Domain Name Registrar. - -**Registration Authority (RA)**: Any Legal Entity that is responsible for identification and authentication of subjects of Certificates, but is not a CA, and hence does not sign or issue Certificates. An RA may assist in the certificate application process or revocation process or both. When "RA" is used as an adjective to describe a role or function, it does not necessarily imply a separate body, but can be part of the CA. - -**Reliable Data Source**: An identification document or source of data used to verify Subject Identity Information that is generally recognized among commercial enterprises and governments as reliable, and which was created by a third party for a purpose other than the Applicant obtaining a Certificate. - -**Reliable Method of Communication**: A method of communication, such as a postal/courier delivery address, telephone number, or email address, that was verified using a source other than the Applicant Representative. - -**Relying Party**: Any natural person or Legal Entity that relies on a Valid Certificate. An Application Software Supplier is not considered a Relying Party when software distributed by such Supplier merely displays information relating to a Certificate. - -**Repository**: An online database containing publicly-disclosed PKI governance documents (such as Certificate Policies and Certification Practice Statements) and Certificate status information, either in the form of a CRL or an OCSP response. - -**Request Token**: A value derived in a method specified by the CA which binds this demonstration of control to the certificate request. - -The Request Token SHALL incorporate the key used in the certificate request. - -A Request Token MAY include a timestamp to indicate when it was created. - -A Request Token MAY include other information to ensure its uniqueness. - -A Request Token that includes a timestamp SHALL remain valid for no more than 30 days from the time of creation. - -A Request Token that includes a timestamp SHALL be treated as invalid if its timestamp is in the future. - -A Request Token that does not include a timestamp is valid for a single use and the CA SHALL NOT re-use it for a subsequent validation. - -The binding SHALL use a digital signature algorithm or a cryptographic hash algorithm at least as strong as that to be used in signing the certificate request. - -**Required Website Content**: Either a Random Value or a Request Token, together with additional information that uniquely identifies the Subscriber, as specified by the CA. - -**Requirements**: The Baseline Requirements found in this document. - -**Reserved IP Address**: An IPv4 or IPv6 address that the IANA has marked as reserved: - -[http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml](http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml) - -[http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xml](http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xml) - -**Root CA**: The top level Certification Authority whose Root Certificate is distributed by Application Software Suppliers and that issues Subordinate CA Certificates. - -**Root Certificate**: The self-signed Certificate issued by the Root CA to identify itself and to facilitate verification of Certificates issued to its Subordinate CAs. - -**Sovereign State**: A state or country that administers its own government, and is not dependent upon, or subject to, another power. - -**Subject**: The natural person, device, system, unit, or Legal Entity identified in a Certificate as the Subject. The Subject is either the Subscriber or a device under the control and operation of the Subscriber. - -**Subject Identity Information**: Information that identifies the Certificate Subject. Subject Identity Information does not include a domain name listed in the subjectAltName extension or the Subject commonName field. - -**Subordinate CA**: A Certification Authority whose Certificate is signed by the Root CA, or another Subordinate CA. - -**Subscriber**: A natural person or Legal Entity to whom a Certificate is issued and who is legally bound by a Subscriber Agreement or Terms of Use. - -**Subscriber Agreement**: An agreement between the CA and the Applicant/Subscriber that specifies the rights and responsibilities of the parties. - -**Subsidiary Company**: A company that is controlled by a Parent Company. - -**Technically Constrained Subordinate CA Certificate**: A Subordinate CA certificate which uses a combination of Extended Key Usage settings and Name Constraint settings to limit the scope within which the Subordinate CA Certificate may issue Subscriber or additional Subordinate CA Certificates. - -**Terms of Use**: Provisions regarding the safekeeping and acceptable uses of a Certificate issued in accordance with these Requirements when the Applicant/Subscriber is an Affiliate of the CA or is the CA. - -**Test Certificate**: A Certificate with a maximum validity period of 30 days and which: (i) includes a critical extension with the specified Test Certificate CABF OID, or (ii) is issued under a CA where there are no certificate paths/chains to a root certificate subject to these Requirements. - -**Trustworthy System**: Computer hardware, software, and procedures that are: reasonably secure from intrusion and misuse; provide a reasonable level of availability, reliability, and correct operation; are reasonably suited to performing their intended functions; and enforce the applicable security policy. - -**Unregistered Domain Name**: A Domain Name that is not a Registered Domain Name. - -**Valid Certificate**: A Certificate that passes the validation procedure specified in RFC 5280. - -**Validation Specialists**: Someone who performs the information verification duties specified by these Requirements. - -**Validity Period**: The period of time measured from the date when the Certificate is issued until the Expiry Date. - -**Wildcard Certificate**: A Certificate containing an asterisk (\*) in the left-most position of any of the Subject Fully-Qualified Domain Names contained in the Certificate. - -### 1.6.2 Acronyms - -| **Acronym** | **Meaning** | -| --- | --- | -| AICPA | American Institute of Certified Public Accountants | -| CA | Certification Authority | -| CAA | Certification Authority Authorization | -| ccTLD | Country Code Top-Level Domain | -| CICA | Canadian Institute of Chartered Accountants | -| CP | Certificate Policy | -| CPS | Certification Practice Statement | -| CRL | Certificate Revocation List | -| DBA | Doing Business As | -| DNS | Domain Name System | -| FIPS | (US Government) Federal Information Processing Standard | -| FQDN | Fully Qualified Domain Name | -| IM | Instant Messaging | -| IANA | Internet Assigned Numbers Authority | -| ICANN | Internet Corporation for Assigned Names and Numbers | -| ISO | International Organization for Standardization | -| NIST | (US Government) National Institute of Standards and Technology | -| OCSP | Online Certificate Status Protocol | -| OID | Object Identifier | -| PKI | Public Key Infrastructure | -| RA | Registration Authority | -| S/MIME | Secure MIME (Multipurpose Internet Mail Extensions) | -| SSL | Secure Sockets Layer | -| TLD | Top-Level Domain | -| TLS | Transport Layer Security | -| VOIP | Voice Over Internet Protocol | - - - - -### 1.6.3 References - -ETSI EN 319 403, Electronic Signatures and Infrastructures (ESI); Trust Service Provider Conformity Assessment - Requirements for conformity assessment bodies assessing Trust Service Providers - -ETSI EN 319 411-1, Electronic Signatures and Infrastructures (ESI); Policy and security requirements for Trust Service Providers issuing certificates; Part 1: General requirements - -ETSI TS 102 042, Electronic Signatures and Infrastructures (ESI); Policy requirements for certification authorities issuing public key certificates. - -FIPS 140-2, Federal Information Processing Standards Publication - Security Requirements For Cryptographic Modules, Information Technology Laboratory, National Institute of Standards and Technology, May 25, 2001. - -ISO 21188:2006, Public key infrastructure for financial services -- Practices and policy framework. - -NIST SP 800-89, Recommendation for Obtaining Assurances for Digital Signature Applications, http://csrc.nist.gov/publications/nistpubs/800-89/SP-800-89_November2006.pdf. - -RFC2119, Request for Comments: 2119, Key words for use in RFCs to Indicate Requirement Levels, Bradner, March 1997. - -RFC2527, Request for Comments: 2527, Internet X.509 Public Key Infrastructure: Certificate Policy and Certification Practices Framework, Chokhani, et al, March 1999. - -RFC6960, Request for Comments: 6960, X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP. Santesson, Myers, Ankney, Malpani, Galperin, Adams, June 2013. - -RFC3647, Request for Comments: 3647, Internet X.509 Public Key Infrastructure: Certificate Policy and Certification Practices Framework, Chokhani, et al, November 2003. - -RFC4366, Request for Comments: 4366, Transport Layer Security (TLS) Extensions, Blake-Wilson, et al, April 2006. - -RFC5019, Request for Comments: 5019, The Lightweight Online Certificate Status Protocol (OCSP) Profile for High-Volume Environments, A. Deacon, et al, September 2007. - -RFC5280, Request for Comments: 5280, Internet X.509 Public Key Infrastructure: Certificate and Certificate Revocation List (CRL) Profile, Cooper et al, May 2008. - -WebTrust for Certification Authorities, SSL Baseline with Network Security, Version 2.0, available at http://www.webtrust.org/homepage-documents/item79806.pdf. - -X.509, Recommendation ITU-T X.509 (10/2012) \| ISO/IEC 9594-8:2014 (E), Information technology – Open Systems Interconnection – The Directory: Public-key and attribute certificate frameworks. - -### 1.6.4 Conventions -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in these Requirements shall be interpreted in accordance with RFC 2119. - - -# 2. PUBLICATION AND REPOSITORY RESPONSIBILITIES -The CA SHALL develop, implement, enforce, and annually update a Certification Practice Statement that describes in detail how the CA implements the latest version of these Requirements. - -## 2.1 Repositories -The CA SHALL make revocation information for Subordinate Certificates and Subscriber Certificates available in accordance with this Policy. - -## 2.2 Publication of information -The CA SHALL publicly disclose its Certificate Policy and/or Certification Practice Statement through an appropriate and readily accessible online means that is available on a 24x7 basis. The CA SHALL publicly disclose its CA business practices to the extent required by the CA's selected audit scheme (see Section 8.1). The disclosures MUST include all the material required by RFC 2527 or RFC 3647, and MUST be structured in accordance with either RFC 2527 or RFC 3647. Effective as of 15 April 2015, section 4.2 of a CA's Certificate Policy and/or Certification Practice Statement (section 4.1 for CAs still conforming to RFC 2527) SHALL state whether the CA reviews CAA Records, and if so, the CA's policy or practice on processing CAA Records for Fully Qualified Domain Names. The CA SHALL log all actions taken, if any, consistent with its processing practice. - -The CA SHALL publicly give effect to these Requirements and represent that it will adhere to the latest published version. The CA MAY fulfill this requirement by incorporating these Requirements directly into its Certificate Policy and/or Certification Practice Statements or by incorporating them by reference using a clause such as the following (which MUST include a link to the official version of these Requirements): - -> [Name of CA] conforms to the current version of the Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates published at http://www.cabforum.org. In the event of any inconsistency between this document and those Requirements, those Requirements take precedence over this document. - - -The CA SHALL host test Web pages that allow Application Software Suppliers to test their software with Subscriber Certificates that chain up to each publicly trusted Root Certificate. At a minimum, the CA SHALL host separate Web pages using Subscriber Certificates that are (i) valid, (ii) revoked, and (iii) expired. - -## 2.3 Time or frequency of publication -The CA SHALL develop, implement, enforce, and annually update a Certificate Policy and/or Certification Practices Statement that describes in detail how the CA implements the latest version of these Requirements. - -## 2.4 Access controls on repositories -The CA shall make its Repository publicly available in a read-only manner. - -# 3. IDENTIFICATION AND AUTHENTICATION - -## 3.1 Naming - -### 3.1.1 Types of names - -### 3.1.2 Need for names to be meaningful - -### 3.1.3 Anonymity or pseudonymity of subscribers - -### 3.1.4 Rules for interpreting various name forms - -### 3.1.5 Uniqueness of names - -### 3.1.6 Recognition, authentication, and role of trademarks - -## 3.2 Initial identity validation - -### 3.2.1 Method to prove possession of private key - -### 3.2.2 Authentication of Organization and Domain Identity -If the Applicant requests a Certificate that will contain Subject Identity Information comprised only of the countryName field, then the CA SHALL verify the country associated with the Subject using a verification process meeting the requirements of Section 3.2.2.3 and that is described in the CA's Certificate Policy and/or Certification Practice Statement. If the Applicant requests a Certificate that will contain the countryName field and other Subject Identity Information, then the CA SHALL verify the identity of the Applicant, and the authenticity of the Applicant Representative's certificate request using a verification process meeting the requirements of this Section 3.2.2.1 and that is described in the CA's Certificate Policy and/or Certification Practice Statement. The CA SHALL inspect any document relied upon under this Section for alteration or falsification. - -#### 3.2.2.1 Identity -If the Subject Identity Information is to include the name or address of an organization, the CA SHALL verify the identity and address of the organization and that the address is the Applicant's address of existence or operation. The CA SHALL verify the identity and address of the Applicant using documentation provided by, or through communication with, at least one of the following: - -1. A government agency in the jurisdiction of the Applicant's legal creation, existence, or recognition; -2. A third party database that is periodically updated and considered a Reliable Data Source; -3. A site visit by the CA or a third party who is acting as an agent for the CA; or -4. An Attestation Letter. - -The CA MAY use the same documentation or communication described in 1 through 4 above to verify both the Applicant's identity and address. - -Alternatively, the CA MAY verify the address of the Applicant (but not the identity of the Applicant) using a utility bill, bank statement, credit card statement, government-issued tax document, or other form of identification that the CA determines to be reliable. - -#### 3.2.2.2 DBA/Tradename -If the Subject Identity Information is to include a DBA or tradename, the CA SHALL verify the Applicant's right to use the DBA/tradename using at least one of the following: - -1. Documentation provided by, or communication with, a government agency in the jurisdiction of the Applicant's legal creation, existence, or recognition; -2. A Reliable Data Source; -3. Communication with a government agency responsible for the management of such DBAs or tradenames; -4. An Attestation Letter accompanied by documentary support; or -5. A utility bill, bank statement, credit card statement, government-issued tax document, or other form of identification that the CA determines to be reliable. - -#### 3.2.2.3 Verification of Country -If the subject:countryName field is present, then the CA SHALL verify the country associated with the Subject using one of the following: (a) the IP Address range assignment by country for either (i) the web site's IP address, as indicated by the DNS record for the web site or (ii) the Applicant's IP address; (b) the ccTLD of the requested Domain Name; (c) information provided by the Domain Name Registrar; or (d) a method identified in Section 3.2.2.1. The CA SHOULD implement a process to screen proxy servers in order to prevent reliance upon IP addresses assigned in countries other than where the Applicant is actually located. - -#### 3.2.2.4 Validation of Domain Authorization or Control - -This section defines the permitted processes and procedures for validating the Applicant's ownership or control of the domain. -The CA SHALL confirm that, as of the date the Certificate issues, either the CA or a Delegated Third Party has validated each Fully-Qualified Domain Name (FQDN) listed in the Certificate using at least one of the methods listed below. - -Completed confirmations of Applicant authority may be valid for the issuance of multiple certificates over time. In all cases, the confirmation must have been initiated within the time period specified in the relevant requirement (such as Section 3.3.1 of this document) prior to certificate issuance. For purposes of domain validation, the term Applicant includes the Applicant's Parent Company, Subsidiary Company, or Affiliate. - -Note: FQDNs may be listed in Subscriber Certificates using dNSNames in the subjectAltName extension or in Subordinate CA Certificates via dNSNames in permittedSubtrees within the Name Constraints extension. - -##### 3.2.2.4.1 Validating the Applicant as a Domain Contact. - -Confirming the Applicant's control over the FQDN by validating the Applicant is the Domain Contact directly with the Domain Name Registrar. This method may only be used if: - -1. The CA authenticates the Applicant's identity under BR Section 3.2.2.1 and the authority of the Applicant Representative under BR Section 3.2.5, OR -2. The CA authenticates the Applicant's identity under EV Guidelines Section 11.2 and the agency of the Certificate Approver under EV Guidelines Section 11.8; OR -3. The CA is also the Domain Name Registrar, or an Affiliate of the Registrar, of the Base Domain Name. - -##### 3.2.2.4.2 Email, Fax, SMS, or Postal Mail to Domain Contact - -Confirming the Applicant's control over the FQDN by sending a Random Value via email, fax, SMS, or postal mail and then receiving a confirming response utilizing the Random Value. The Random Value MUST be sent to an email address, fax/SMS number, or postal mail address identified as a Domain Contact. -Each email, fax, SMS, or postal mail MAY confirm control of multiple Authorization Domain Names. -The CA or Delegated Third Party MAY send the email, fax, SMS, or postal mail identified under this section to more than one recipient provided that every recipient is identified by the Domain Name Registrar as representing the Domain Name Registrant for every FQDN being verified using the email, fax, SMS, or postal mail. -The Random Value SHALL be unique in each email, fax, SMS, or postal mail. -The CA or Delegated Third Party MAY resend the email, fax, SMS, or postal mail in its entirety, including re-use of the Random Value, provided that the communication's entire contents and recipient(s) remain unchanged. -The Random Value SHALL remain valid for use in a confirming response for no more than 30 days from its creation. The CPS MAY specify a shorter validity period for Random Values, in which case the CA MUST follow its CPS. - -##### 3.2.2.4.3 Phone Contact with Domain Contact - -Confirming the Applicant's control over the requested FQDN by calling the Domain Name Registrant's phone number and obtaining a response confirming the Applicant's request for validation of the FQDN. The CA or Delegated Third Party MUST place the call to a phone number identified by the Domain Name Registrar as the Domain Contact. -Each phone call SHALL be made to a single number and MAY confirm control of multiple FQDNs, provided that the phone number is identified by the Domain Registrar as a valid contact method for every Base Domain Name being verified using the phone call. - -##### 3.2.2.4.4 Constructed Email to Domain Contact - -Confirming the Applicant's control over the requested FQDN by (i) sending an email to one or more addresses created by using 'admin', 'administrator', 'webmaster', 'hostmaster', or 'postmaster' as the local part, followed by the at-sign ("@"), followed by an Authorization Domain Name, (ii) including a Random Value in the email, and (iii) receiving a confirming response utilizing the Random Value. -Each email MAY confirm control of multiple FQDNs, provided the Authorization Domain Name used in the email is an Authorization Domain Name for each FQDN being confirmed. -The Random Value SHALL be unique in each email. -The email MAY be re-sent in its entirety, including the re-use of the Random Value, provided that its entire contents and recipient SHALL remain unchanged. -The Random Value SHALL remain valid for use in a confirming response for no more than 30 days from its creation. The CPS MAY specify a shorter validity period for Random Values, in which case the CA MUST follow its CPS. - -##### 3.2.2.4.5 Domain Authorization Document - -Confirming the Applicant's control over the requested FQDN by relying upon the attestation to the authority of the Applicant to request a Certificate contained in a Domain Authorization Document. The Domain Authorization Document MUST substantiate that the communication came from the Domain Contact. The CA MUST verify that the Domain Authorization Document was either (i) dated on or after the date of the domain validation request or (ii) that the WHOIS data has not materially changed since a previously provided Domain Authorization Document for the Domain Name Space. - -##### 3.2.2.4.6 Agreed-Upon Change to Website - -Confirming the Applicant's control over the requested FQDN by confirming one of the following under the "/.well-known/pki-validation" directory, or another path registered with IANA for the purpose of Domain Validation, on the Authorization Domain Name that is accessible by the CA via HTTP/HTTPS over an Authorized Port: - -1. The presence of Required Website Content contained in the content of a file or on a web page in the form of a meta tag. The entire Required Website Content MUST NOT appear in the request used to retrieve the file or web page, or -2. The presence of the Request Token or Request Value contained in the content of a file or on a webpage in the form of a meta tag where the Request Token or Random Value MUST NOT appear in the request. - -If a Random Value is used, the CA or Delegated Third Party SHALL provide a Random Value unique to the certificate request and SHALL not use the Random Value after the longer of (i) 30 days or (ii) if the Applicant submitted the certificate request, the timeframe permitted for reuse of validated information relevant to the certificate (such as in Section 3.3.1 of these Guidelines or Section 11.14.3 of the EV Guidelines). - -Note: Examples of Request Tokens include, but are not limited to: (i) a hash of the public key; (ii) a hash of the Subject Public Key Info [X.509]; and (iii) a hash of a PKCS#10 CSR. A Request Token may also be concatenated with a timestamp or other data. If a CA wanted to always use a hash of a PKCS#10 CSR as a Request Token and did not want to incorporate a timestamp and did want to allow certificate key re-use then the applicant might use the challenge password in the creation of a CSR with OpenSSL to ensure uniqueness even if the subject and key are identical between subsequent requests. This simplistic shell command produces a Request Token which has a timestamp and a hash of a CSR. E.g. echo date -u +%Y%m%d%H%M sha256sum Prior to September 1, 2013, each CA MUST revoke any valid certificate that does not comply with this section of the Requirements. - -[^pubsuffix]: Determination of what is "registry-controlled" versus the registerable portion of a Country Code Top-Level Domain Namespace is not standardized at the time of writing and is not a property of the DNS itself. Current best practice is to consult a "public suffix list" such as (PSL), and to retrieve a fresh copy regularly. If using the PSL, a CA SHOULD consult the "ICANN DOMAINS" section only, not the "PRIVATE DOMAINS" section. The PSL is updated regularly to contain new gTLDs delegated by ICANN, which are listed in the "ICANN DOMAINS" section. A CA is not prohibited from issuing a Wildcard Certificate to the Registrant of an entire gTLD, provided that control of the entire namespace is demonstrated in an appropriate way. - -#### 3.2.2.7 Data Source Accuracy -Prior to using any data source as a Reliable Data Source, the CA SHALL evaluate the source for its reliability, accuracy, and resistance to alteration or falsification. The CA SHOULD consider the following during its evaluation: - -1. The age of the information provided, -2. The frequency of updates to the information source, -3. The data provider and purpose of the data collection, -4. The public accessibility of the data availability, and -5. The relative difficulty in falsifying or altering the data. - -Databases maintained by the CA, its owner, or its affiliated companies do not qualify as a Reliable Data Source if the primary purpose of the database is to collect information for the purpose of fulfilling the validation requirements under this Section 3.2. - -### 3.2.3 Authentication of individual identity -If an Applicant subject to this Section is a natural person, then the CA SHALL verify the Applicant's name, Applicant's address, and the authenticity of the certificate request. - -The CA SHALL verify the Applicant's name using a legible copy, which discernibly shows the Applicant's face, of at least one currently valid government-issued photo ID (passport, drivers license, military ID, national ID, or equivalent document type). The CA SHALL inspect the copy for any indication of alteration or falsification. - -The CA SHALL verify the Applicant's address using a form of identification that the CA determines to be reliable, such as a government ID, utility bill, or bank or credit card statement. The CA MAY rely on the same government-issued ID that was used to verify the Applicant's name. - -The CA SHALL verify the certificate request with the Applicant using a Reliable Method of Communication. - -### 3.2.4 Non-verified subscriber information - -### 3.2.5 Validation of authority -If the Applicant for a Certificate containing Subject Identity Information is an organization, the CA SHALL use a Reliable Method of Communication to verify the authenticity of the Applicant Representative's certificate request. - -The CA MAY use the sources listed in section 3.2.2.1 to verify the Reliable Method of Communication. Provided that the CA uses a Reliable Method of Communication, the CA MAY establish the authenticity of the certificate request directly with the Applicant Representative or with an authoritative source within the Applicant's organization, such as the Applicant's main business offices, corporate offices, human resource offices, information technology offices, or other department that the CA deems appropriate. - -In addition, the CA SHALL establish a process that allows an Applicant to specify the individuals who may request Certificates. If an Applicant specifies, in writing, the individuals who may request a Certificate, then the CA SHALL NOT accept any certificate requests that are outside this specification. The CA SHALL provide an Applicant with a list of its authorized certificate requesters upon the Applicant's verified written request. - -### 3.2.6 Criteria for Interoperation or Certification -The CA SHALL disclose all Cross Certificates that identify the CA as the Subject, provided that the CA arranged for or accepted the establishment of the trust relationship (i.e. the Cross Certificate at issue). - -## 3.3 Identification and authentication for re-key requests - -### 3.3.1 Identification and authentication for routine re-key - -### 3.3.2 Identification and authentication for re-key after revocation - -## 3.4 Identification and authentication for revocation request - -# 4. CERTIFICATE LIFE-CYCLE OPERATIONAL REQUIREMENTS - -## 4.1 Certificate Application - -### 4.1.1 Who can submit a certificate application -In accordance with Section 5.5.2, the CA SHALL maintain an internal database of all previously revoked Certificates and previously rejected certificate requests due to suspected phishing or other fraudulent usage or concerns. The CA SHALL use this information to identify subsequent suspicious certificate requests. - -### 4.1.2 Enrollment process and responsibilities -Prior to the issuance of a Certificate, the CA SHALL obtain the following documentation from the Applicant: - -1. A certificate request, which may be electronic; and -2. An executed Subscriber Agreement or Terms of Use, which may be electronic. - -The CA SHOULD obtain any additional documentation the CA determines necessary to meet these Requirements. - -Prior to the issuance of a Certificate, the CA SHALL obtain from the Applicant a certificate request in a form prescribed by the CA and that complies with these Requirements. One certificate request MAY suffice for multiple Certificates to be issued to the same Applicant, subject to the aging and updating requirement in Section 3.3.1, provided that each Certificate is supported by a valid, current certificate request signed by the appropriate Applicant Representative on behalf of the Applicant. The certificate request MAY be made, submitted and/or signed electronically. - -The certificate request MUST contain a request from, or on behalf of, the Applicant for the issuance of a Certificate, and a certification by, or on behalf of, the Applicant that all of the information contained therein is correct. - -## 4.2 Certificate application processing - -### 4.2.1 Performing identification and authentication functions -The certificate request MAY include all factual information about the Applicant to be included in the Certificate, and such additional information as is necessary for the CA to obtain from the Applicant in order to comply with these Requirements and the CA's Certificate Policy and/or Certification Practice Statement. In cases where the certificate request does not contain all the necessary information about the Applicant, the CA SHALL obtain the remaining information from the Applicant or, having obtained it from a reliable, independent, third-party data source, confirm it with the Applicant. The CA SHALL establish and follow a documented procedure for verifying all data requested for inclusion in the Certificate by the Applicant. - -Applicant information MUST include, but not be limited to, at least one Fully-Qualified Domain Name or IP address to be included in the Certificate's SubjectAltName extension. - -Section 6.3.2 limits the validity period of Subscriber Certificates. The CA MAY use the documents and data provided in Section 3.2 to verify certificate information, provide that the CA obtained the data or document from a source specified under Section 3.2 no more than thirty-nine (39) months prior to issuing the Certificate. - -The CA SHALL develop, maintain, and implement documented procedures that identify and require additional verification activity for High Risk Certificate Requests prior to the Certificate's approval, as reasonably necessary to ensure that such requests are properly verified under these Requirements. - -If a Delegated Third Party fulfills any of the CA's obligations under this section , the CA SHALL verify that the process used by the Delegated Third Party to identify and further verify High Risk Certificate Requests provides at least the same level of assurance as the CA's own processes - -### 4.2.2 Approval or rejection of certificate applications -CAs SHOULD NOT issue Certificates containing a new gTLD under consideration by ICANN. Prior to issuing a Certificate containing an Internal Name with a gTLD that ICANN has announced as under consideration to make operational, the CA MUST provide a warning to the applicant that the gTLD may soon become resolvable and that, at that time, the CA will revoke the Certificate unless the applicant promptly registers the Domain Name. When a gTLD is delegated by inclusion in the IANA Root Zone Database, the Internal Name becomes a Domain Name, and at such time, a Certificate with such gTLD, which may have complied with these Requirements at the time it was issued, will be in a violation of these Requirements, unless the CA has verified the Subscriber's rights in the Domain Name. The provisions below are intended to prevent such violation from happening. - -Within 30 days after ICANN has approved a new gTLD for operation, as evidenced by publication of a contract with the gTLD operator on [www.ICANN.org] each CA MUST (1) compare the new gTLD against the CA's records of valid certificates and (2) cease issuing Certificates containing a Domain Name that includes the new gTLD until after the CA has first verified the Subscriber's control over or exclusive right to use the Domain Name in accordance with Section 3.2.2.4. - -Within 120 days after the publication of a contract for a new gTLD is published on [www.icann.org], CAs MUST revoke each Certificate containing a Domain Name that includes the new gTLD unless the Subscriber is either the Domain Name Registrant or can demonstrate control over the Domain Name. - -### 4.2.3 Time to process certificate applications -No stipulation. - -## 4.3 Certificate issuance - -### 4.3.1 CA actions during certificate issuance -Certificate issuance by the Root CA SHALL require an individual authorized by the CA (i.e. the CA system operator, system officer, or PKI administrator) to deliberately issue a direct command in order for the Root CA to perform a certificate signing operation. - -### 4.3.2 Notification to subscriber by the CA of issuance of certificate -No stipulation. - -## 4.4 Certificate acceptance - -### 4.4.1 Conduct constituting certificate acceptance -No stipulation. - -### 4.4.2 Publication of the certificate by the CA -No stipulation. - -### 4.4.3 Notification of certificate issuance by the CA to other entities -No stipulation. - -## 4.5 Key pair and certificate usage - -### 4.5.1 Subscriber private key and certificate usage -See Section 9.6.3, provisions 2. and 4. - -### 4.5.2 Relying party public key and certificate usage -No stipulation. - -## 4.6 Certificate renewal - -### 4.6.1 Circumstance for certificate renewal -No stipulation. - -### 4.6.2 Who may request renewal -No stipulation. - -### 4.6.3 Processing certificate renewal requests -No stipulation. - -### 4.6.4 Notification of new certificate issuance to subscriber -No stipulation. - -### 4.6.5 Conduct constituting acceptance of a renewal certificate -No stipulation. - -### 4.6.6 Publication of the renewal certificate by the CA -No stipulation. - -### 4.6.7 Notification of certificate issuance by the CA to other entities -No stipulation. - -## 4.7 Certificate re-key - -### 4.7.1 Circumstance for certificate re-key -No stipulation. - -### 4.7.2 Who may request certification of a new public key -No stipulation. - -### 4.7.3 Processing certificate re-keying requests -No stipulation. - -### 4.7.4 Notification of new certificate issuance to subscriber -No stipulation. - -### 4.7.5 Conduct constituting acceptance of a re-keyed certificate -No stipulation. - -### 4.7.6 Publication of the re-keyed certificate by the CA -No stipulation. - -### 4.7.7 Notification of certificate issuance by the CA to other entities -No stipulation. - -## 4.8 Certificate modification - -### 4.8.1 Circumstance for certificate modification -No stipulation. - -### 4.8.2 Who may request certificate modification -No stipulation. - -### 4.8.3 Processing certificate modification requests -No stipulation. - -### 4.8.4 Notification of new certificate issuance to subscriber -No stipulation. - -### 4.8.5 Conduct constituting acceptance of modified certificate -No stipulation. - -### 4.8.6 Publication of the modified certificate by the CA -No stipulation. - -### 4.8.7 Notification of certificate issuance by the CA to other entities -No stipulation. - -## 4.9 Certificate revocation and suspension - -### 4.9.1 Circumstances for revocation - -#### 4.9.1.1 Reasons for Revoking a Subscriber Certificate -The CA SHALL revoke a Certificate within 24 hours if one or more of the following occurs: - -1. The Subscriber requests in writing that the CA revoke the Certificate; -2. The Subscriber notifies the CA that the original certificate request was not authorized and does not retroactively grant authorization; -3. The CA obtains evidence that the Subscriber's Private Key corresponding to the Public Key in the Certificate suffered a Key Compromise or no longer complies with the requirements of Sections 6.1.5 and 6.1.6; -4. The CA obtains evidence that the Certificate was misused; -5. The CA is made aware that a Subscriber has violated one or more of its material obligations under the Subscriber Agreement or Terms of Use; -6. The CA is made aware of any circumstance indicating that use of a Fully-Qualified Domain Name or IP address in the Certificate is no longer legally permitted (e.g. a court or arbitrator has revoked a Domain Name Registrant's right to use the Domain Name, a relevant licensing or services agreement between the Domain Name Registrant and the Applicant has terminated, or the Domain Name Registrant has failed to renew the Domain Name); -7. The CA is made aware that a Wildcard Certificate has been used to authenticate a fraudulently misleading subordinate Fully-Qualified Domain Name; -8. The CA is made aware of a material change in the information contained in the Certificate; -9. The CA is made aware that the Certificate was not issued in accordance with these Requirements or the -CA's Certificate Policy or Certification Practice Statement; -10. The CA determines that any of the information appearing in the Certificate is inaccurate or misleading; -11. The CA ceases operations for any reason and has not made arrangements for another CA to provide revocation support for the Certificate; -12. The CA's right to issue Certificates under these Requirements expires or is revoked or terminated, unless the CA has made arrangements to continue maintaining the CRL/OCSP Repository; -13. The CA is made aware of a possible compromise of the Private Key of the Subordinate CA used for issuing the Certificate; -14. Revocation is required by the CA's Certificate Policy and/or Certification Practice Statement; or -15. The technical content or format of the Certificate presents an unacceptable risk to Application Software Suppliers or Relying Parties (e.g. the CA/Browser Forum might determine that a deprecated cryptographic/signature algorithm or key size presents an unacceptable risk and that such Certificates should be revoked and replaced by CAs within a given period of time). - -#### 4.9.1.2 Reasons for Revoking a Subordinate CA Certificate -The Issuing CA SHALL revoke a Subordinate CA Certificate within seven (7) days if one or more of the following occurs: - -1. The Subordinate CA requests revocation in writing; -2. The Subordinate CA notifies the Issuing CA that the original certificate request was not authorized and does not retroactively grant authorization; -3. The Issuing CA obtains evidence that the Subordinate CA's Private Key corresponding to the Public Key in the Certificate suffered a Key Compromise or no longer complies with the requirements of Sections 6.1.5 and 6.1.6; -4. The Issuing CA obtains evidence that the Certificate was misused; -5. The Issuing CA is made aware that the Certificate was not issued in accordance with or that Subordinate CA has not complied with this CP or the applicable Certificate Policy or Certification Practice Statement; -6. The Issuing CA determines that any of the information appearing in the Certificate is inaccurate or misleading; -7. The Issuing CA or Subordinate CA ceases operations for any reason and has not made arrangements for another CA to provide revocation support for the Certificate; -8. The Issuing CA's or Subordinate CA's right to issue Certificates under these Requirements expires or is revoked or terminated, unless the Issuing CA has made arrangements to continue maintaining the CRL/OCSP Repository; -9. Revocation is required by the Issuing CA's Certificate Policy and/or Certification Practice Statement; or -10. The technical content or format of the Certificate presents an unacceptable risk to Application Software Suppliers or Relying Parties (e.g. the CA/Browser Forum might determine that a deprecated cryptographic/signature algorithm or key size presents an unacceptable risk and that such Certificates should be revoked and replaced by CAs within a given period of time). - -### 4.9.2 Who can request revocation -The Subscriber, RA, or Issuing CA can initiate revocation. Additionally, Subscribers, Relying Parties, Application Software Suppliers, and other third parties may submit Certificate Problem Reports informing the issuing CA of reasonable cause to revoke the certificate. - -### 4.9.3 Procedure for revocation request -The CA SHALL provide a process for Subscribers to request revocation of their own Certificates. The process MUST be described in the CA's Certificate Policy or Certification Practice Statement. The CA SHALL maintain a continuous 24x7 ability to accept and respond to revocation requests and related inquiries. - -The CA SHALL provide Subscribers, Relying Parties, Application Software Suppliers, and other third parties with clear instructions for reporting suspected Private Key Compromise, Certificate misuse, or other types of fraud, compromise, misuse, inappropriate conduct, or any other matter related to Certificates. The CA SHALL publicly disclose the instructions through a readily accessible online means. - -### 4.9.4 Revocation request grace period -No stipulation. - -### 4.9.5 Time within which CA must process the revocation request -The CA SHALL begin investigation of a Certificate Problem Report within twenty-four hours of receipt, and decide whether revocation or other appropriate action is warranted based on at least the following criteria: - -1. The nature of the alleged problem; -2. The number of Certificate Problem Reports received about a particular Certificate or Subscriber; -3. The entity making the complaint (for example, a complaint from a law enforcement official that a Web site is engaged in illegal activities should carry more weight than a complaint from a consumer alleging that she didn't receive the goods she ordered); and -4. Relevant legislation. - -### 4.9.6 Revocation checking requirement for relying parties -No stipulation. - -(Note: Following certificate issuance, a certificate may be revoked for reasons stated in Section 4.9.1. Therefore, relying parties should check the revocation status of all certificates that contain a CDP or OCSP pointer.) - -### 4.9.7 CRL issuance frequency (if applicable) - -For the status of Subscriber Certificates: - -If the CA publishes a CRL, then the CA SHALL update and reissue CRLs at least once every seven days, and the value of the nextUpdate field MUST NOT be more than ten days beyond the value of the thisUpdate field - -For the status of Subordinate CA Certificates: - -The CA SHALL update and reissue CRLs at least (i) once every twelve months and (ii) within 24 hours after revoking a Subordinate CA Certificate, and the value of the nextUpdate field MUST NOT be more than twelve months beyond the value of the thisUpdate field - -### 4.9.8 Maximum latency for CRLs (if applicable) -No stipulation. - -### 4.9.9 On-line revocation/status checking availability -OCSP responses MUST conform to RFC6960 and/or RFC5019. OCSP responses MUST either: - -1. Be signed by the CA that issued the Certificates whose revocation status is being checked, or -2. Be signed by an OCSP Responder whose Certificate is signed by the CA that issued the Certificate whose -revocation status is being checked. - -In the latter case, the OCSP signing Certificate MUST contain an extension of type id-pkix-ocsp-nocheck, as -defined by RFC6960. - -### 4.9.10 On-line revocation checking requirements -Effective 1 January 2013, the CA SHALL support an OCSP capability using the GET method for Certificates issued -in accordance with these Requirements. - -For the status of Subscriber Certificates: - -The CA SHALL update information provided via an Online Certificate Status Protocol at least every four days. OCSP responses from this service MUST have a maximum expiration time of ten days. - -For the status of Subordinate CA Certificates: - -The CA SHALL update information provided via an Online Certificate Status Protocol at least (i) every twelve months and (ii) within 24 hours after revoking a Subordinate CA Certificate. - -If the OCSP responder receives a request for status of a certificate that has not been issued, then the responder SHOULD NOT respond with a "good" status. The CA SHOULD monitor the responder for such requests as part of its security response procedures. - -Effective 1 August 2013, OCSP responders for CAs which are not Technically Constrained in line with Section 7.1.5 MUST NOT respond with a "good" status for such certificates. - -### 4.9.11 Other forms of revocation advertisements available -If the Subscriber Certificate is for a high-traffic FQDN, the CA MAY rely on stapling, in accordance with [RFC4366], to distribute its OCSP responses. In this case, the CA SHALL ensure that the Subscriber "staples" the OCSP response for the Certificate in its TLS handshake. The CA SHALL enforce this requirement on the Subscriber either contractually, through the Subscriber Agreement or Terms of Use, or by technical review measures implemented by the CA. - -### 4.9.12 Special requirements re key compromise -See Section 4.9.1. - -### 4.9.13 Circumstances for suspension -The Repository MUST NOT include entries that indicate that a Certificate is suspended. - -### 4.9.14 Who can request suspension -Not applicable. - -### 4.9.15 Procedure for suspension request -Not applicable. - -### 4.9.16 Limits on suspension period -Not applicable. - -## 4.10 Certificate status services - -### 4.10.1 Operational characteristics -Revocation entries on a CRL or OCSP Response MUST NOT be removed until after the Expiry Date of the revoked -Certificate - -### 4.10.2 Service availability -The CA SHALL operate and maintain its CRL and OCSP capability with resources sufficient to provide a response time of ten seconds or less under normal operating conditions. - -The CA SHALL maintain an online 24x7 Repository that application software can use to automatically check the current status of all unexpired Certificates issued by the CA. - -The CA SHALL maintain a continuous 24x7 ability to respond internally to a high-priority Certificate Problem Report, and where appropriate, forward such a complaint to law enforcement authorities, and/or revoke a Certificate that is the subject of such a complaint. - -### 4.10.3 Optional features -No stipulation. - -## 4.11 End of subscription -No stipulation. - -## 4.12 Key escrow and recovery - -### 4.12.1 Key escrow and recovery policy and practices -No stipulation. - -### 4.12.2 Session key encapsulation and recovery policy and practices -Not applicable. - -# 5. MANAGEMENT, OPERATIONAL, AND PHYSICAL CONTROLS - -The CA/Browser Forum's Network and Certificate System Security Requirements are incorporated by reference as if fully set forth herein. - -The CA SHALL develop, implement, and maintain a comprehensive security program designed to: - -1. Protect the confidentiality, integrity, and availability of Certificate Data and Certificate Management Processes; -2. Protect against anticipated threats or hazards to the confidentiality, integrity, and availability of the Certificate Data and Certificate Management Processes; -3. Protect against unauthorized or unlawful access, use, disclosure, alteration, or destruction of any Certificate Data or Certificate Management Processes; -4. Protect against accidental loss or destruction of, or damage to, any Certificate Data or Certificate Management Processes; and -5. Comply with all other security requirements applicable to the CA by law. - -The Certificate Management Process MUST include: - -1. physical security and environmental controls; -2. system integrity controls, including configuration management, integrity maintenance of trusted code, and malware detection/prevention; -3. network security and firewall management, including port restrictions and IP address filtering; -4. user management, separate trusted-role assignments, education, awareness, and training; and -5. logical access controls, activity logging, and inactivity time-outs to provide individual accountability. - -The CA's security program MUST include an annual Risk Assessment that: - -1. Identifies foreseeable internal and external threats that could result in unauthorized access, disclosure, misuse, alteration, or destruction of any Certificate Data or Certificate Management Processes; -2. Assesses the likelihood and potential damage of these threats, taking into consideration the sensitivity of the Certificate Data and Certificate Management Processes; and -3. Assesses the sufficiency of the policies, procedures, information systems, technology, and other arrangements that the CA has in place to counter such threats. - -Based on the Risk Assessment, the CA SHALL develop, implement, and maintain a security plan consisting of security procedures, measures, and products designed to achieve the objectives set forth above and to manage and control the risks identified during the Risk Assessment, commensurate with the sensitivity of the Certificate Data and Certificate Management Processes. The security plan MUST include administrative, organizational, technical, and physical safeguards appropriate to the sensitivity of the Certificate Data and Certificate Management Processes. The security plan MUST also take into account then-available technology and the cost of implementing the specific measures, and SHALL implement a reasonable level of security appropriate to the harm that might result from a breach of security and the nature of the data to be protected. -{:.br data-sect="16.3"} - -## 5.1 PHYSICAL SECURITY CONTROLS - -### 5.1.1 Site location and construction - -### 5.1.2 Physical access - -### 5.1.3 Power and air conditioning - -### 5.1.4 Water exposures - -### 5.1.5 Fire prevention and protection - -### 5.1.6 Media storage - -### 5.1.7 Waste disposal - -### 5.1.8 Off-site backup - -## 5.2 Procedural controls - -### 5.2.1 Trusted roles - -### 5.2.2 Number of Individuals Required per Task -The CA Private Key SHALL be backed up, stored, and recovered only by personnel in trusted roles using, at least, dual control in a physically secured environment. - -### 5.2.3 Identification and authentication for each role - -### 5.2.4 Roles requiring separation of duties - -## 5.3 Personnel controls - -### 5.3.1 Qualifications, experience, and clearance requirements -Prior to the engagement of any person in the Certificate Management Process, whether as an employee, agent, or an independent contractor of the CA, the CA SHALL verify the identity and trustworthiness of such person. - -### 5.3.2 Background check procedures - -### 5.3.3 Training Requirements and Procedures -The CA SHALL provide all personnel performing information verification duties with skills-training that covers basic Public Key Infrastructure knowledge, authentication and vetting policies and procedures (including the CA's Certificate Policy and/or Certification Practice Statement), common threats to the information verification process (including phishing and other social engineering tactics), and these Requirements. - -The CA SHALL maintain records of such training and ensure that personnel entrusted with Validation Specialist duties maintain a skill level that enables them to perform such duties satisfactorily. - -The CA SHALL document that each Validation Specialist possesses the skills required by a task before allowing the Validation Specialist to perform that task. - -The CA SHALL require all Validation Specialists to pass an examination provided by the CA on the information verification requirements outlined in these Requirements. - -### 5.3.4 Retraining frequency and requirements -All personnel in Trusted roles SHALL maintain skill levels consistent with the CA's training and performance programs. - -### 5.3.5 Job rotation frequency and sequence - -### 5.3.6 Sanctions for unauthorized actions - -### 5.3.7 Independent Contractor Controls -The CA SHALL verify that the Delegated Third Party's personnel involved in the issuance of a Certificate meet the training and skills requirements of Section 5.3.3 and the document retention and event logging requirements of Section 5.4.1. - -### 5.3.8 Documentation supplied to personnel - -## 5.4 Audit logging procedures - -### 5.4.1 Types of events recorded -The CA and each Delegated Third Party SHALL record details of the actions taken to process a certificate request and to issue a Certificate, including all information generated and documentation received in connection with the certificate request; the time and date; and the personnel involved. The CA SHALL make these records available to its Qualified Auditor as proof of the CA's compliance with these Requirements. - -The CA SHALL record at least the following events: - -1. CA key lifecycle management events, including: - - a. Key generation, backup, storage, recovery, archival, and destruction; and - b. Cryptographic device lifecycle management events. - -2. CA and Subscriber Certificate lifecycle management events, including: - - a. Certificate requests, renewal, and re-key requests, and revocation; - b. All verification activities stipulated in these Requirements and the CA's Certification Practice Statement; - c. Date, time, phone number used, persons spoken to, and end results of verification telephone calls; - d. Acceptance and rejection of certificate requests; Frequency of Processing Log - e. Issuance of Certificates; and - f. Generation of Certificate Revocation Lists and OCSP entries. - -3. Security events, including: - - a. Successful and unsuccessful PKI system access attempts; - b. PKI and security system actions performed; - c. Security profile changes; - d. System crashes, hardware failures, and other anomalies; - e. Firewall and router activities; and - f. Entries to and exits from the CA facility. - -Log entries MUST include the following elements: - -1. Date and time of entry; -2. Identity of the person making the journal entry; and -3. Description of the entry. - -### 5.4.2 Frequency for Processing and Archiving Audit Logs - -### 5.4.3 Retention Period for Audit Logs -The CA SHALL retain any audit logs generated for at least seven years. The CA SHALL make these audit logs available to its Qualified Auditor upon request. - -### 5.4.4 Protection of Audit Log - -### 5.4.5 Audit Log Backup Procedures - -### 5.4.6 Audit Log Accumulation System (internal vs. external) - -### 5.4.7 Notification to event-causing subject - -### 5.4.8 Vulnerability assessments -Additionally, the CA's security program MUST include an annual Risk Assessment that: - -1. Identifies foreseeable internal and external threats that could result in unauthorized access, disclosure, misuse, alteration, or destruction of any Certificate Data or Certificate Management Processes; -2. Assesses the likelihood and potential damage of these threats, taking into consideration the sensitivity of the Certificate Data and Certificate Management Processes; and -3. Assesses the sufficiency of the policies, procedures, information systems, technology, and other arrangements that the CA has in place to counter such threats. - -## 5.5 Records archival - -### 5.5.1 Types of records archived - -### 5.5.2 Retention period for archive -The CA SHALL retain all documentation relating to certificate requests and the verification thereof, and all Certificates and revocation thereof, for at least seven years after any Certificate based on that documentation ceases to be valid. - -### 5.5.3 Protection of archive - -### 5.5.4 Archive backup procedures - -### 5.5.5 Requirements for time-stamping of records - -### 5.5.6 Archive collection system (internal or external) - -### 5.5.7 Procedures to obtain and verify archive information - -## 5.6 Key changeover - -## 5.7 Compromise and disaster recovery - -### 5.7.1 Incident and compromise handling procedures -CA organizations shall have an Incident Response Plan and a Disaster Recovery Plan. - -The CA SHALL document a business continuity and disaster recovery procedures designed to notify and reasonably protect Application Software Suppliers, Subscribers, and Relying Parties in the event of a disaster, security compromise, or business failure. The CA is not required to publicly disclose its business continuity plans but SHALL make its business continuity plan and security plans available to the CA's auditors upon request. The CA SHALL annually test, review, and update these procedures. - -The business continuity plan MUST include: - -1. The conditions for activating the plan, -2. Emergency procedures, -3. Fallback procedures, -4. Resumption procedures, -5. A maintenance schedule for the plan; -6. Awareness and education requirements; -7. The responsibilities of the individuals; -8. Recovery time objective (RTO); -9. Regular testing of contingency plans. -10. The CA's plan to maintain or restore the CA's business operations in a timely manner following interruption to or failure of critical business processes -11. A requirement to store critical cryptographic materials (i.e., secure cryptographic device and activation materials) at an alternate location; -12. What constitutes an acceptable system outage and recovery time -13. How frequently backup copies of essential business information and software are taken; -14. The distance of recovery facilities to the CA's main site; and -15. Procedures for securing its facility to the extent possible during the period of time following a disaster and prior to restoring a secure environment either at the original or a remote site. - -### 5.7.2 Recovery Procedures if Computing resources, software, and/or data are corrupted - -### 5.7.3 Recovery Procedures after Key Compromise - -### 5.7.4 Business continuity capabilities after a disaster - -## 5.8 CA or RA termination - -# 6. TECHNICAL SECURITY CONTROLS - -## 6.1 Key pair generation and installation - -### 6.1.1 Key pair generation - -#### 6.1.1.1 CA Key Pair Generation -For Root CA Key Pairs created after the Effective Date that are either (i) used as Root CA Key Pairs or (ii) Key Pairs generated for a subordinate CA that is not the operator of the Root CA or an Affiliate of the Root CA, the CA SHALL: - -1. prepare and follow a Key Generation Script, -2. have a Qualified Auditor witness the Root CA Key Pair generation process or record a video of the entire Root CA Key Pair generation process, and -3. have a Qualified Auditor issue a report opining that the CA followed its key ceremony during its Key and Certificate generation process and the controls used to ensure the integrity and confidentiality of the Key Pair. - -For other CA Key Pairs created after the Effective Date that are for the operator of the Root CA or an Affiliate of the Root CA, the CA SHOULD: - -1. prepare and follow a Key Generation Script and -2. have a Qualified Auditor witness the Root CA Key Pair generation process or record a video of the entire Root CA Key Pair generation process. - -In all cases, the CA SHALL: - -1. generate the keys in a physically secured environment as described in the CA's Certification Practice Statement; -2. generate the CA keys using personnel in Trusted Roles under the principles of multiple person control and split knowledge; -3. generate the CA keys within cryptographic modules meeting the applicable technical and business requirements as disclosed in the CA's Certificate Policy and/or Certification Practice Statement; -4. log its CA key generation activities; and -5. maintain effective controls to provide reasonable assurance that the Private Key was generated and protected in conformance with the procedures described in its Certificate Policy and/or Certification Practice Statement and (if applicable) its Key Generation Script. - -#### 6.1.1.2 RA Key Pair Generation - -#### 6.1.1.3 Subscriber Key Pair Generation -The CA SHALL reject a certificate request if the requested Public Key does not meet the requirements set forth in Sections 6.1.5 and 6.1.6 or if it has a known weak Private Key (such as a Debian weak key, see ). - -### 6.1.2 Private key delivery to subscriber -Parties other than the Subscriber SHALL NOT archive the Subscriber Private Key without authorization by the Subscriber. - -If the CA or any of its designated RAs generated the Private Key on behalf of the Subscriber, then the CA SHALL encrypt the Private Key for transport to the Subscriber. - -If the CA or any of its designated RAs become aware that a Subscriber's Private Key has been communicated to an unauthorized person or an organization not affiliated with the Subscriber, then the CA SHALL revoke all certificates that include the Public Key corresponding to the communicated Private Key. - -### 6.1.3 Public key delivery to certificate issuer - -### 6.1.4 CA public key delivery to relying parties - -### 6.1.5 Key sizes -Certificates MUST meet the following requirements for algorithm type and key size. - -(1) Root CA Certificates - -||Validity period beginning on or before 31 Dec 2010|Validity period beginning after 31 Dec 2010| -|---|---|---| -|Digest algorithm|MD5 (NOT RECOMMENDED), SHA-1, SHA-256, SHA-384 or SHA-512|SHA-1\*, SHA-256, SHA-384 or SHA-512| -|Minimum RSA modulus size (bits)|2048\*\*|2048| -|ECC curve|NIST P-256, P-384, or P-521|NIST P-256, P-384, or P-521| -|Minimum DSA modulus and divisor size (bits)\*\*\*|L= 2048 N= 224 or L= 2048 N= 256|L= 2048 N= 224 or L= 2048 N= 256| - -(2) Subordinate CA Certificates - -||Validity period beginning on or before 31 Dec 2010 and ending on or before 31 Dec 2013|Validity period beginning after 31 Dec 2010 or ending after 31 Dec 2013| -|---|---|---| -|Digest algorithm|SHA-1, SHA-256, SHA-384 or SHA-512|SHA-1\*, SHA-256, SHA-384 or SHA-512| -|Minimum RSA modulus size (bits)|1024|2048| -|ECC curve|NIST P-256, P-384, or P-521|NIST P-256, P-384, or P-521| -|Minimum DSA modulus and divisor size (bits)\*\*\*|L= 2048, N= 224 or L= 2048, N= 256|L= 2048 N= 224 or L= 2048 N= 256 - -(3) Subscriber Certificates - -||Validity period *ending* on or before 31 Dec 2013|Validity period *ending* after 31 Dec 2013| -|---|---|---| -|Digest algorithm|SHA1\*, SHA-256, SHA-384 or SHA-512|SHA-1\*, SHA-256, SHA-384 or SHA-512| -|Minimum RSA modulus size (bits)|1024|2048| -|ECC curve|NIST P-256, P-384, or P-521|NIST P-256, P-384, or P-521| -|Minimum DSA modulus and divisor size (bits)|L= 2048, N= 224 or L= 2048, N= 256|L= 2048 N= 224 or L= 2048 N= 256 - -\* SHA-1 MAY be used with RSA keys until SHA-256 is supported widely by browsers used by a substantial portion of relying-parties worldwide. - -\*\* A Root CA Certificate issued prior to 31 Dec. 2010 with an RSA key size less than 2048 bits MAY still serve as a trust anchor for Subscriber Certificates issued in accordance with these Requirements. - -\*\*\* L and N (the bit lengths of modulus p and divisor q, respectively) are described in the Digital Signature Standard, FIPS 186-4 (http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf). - -### 6.1.6 Public key parameters generation and quality checking -RSA: The CA SHALL confirm that the value of the public exponent is an odd number equal to 3 or more. Additionally, the public exponent SHOULD be in the range between 216+1 and 2256-1. The modulus SHOULD also have the following characteristics: an odd number, not the power of a prime, and have no factors smaller than 752. [Source: Section 5.3.3, NIST SP 800-89] - -DSA: Although FIPS 800-57 says that domain parameters may be made available at some accessible site, compliant DSA certificates MUST include all domain parameters. This is to insure maximum interoperability among relying party software. The CA MUST confirm that the value of the public key has the unique correct representation and range in the field, and that the key has the correct order in the subgroup. [Source: Section 5.3.1, NIST SP 800-89] - -ECC: The CA SHOULD confirm the validity of all keys using either the ECC Full Public Key Validation Routine or the ECC Partial Public Key Validation Routine. [Source: Sections 5.6.2.3.2 and 5.6.2.3.3, respectively, of NIST SP 800-56A: Revision 2] - -### 6.1.7 Key usage purposes (as per X.509 v3 key usage field) -Root CA Private Keys MUST NOT be used to sign Certificates except in the following cases: - -1. Self-signed Certificates to represent the Root CA itself; -2. Certificates for Subordinate CAs and Cross Certificates; -3. Certificates for infrastructure purposes (e.g. administrative role certificates, internal CA operational device certificates, and OCSP Response verification Certificates); -4. Certificates issued solely for the purpose of testing products with Certificates issued by a Root CA; and -5. Subscriber Certificates, provided that: - - a. The Root CA uses a 1024-bit RSA signing key that was created prior to the Effective Date; - - b. The Applicant's application was deployed prior to the Effective Date; - - c. The Applicant's application is in active use by the Applicant or the CA uses a documented process to establish that the Certificate's use is required by a substantial number of Relying Parties; - - d. The CA follows a documented process to determine that the Applicant's application poses no known security risks to Relying Parties; - - e. The CA documents that the Applicant's application cannot be patched or replaced without substantial economic outlay; - - f. The CA signs the Subscriber Certificate on or before June 30, 2016; and - - g. The notBefore field in the Subscriber Certificate has a date on or before June 30, 2016. - - -## 6.2 Private Key Protection and Cryptographic Module Engineering Controls -The CA SHALL implement physical and logical safeguards to prevent unauthorized certificate issuance. Protection of the CA Private Key outside the validated system or device specified above MUST consist of physical security, encryption, or a combination of both, implemented in a manner that prevents disclosure of the Private Key. The CA SHALL encrypt its Private Key with an algorithm and key-length that, according to the state of the art, are capable of withstanding cryptanalytic attacks for the residual life of the encrypted key or key part. - -### 6.2.1 Cryptographic module standards and controls - -### 6.2.2 Private key (n out of m) multi-person control - -### 6.2.3 Private key escrow - -### 6.2.4 Private key backup -See Section 5.2.2. - -### 6.2.5 Private key archival -Parties other than the Subordinate CA SHALL NOT archive the Subordinate CA Private Keys without authorization by the Subordinate CA. - -### 6.2.6 Private key transfer into or from a cryptographic module -If the Issuing CA generated the Private Key on behalf of the Subordinate CA, then the Issuing CA SHALL encrypt the Private Key for transport to the Subordinate CA. If the Issuing CA becomes aware that a Subordinate CA's Private Key has been communicated to an unauthorized person or an organization not affiliated with the Subordinate CA, then the Issuing CA SHALL revoke all certificates that include the Public Key corresponding to the communicated Private Key. - -### 6.2.7 Private key storage on cryptographic module -The CA SHALL protect its Private Key in a system or device that has been validated as meeting at least FIPS 140 level 3 or an appropriate Common Criteria Protection Profile or Security Target, EAL 4 (or higher), which includes requirements to protect the Private Key and other assets against known threats. - -### 6.2.8 Activating Private Keys - -### 6.2.9 Deactivating Private Keys - -### 6.2.10 Destroying Private Keys - -### 6.2.11 Cryptographic Module Capabilities - -## 6.3 Other aspects of key pair management - -### 6.3.1 Public key archival - -### 6.3.2 Certificate operational periods and key pair usage periods -Subscriber Certificates issued after the Effective Date MUST have a Validity Period no greater than 60 months. -Except as provided for below, Subscriber Certificates issued after 1 April 2015 MUST have a Validity Period no greater than 39 months. - -Until 30 June 2016, CAs MAY continue to issue Subscriber Certificates with a Validity Period greater than 39 months but not greater than 60 months provided that the CA documents that the Certificate is for a system or software that: - -a. was in use prior to the Effective Date; -b. is currently in use by either the Applicant or a substantial number of Relying Parties; -c. fails to operate if the Validity Period is shorter than 60 months; -d. does not contain known security risks to Relying Parties; and -e. is difficult to patch or replace without substantial economic outlay. - -## 6.4 Activation data - -### 6.4.1 Activation data generation and installation - -### 6.4.2 Activation data protection - -### 6.4.3 Other aspects of activation data - -## 6.5 Computer security controls - -### 6.5.1 Specific computer security technical requirements - -The CA SHALL enforce multi-factor authentication for all accounts capable of directly causing certificate issuance. - -### 6.5.2 Computer security rating - -## 6.6 Life cycle technical controls - -### 6.6.1 System development controls - -### 6.6.2 Security management controls - -### 6.6.3 Life cycle security controls - -## 6.7 Network security controls - -## 6.8 Time-stamping - -# 7. CERTIFICATE, CRL, AND OCSP PROFILES - -## 7.1 Certificate profile - -The CA SHALL meet the technical requirements set forth in Section 2.2 - Publication of Information, Section 6.1.5 - Key Sizes, and Section 6.1.6 - Public Key Parameters Generation and Quality Checking. - -Effective September 30, 2016, CAs SHALL generate non-sequential Certificate serial numbers greater than zero (0) containing at least 64 bits of output from a CSPRNG. - -### 7.1.1 Version number(s) -Certificates MUST be of type X.509 v3. - - -### 7.1.2 Certificate Content and Extensions; Application of RFC 5280 -This section specifies the additional requirements for Certificate content and extensions for Certificates generated after the Effective Date. - -#### 7.1.2.1 Root CA Certificate -a. basicConstraints -This extension MUST appear as a critical extension. The cA field MUST be set true. The pathLenConstraint field SHOULD NOT be present. - -b. keyUsage -This extension MUST be present and MUST be marked critical. Bit positions for keyCertSign and cRLSign MUST be set. If the Root CA Private Key is used for signing OCSP responses, then the digitalSignature bit MUST be set. - -c. certificatePolicies -This extension SHOULD NOT be present. - -d. extendedKeyUsage -This extension MUST NOT be present. - -e. Subject Information - -The Certificate Subject MUST contain the following: -- countryName (OID 2.5.4.6). This field MUST contain the two-letter ISO 3166-1 country code for the country in which the CA's place of business is located. - -- organizationName (OID 2.5.4.10): This field MUST be present and the contents MUST contain either the Subject CA’s name or DBA as verified under Section 3.2.2.2. The CA may include information in this field that differs slightly from the verified name, such as common variations or abbreviations, provided that the CA documents the difference and any abbreviations used are locally accepted abbreviations; e.g., if the official record shows “Company Name Incorporated”, the CA MAY use “Company Name Inc.” or “Company Name". - -#### 7.1.2.2 Subordinate CA Certificate -a. certificatePolicies - - This extension MUST be present and SHOULD NOT be marked critical. - - certificatePolicies:policyIdentifier (Required) - - The following fields MAY be present if the Subordinate CA is not an Affiliate of the entity that controls the Root CA. - - certificatePolicies:policyQualifiers:policyQualifierId (Optional) - - * id-qt 1 [RFC 5280]. - - * certificatePolicies:policyQualifiers:qualifier:cPSuri (Optional) - - * HTTP URL for the Root CA's Certificate Policyies, Certification Practice Statement, Relying Party Agreement, or other pointer to online policy information provided by the CA. - -b. cRLDistributionPoints - - This extension MUST be present and MUST NOT be marked critical. It MUST contain the HTTP URL of the CA's CRL service. - -c. authorityInformationAccess - - With the exception of stapling, which is noted below, this extension MUST be present. It MUST NOT be marked critical, and it MUST contain the HTTP URL of the Issuing CA's OCSP responder (accessMethod = 1.3.6.1.5.5.7.48.1). It SHOULD also contain the HTTP URL of the Issuing CA's certificate (accessMethod = 1.3.6.1.5.5.7.48.2). - - The HTTP URL of the Issuing CA's OCSP responder MAY be omitted, provided that the Subscriber "staples" the OCSP response for the Certificate in its TLS handshakes [RFC4366]. - -d. basicConstraints - - This extension MUST be present and MUST be marked critical. The cA field MUST be set true. The pathLenConstraint field MAY be present. - -e. keyUsage - - This extension MUST be present and MUST be marked critical. Bit positions for keyCertSign and cRLSign MUST be set. If the Subordinate CA Private Key is used for signing OCSP responses, then the digitalSignature bit MUST be set. - -f. nameConstraints (optional) - - If present, this extension SHOULD be marked critical\*. - - \* Non-critical Name Constraints are an exception to RFC 5280 (4.2.1.10), however, they MAY be used until the Name Constraints extension is supported by Application Software Suppliers whose software is used by a substantial portion of Relying Parties worldwide. - -g. extkeyUsage (optional) - - For Subordinate CA Certificates to be Technically constrained in line with section 7.1.5, then either the value id-kp-serverAuth [RFC5280] or id-kp-clientAuth [RFC5280] or both values MUST be present\*\*. - - Other values MAY be present. - - If present, this extension SHOULD be marked non-critical. - - \*\* Generally Extended Key Usage will only appear within end entity certificates (as highlighted in RFC 5280 (4.2.1.12)), however, Subordinate CAs MAY include the extension to further protect relying parties until the use of the extension is consistent between Application Software Suppliers whose software is used by a substantial portion of Relying Parties worldwide. - -h. Subject Information - -The Certificate Subject MUST contain the following: -- countryName (OID 2.5.4.6). This field MUST contain the two-letter ISO 3166-1 country code for the country in which the CA's place of business is located. -- organizationName (OID 2.5.4.10): This field MUST be present and the contents MUST contain either the Subject CA’s name or DBA as verified under Section 3.2.2.2. The CA may include information in this field that differs slightly from the verified name, such as common variations or abbreviations, provided that the CA documents the difference and any abbreviations used are locally accepted abbreviations; e.g., if the official record shows “Company Name Incorporated”, the CA MAY use “Company Name Inc.” or “Company Name". - -#### 7.1.2.3 Subscriber Certificate -a. certificatePolicies - - This extension MUST be present and SHOULD NOT be marked critical. - - * certificatePolicies:policyIdentifier (Required) - - A Policy Identifier, defined by the issuing CA, that indicates a Certificate Policy asserting the issuing CA's adherence to and compliance with these Requirements. - - The following extensions MAY be present: - - * certificatePolicies:policyQualifiers:policyQualifierId (Recommended) - - * id-qt 1 [RFC 5280]. - - * certificatePolicies:policyQualifiers:qualifier:cPSuri (Optional) - - HTTP URL for the Subordinate CA's Certification Practice Statement, Relying Party Agreement or other pointer to online information provided by the CA. - -b. cRLDistributionPoints - - This extension MAY be present. If present, it MUST NOT be marked critical, and it MUST contain the HTTP URL of the CA's CRL service. - -c. authorityInformationAccess - - With the exception of stapling, which is noted below, this extension MUST be present. It MUST NOT be marked critical, and it MUST contain the HTTP URL of the Issuing CA's OCSP responder (accessMethod = 1.3.6.1.5.5.7.48.1). It SHOULD also contain the HTTP URL of the Issuing CA's certificate (accessMethod = 1.3.6.1.5.5.7.48.2). - - The HTTP URL of the Issuing CA's OCSP responder MAY be omitted provided that the Subscriber "staples" OCSP responses for the Certificate in its TLS handshakes [RFC4366]. - -d. basicConstraints (optional) - - The cA field MUST NOT be true. - -e. keyUsage (optional) - - If present, bit positions for keyCertSign and cRLSign MUST NOT be set. - -f. extKeyUsage (required) - - Either the value id-kp-serverAuth [RFC5280] or id-kp-clientAuth [RFC5280] or both values MUST be present. id-kp-emailProtection [RFC5280] MAY be present. Other values SHOULD NOT be present. - -#### 7.1.2.4 All Certificates -All other fields and extensions MUST be set in accordance with RFC 5280. The CA SHALL NOT issue a Certificate that contains a keyUsage flag, extendedKeyUsage value, Certificate extension, or other data not specified in section 7.1.2.1, 7.1.2.2, or 7.1.2.3 unless the CA is aware of a reason for including the data in the Certificate. - -CAs SHALL NOT issue a Certificate with: - -a. Extensions that do not apply in the context of the public Internet (such as an extendedKeyUsage value for a service that is only valid in the context of a privately managed network), unless: - - i. such value falls within an OID arc for which the Applicant demonstrates ownership, or - ii. the Applicant can otherwise demonstrate the right to assert the data in a public context; or - - -b. semantics that, if included, will mislead a Relying Party about the certificate information verified by the CA (such as including extendedKeyUsage value for a smart card, where the CA is not able to verify that the corresponding Private Key is confined to such hardware due to remote issuance). - -#### 7.1.2.5 Application of RFC 5280 -For purposes of clarification, a Precertificate, as described in RFC 6962 - Certificate Transparency, shall not be considered to be a "certificate" subject to the requirements of RFC 5280 - Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile under these Baseline Requirements. - -### 7.1.3 Algorithm object identifiers -Effective 1 January 2016, CAs MUST NOT issue any new Subscriber certificates or Subordinate CA certificates using the SHA-1 hash algorithm. CAs MAY continue to sign certificates to verify OCSP responses using SHA1 until 1 January 2017. This Section 7.1.3 does not apply to Root CA or CA cross certificates. CAs MAY continue to use their existing SHA-1 Root Certificates. SHA-2 Subscriber certificates SHOULD NOT chain up to a SHA-1Subordinate CA Certificate. - -Effective 16 January 2015, CAs SHOULD NOT issue Subscriber Certificates utilizing the SHA-1 algorithm with an Expiry Date greater than 1 January 2017 because Application Software Providers are in the process of deprecating and/or removing the SHA-1 algorithm from their software, and they have communicated that CAs and Subscribers using such certificates do so at their own risk. - -### 7.1.4 Name forms - -#### 7.1.4.1 Issuing CA Certificate Subject -The content of the Certificate Issuer Distinguished Name field MUST match the Subject DN of the Issuing CA to support Name chaining as specified in RFC 5280, section 4.1.2.4. - -#### 7.1.4.2 Subject Information for Standard Server Authentication certificates -By issuing the Certificate, the CA represents that it followed the procedure set forth in its Certificate Policy and/or Certification Practice Statement to verify that, as of the Certificate's issuance date, all of the Subject Information was accurate. CAs SHALL NOT include a Domain Name or IP Address in a Subject attribute except as specified in Section 3.2.2.4 or Section 3.2.2.5. - -#### 7.1.4.2.1 Subject Alternative Name Extension -Certificate Field: extensions:subjectAltName -Required/Optional: Required -Contents: This extension MUST contain at least one entry. Each entry MUST be either a dNSName containing the Fully-Qualified Domain Name or an iPAddress containing the IP address of a server. The CA MUST confirm that the Applicant controls the Fully-Qualified Domain Name or IP address or has been granted the right to use it by the Domain Name Registrant or IP address assignee, as appropriate. - -Wildcard FQDNs are permitted. - -As of the Effective Date of these Requirements, prior to the issuance of a Certificate with a subjectAlternativeName extension or Subject commonName field containing a Reserved IP Address or Internal Name, the CA SHALL notify the Applicant that the use of such Certificates has been deprecated by the CA / Browser Forum and that the practice will be eliminated by October 2016. Also as of the Effective Date, the CA SHALL NOT issue a certificate with an Expiry Date later than 1 November 2015 with a subjectAlternativeName extension or Subject commonName field containing a Reserved IP Address or Internal Name. Effective 1 October 2016, CAs SHALL revoke all unexpired Certificates whose subjectAlternativeName extension or Subject commonName field contains a Reserved IP Address or Internal Name. - -#### 7.1.4.2.2. Subject Distinguished Name Fields -a. Certificate Field: subject:commonName (OID 2.5.4.3) -Required/Optional: Deprecated (Discouraged, but not prohibited) -Contents: If present, this field MUST contain a single IP address or Fully-Qualified Domain Name that is one of the values contained in the Certificate's subjectAltName extension (see Section 7.1.4.2.1). - -b. Certificate Field: subject:organizationName (OID 2.5.4.10) -Optional. -Contents: If present, the subject:organizationName field MUST contain either the Subject's name or DBA as verified under Section 3.2.2.2. The CA may include information in this field that differs slightly from the verified name, such as common variations or abbreviations, provided that the CA documents the difference and any abbreviations used are locally accepted abbreviations; e.g., if the official record shows "Company Name Incorporated", the CA MAY use "Company Name Inc." or "Company Name". Because Subject name attributes for individuals (e.g. givenName (2.5.4.42) and surname (2.5.4.4)) are not broadly supported by application software, the CA MAY use the subject:organizationName field to convey a natural person Subject's name or DBA. - -c. Certificate Field: subject:givenName (2.5.4.42) and subject:surname (2.5.4.4) -Optional. -Contents: If present, the subject:givenName field and subject:surname field MUST contain an natural person Subject’s name as verified under Section 3.2.3. A Certificate containing a subject:givenName field or subject:surname field MUST contain the (2.23.140.1.2.3) Certificate Policy OID. - -d. Certificate Field: Number and street: subject:streetAddress (OID: 2.5.4.9) -Optional if the subject:organizationName field, subject: givenName field, or subject:surname field are present. -Prohibited if the subject:organizationName field, subject:givenName, and subject:surname field are absent. -Contents: If present, the subject:streetAddress field MUST contain the Subject's street address information as verified under Section 3.2.2.1. - -e. Certificate Field: subject:localityName (OID: 2.5.4.7) -Required if the subject:organizationName field, subject:givenName field, or subject:surname field are present and the subject:stateOrProvinceName field is absent. -Optional if the subject:stateOrProvinceName field and the subject:organizationName field, subject:givenName field, or subject:surname field are present. -Prohibited if the subject:organizationName field, subject:givenName, and subject:surname field are absent. -Contents: If present, the subject:localityName field MUST contain the Subject's locality information as verified under Section 3.2.2.1. If the subject:countryName field specifies the ISO 3166-1 user-assigned code of XX in accordance with Section 7.1.4.2.2(g), the localityName field MAY contain the Subject's locality and/or state or province information as verified under Section 3.2.2.1. - -f. Certificate Field: subject:stateOrProvinceName (OID: 2.5.4.8) -Required if the subject:organizationName field, subject:givenName field, or subject:surname field are present and subject:localityName field is absent. -Optional if the subject:localityName field and the subject:organizationName field, the subject:givenName field, or the subject:surname field are present. -Prohibited if the subject:organizationName field, the subject:givenName field, or subject:surname field are absent. -Contents: If present, the subject:stateOrProvinceName field MUST contain the Subject's state or province information as verified under Section 3.2.2.1. If the subject:countryName field specifies the ISO 3166-1 user-assigned code of XX in accordance with Section 7.1.4.2.2(g), the subject:stateOrProvinceName field MAY contain the full name of the Subject's country information as verified under Section 3.2.2.1. - -g. Certificate Field: subject:postalCode (OID: 2.5.4.17) -Optional if the subject:organizationName, subject:givenName field, or subject:surname fields are present. -Prohibited if the subject:organizationName field, subject:givenName field, or subject:surname field are absent. -Contents: If present, the subject:postalCode field MUST contain the Subject's zip or postal information as verified under Section 3.2.2.1. - -h. Certificate Field: subject:countryName (OID: 2.5.4.6) -Required if the subject:organizationName field, subject:givenName, or subject:surname field are present. -Optional if the subject:organizationName field, subject:givenName field, and subject:surname field are absent. -Contents: If the subject:organizationName field is present, the subject:countryName MUST contain the two-letter ISO 3166-1 country code associated with the location of the Subject verified under Section 3.2.2.1. If the subject:organizationName field is absent, the subject:countryName field MAY contain the two-letter ISO 3166-1 country code associated with the Subject as verified in accordance with Section 3.2.2.3. If a Country is not represented by an official ISO 3166-1 country code, the CA MAY specify the ISO 3166-1 user-assigned code of XX indicating that an official ISO 3166-1 alpha-2 code has not been assigned. - -i. Certificate Field: subject:organizationalUnitName -Optional. -The CA SHALL implement a process that prevents an OU attribute from including a name, DBA, tradename, trademark, address, location, or other text that refers to a specific natural person or Legal Entity unless the CA has verified this information in accordance with Section 3.2 and the Certificate also contains subject:organizationName, subject:givenName, subject:surname, subject:localityName, and subject:countryName attributes, also verified in accordance with Section 3.2.2.1. - -j. Other Subject Attributes -All other optional attributes, when present within the subject field, MUST contain information that has been verified by the CA. Optional attributes MUST NOT contain metadata such as '.', '-', and ' ' (i.e. space) characters, and/or any other indication that the value is absent, incomplete, or not applicable. - -#### 7.1.4.3. Subject Information - Subordinate CA Certificates -By issuing a Subordinate CA Certificate, the CA represents that it followed the procedure set forth in its Certificate Policy and/or Certification Practice Statement to verify that, as of the Certificate's issuance date, all of the Subject Information was accurate. - -### 7.1.5 Name constraints -For a Subordinate CA Certificate to be considered Technically Constrained, the certificate MUST include an Extended Key Usage (EKU) extension specifying all extended key usages that the Subordinate CA Certificate is authorized to issue certificates for. The anyExtendedKeyUsage KeyPurposeId MUST NOT appear within this extension. - -If the Subordinate CA Certificate includes the id-kp-serverAuth extended key usage, then the Subordinate CA Certificate MUST include the Name Constraints X.509v3 extension with constraints on dNSName, iPAddress and DirectoryName as follows: - -a. For each dNSName in permittedSubtrees, the CA MUST confirm that the Applicant has registered the dNSName or has been authorized by the domain registrant to act on the registrant's behalf in line with the verification practices of section 3.2.2.4. -b. For each iPAddress range in permittedSubtrees, the CA MUST confirm that the Applicant has been assigned the iPAddress range or has been authorized by the assigner to act on the assignee's behalf. -c. For each DirectoryName in permittedSubtrees the CA MUST confirm the Applicants and/or Subsidiary's Organizational name and location such that end entity certificates issued from the subordinate CA Certificate will be in compliancy with section 7.1.2.4 and 7.1.2.5. - -If the Subordinate CA Certificate is not allowed to issue certificates with an iPAddress, then the Subordinate CA Certificate MUST specify the entire IPv4 and IPv6 address ranges in excludedSubtrees. The Subordinate CA Certificate MUST include within excludedSubtrees an iPAddress GeneralName of 8 zero octets (covering the IPv4 address range of 0.0.0.0/0). The Subordinate CA Certificate MUST also include within excludedSubtrees an iPAddress GeneralName of 32 zero octets (covering the IPv6 address range of ::0/0). Otherwise, the Subordinate CA Certificate MUST include at least one iPAddress in permittedSubtrees. - -A decoded example for issuance to the domain and sub domains of example.com by organization :- Example LLC, Boston, Massachusetts, US would be:- - -> X509v3 Name Constraints: -> Permitted: -> DNS:example.com -> DirName: C=US, ST=MA, L=Boston, O=Example LLC -> Excluded: -> IP:0.0.0.0/0.0.0.0 -> IP:0:0:0:0:0:0:0:0/0:0:0:0:0:0:0:0 - -If the Subordinate CA is not allowed to issue certificates with dNSNames, then the Subordinate CA Certificate MUST include a zero-length dNSName in excludedSubtrees. Otherwise, the Subordinate CA Certificate MUST include at least one dNSName in permittedSubtrees. - -### 7.1.6 Certificate policy object identifier - -#### 7.1.6.1. Reserved Certificate Policy Identifiers -This section describes the content requirements for the Root CA, Subordinate CA, and Subscriber Certificates, as they relate to the identification of Certificate Policy. - -The following Certificate Policy identifiers are reserved for use by CAs as an optional means of asserting compliance with these Requirements as follows: - -{joint-iso-itu-t(2) international-organizations(23) ca-browser-forum(140) certificate-policies(1) baseline-requirements(2) domain-validated(1)} (2.23.140.1.2.1), if the Certificate complies with these Requirements but lacks Subject Identity Information that is verified in accordance with Section 3.2.2.1 or Section 3.2.3. - -If the Certificate asserts the policy identifier of 2.23.140.1.2.1, then it MUST NOT include organizationName, givenName, surname, streetAddress, localityName, stateOrProvinceName, or postalCode in the Subject field. - -{joint-iso-itu-t(2) international-organizations(23) ca-browser-forum(140) certificate-policies(1) baseline-requirements(2) organization-validated(2)} (2.23.140.1.2.2), if the Certificate complies with these Requirements and includes Subject Identity Information that is verified in accordance with Section 3.2.2.1. - -{joint-iso-itu-t(2) international-organizations(23) ca-browser-forum(140) certificate-policies(1) baseline-requirements(2) individual-validated(3)} (2.23.140.1.2.3), if the Certificate complies with these Requirements and includes Subject Identity Information that is verified in accordance with Section 3.2.3. - -If the Certificate asserts the policy identifier of 2.23.140.1.2.2, then it MUST also include organizationName, localityName (to the extent such field is required under Section 7.1.4.2.2), stateOrProvinceName (to the extent such field is required under Section 7.1.4.2.2), and countryName in the Subject field. If the Certificate asserts the policy identifier of 2.23.140.1.2.3, then it MUST also include (i) either organizationName or givenName and surname, (ii) localityName (to the extent such field is required under Section 7.1.4.2.2), (iii) stateOrProvinceName (to the extent required under Section 7.1.4.2.2), and (iv) countryName in the Subject field. - -#### 7.1.6.2. Root CA Certificates -A Root CA Certificate SHOULD NOT contain the certificatePolicies extension. - -#### 7.1.6.3 Subordinate CA Certificates -A Certificate issued after the Effective Date to a Subordinate CA that is not an Affiliate of the Issuing CA: - -1. MUST include one or more explicit policy identifiers that indicates the Subordinate CA's adherence to and compliance with these Requirements (i.e. either the CA/Browser Forum reserved identifiers or identifiers defined by the CA in its Certificate Policy and/or Certification Practice Statement) and -2. MUST NOT contain the "anyPolicy" identifier (2.5.29.32.0). - -A Certificate issued after the Effective Date to a Subordinate CA that is an affiliate of the Issuing CA: - -1. MAY include the CA/Browser Forum reserved identifiers or an identifier defined by the CA in its Certificate Policy and/or Certification Practice Statement to indicate the Subordinate CA's compliance with these Requirements and -2. MAY contain the "anyPolicy" identifier (2.5.29.32.0) in place of an explicit policy identifier. - -A Subordinate CA SHALL represent, in its Certificate Policy and/or Certification Practice Statement, that all Certificates containing a policy identifier indicating compliance with these Requirements are issued and managed in accordance with these Requirements. - -#### 7.1.6.4 Subscriber Certificates -A Certificate issued to a Subscriber MUST contain one or more policy identifier(s), defined by the Issuing CA, in the Certificate's certificatePolicies extension that indicates adherence to and compliance with these Requirements. CAs complying with these Requirements MAY also assert one of the reserved policy OIDs in such Certificates. - -The issuing CA SHALL document in its Certificate Policy or Certification Practice Statement that the Certificates it issues containing the specified policy identifier(s) are managed in accordance with these Requirements. - -### 7.1.7 Usage of Policy Constraints extension - -### 7.1.8 Policy qualifiers syntax and semantics - -### 7.1.9 Processing semantics for the critical Certificate Policies extension - -## 7.2 CRL profile - -### 7.2.1 Version number(s) - -### 7.2.2 CRL and CRL entry extensions - -## 7.3 OCSP profile - -### 7.3.1 Version number(s) - -### 7.3.2 OCSP extensions - -# 8. COMPLIANCE AUDIT AND OTHER ASSESSMENTS -The CA SHALL at all times: - -1. Issue Certificates and operate its PKI in accordance with all law applicable to its business and the Certificates it issues in every jurisdiction in which it operates; -2. Comply with these Requirements; -3. Comply with the audit requirements set forth in this section; and -4. Be licensed as a CA in each jurisdiction where it operates, if licensing is required by the law of such jurisdiction for the issuance of Certificates. - -**Implementers' Note**: Version 1.1.6 of the SSL Baseline Requirements was published on July 29, 2013. Version 2.0 of WebTrust's Principles and Criteria for Certifiation Authorities - SSL Baseline with Network Security and ETSI's Electronic Signatures and Infrastructures (ESI) 102 042 incorporate version 1.1.6 of these Baseline Requirements and version 1.0 of the Network and Certificate System Security Requirements. The CA/Browser Forum continues to improve the Baseline Requirements while WebTrust and ETSI also continue to update their audit criteria. We encourage all CAs to conform to each revision herein on the date specified without awaiting a corresponding update to an applicable audit criterion. In the event of a conflict between an existing audit criterion and a guideline revision, we will communicate with the audit community and attempt to resolve any uncertainty, and we will respond to implementation questions directed to questions@cabforum.org. Our coordination with compliance auditors will continue as we develop guideline revision cycles that harmonize with the revision cycles for audit criteria, the compliance auditing periods and cycles of CAs, and the CA/Browser Forum's guideline implementation dates. - -## 8.1 Frequency or circumstances of assessment -Certificates that are capable of being used to issue new certificates MUST either be Technically Constrained in line with section 7.1.5 and audited in line with section 8.7 only, or Unconstrained and fully audited in line with all remaining requirements from this section. A Certificate is deemed as capable of being used to issue new certificates if it contains an X.509v3 basicConstraints extension, with the cA boolean set to true and is therefore by definition a Root CA Certificate or a Subordinate CA Certificate. - -The period during which the CA issues Certificates SHALL be divided into an unbroken sequence of audit periods. -An audit period MUST NOT exceed one year in duration. - -If the CA has a currently valid Audit Report indicating compliance with an audit scheme listed in Section 8.1, then no pre-issuance readiness assessment is necessary. - -If the CA does not have a currently valid Audit Report indicating compliance with one of the audit schemes listed in -Section 8.1, then, before issuing Publicly-Trusted Certificates, the CA SHALL successfully complete a point-in-time readiness assessment performed in accordance with applicable standards under one of the audit schemes listed in Section 8.1. The point-in-time readiness assessment SHALL be completed no earlier than twelve (12) months prior to issuing Publicly-Trusted Certificates and SHALL be followed by a complete audit under such scheme within ninety (90) days of issuing the first Publicly-Trusted Certificate. - -## 8.2 Identity/qualifications of assessor -The CA's audit SHALL be performed by a Qualified Auditor. A Qualified Auditor means a natural person, Legal Entity, or group of natural persons or Legal Entities that collectively possess the following qualifications and skills: - -1. Independence from the subject of the audit; -2. The ability to conduct an audit that addresses the criteria specified in an Eligible Audit Scheme (see Section 8.1); -3. Employs individuals who have proficiency in examining Public Key Infrastructure technology, information security tools and techniques, information technology and security auditing, and the third-party attestation function; -4. (For audits conducted in accordance with any one of the ETSI standards) accredited in accordance with ISO 17065 applying the requirements specified in ETSI EN 319 403; -5. (For audits conducted in accordance with the WebTrust standard) licensed by WebTrust; -6. Bound by law, government regulation, or professional code of ethics; and -7. Except in the case of an Internal Government Auditing Agency, maintains Professional Liability/Errors & Omissions insurance with policy limits of at least one million US dollars in coverage - -## 8.3 Assessor's relationship to assessed entity - -## 8.4 Topics covered by assessment -The CA SHALL undergo an audit in accordance with one of the following schemes: - -1. WebTrust for Certification Authorities v2.0; -2. A national scheme that audits conformance to ETSI TS 102 042 / ETSI EN 319 411-1; or -4. If a Government CA is required by its Certificate Policy to use a different internal audit scheme, it MAY use such scheme provided that the audit either (a) encompasses all requirements of one of the above schemes or (b) consists of comparable criteria that are available for public review. - -Whichever scheme is chosen, it MUST incorporate periodic monitoring and/or accountability procedures to ensure that its audits continue to be conducted in accordance with the requirements of the scheme. - -The audit MUST be conducted by a Qualified Auditor, as specified in Section 8.3. - -If a Delegated Third Party is not currently audited in accordance with Section 8 and is not an Enterprise RA, then prior to certificate issuance the CA SHALL ensure that the domain control validation process required under Section 3.2.2.4 or IP address verification under 3.2.2.5 has been properly performed by the Delegated Third Party by either (1) using an out-of-band mechanism involving at least one human who is acting either on behalf of the CA or on behalf of the Delegated Third Party to confirm the authenticity of the certificate request or the information supporting the certificate request or (2) performing the domain control validation process itself. - -If the CA is not using one of the above procedures and the Delegated Third Party is not an Enterprise RA, then the CA SHALL obtain an audit report, issued under the auditing standards that underlie the accepted audit schemes found in Section 8.1, that provides an opinion whether the Delegated Third Party's performance complies with either the Delegated Third Party's practice statement or the CA's Certificate Policy and/or Certification Practice Statement. If the opinion is that the Delegated Third Party does not comply, then the CA SHALL not allow the Delegated Third Party to continue performing delegated functions. - -The audit period for the Delegated Third Party SHALL NOT exceed one year (ideally aligned with the CA's audit). However, if the CA or Delegated Third Party is under the operation, control, or supervision of a Government Entity and the audit scheme is completed over multiple years, then the annual audit MUST cover at least the core controls that are required to be audited annually by such scheme plus that portion of all non-core controls that are allowed to be conducted less frequently, but in no case may any non-core control be audited less often than once every three years. - -## 8.5 Actions taken as a result of deficiency - -## 8.6 Communication of results -The Audit Report SHALL state explicitly that it covers the relevant systems and processes used in the issuance of all Certificates that assert one or more of the policy identifiers listed in Section 7.1.6.1. The CA SHALL make the Audit Report publicly available. The CA is not required to make publicly available any general audit findings that do not impact the overall audit opinion. For both government and commercial CAs, the CA SHOULD make its Audit Report publicly available no later than three months after the end of the audit period. In the event of a delay greater than three months, and if so requested by an Application Software Supplier, the CA SHALL provide an explanatory letter signed by the Qualified Auditor. - -## 8.7 Self-Audits -During the period in which the CA issues Certificates, the CA SHALL monitor adherence to its Certificate Policy, Certification Practice Statement and these Requirements and strictly control its service quality by performing self audits on at least a quarterly basis against a randomly selected sample of the greater of one certificate or at least three percent of the Certificates issued by it during the period commencing immediately after the previous self-audit sample was taken. Except for Delegated Third Parties that undergo an annual audit that meets the criteria specified in Section 8.1, the CA SHALL strictly control the service quality of Certificates issued or containing information verified by a Delegated Third Party by having a Validation Specialist employed by the CA perform ongoing quarterly audits against a randomly selected sample of at least the greater of one certificate or three percent of the Certificates verified by the Delegated Third Party in the period beginning immediately after the last sample was taken. The CA SHALL review each Delegated Third Party's practices and procedures to ensure that the Delegated Third Party is in compliance with these Requirements and the relevant Certificate Policy and/or Certification Practice Statement. - -The CA SHALL internally audit each Delegated Third Party's compliance with these Requirements on an annual basis. - -During the period in which a Technically Constrained Subordinate CA issues Certificates, the CA which signed the Subordinate CA SHALL monitor adherence to the CA's Certificate Policy and the Subordinate CA's Certification Practice Statement. On at least a quarterly basis, against a randomly selected sample of the greater of one certificate or at least three percent of the Certificates issued by the Subordinate CA, during the period commencing immediately after the previous audit sample was taken, the CA shall ensure all applicable CP are met. - -# 9. OTHER BUSINESS AND LEGAL MATTERS - -## 9.1 Fees - -### 9.1.1 Certificate issuance or renewal fees - -### 9.1.2 Certificate access fees - -### 9.1.3 Revocation or status information access fees - -### 9.1.4 Fees for other services - -### 9.1.5 Refund policy - -## 9.2 Financial responsibility - -### 9.2.1 Insurance coverage - -### 9.2.2 Other assets - -### 9.2.3 Insurance or warranty coverage for end-entities - -## 9.3 Confidentiality of business information - -### 9.3.1 Scope of confidential information - -### 9.3.2 Information not within the scope of confidential information - -### 9.3.3 Responsibility to protect confidential information - -## 9.4 Privacy of personal information - -### 9.4.1 Privacy plan - -### 9.4.2 Information treated as private - -### 9.4.3 Information not deemed private - -### 9.4.4 Responsibility to protect private information - -### 9.4.5 Notice and consent to use private information - -### 9.4.6 Disclosure pursuant to judicial or administrative process - -### 9.4.7 Other information disclosure circumstances - -## 9.5 Intellectual property rights - -## 9.6 Representations and warranties - -### 9.6.1 CA representations and warranties -By issuing a Certificate, the CA makes the certificate warranties listed herein to the following Certificate Beneficiaries: - -1. The Subscriber that is a party to the Subscriber Agreement or Terms of Use for the Certificate; -2. All Application Software Suppliers with whom the Root CA has entered into a contract for inclusion of its Root Certificate in software distributed by such Application Software Supplier; and -3. All Relying Parties who reasonably rely on a Valid Certificate. -The CA represents and warrants to the Certificate Beneficiaries that, during the period when the Certificate is valid, the CA has complied with these Requirements and its Certificate Policy and/or Certification Practice Statement in issuing and managing the Certificate. - -The Certificate Warranties specifically include, but are not limited to, the following: - -1. **Right to Use Domain Name or IP Address**: That, at the time of issuance, the CA (i) implemented a procedure for verifying that the Applicant either had the right to use, or had control of, the Domain Name(s) and IP address(es) listed in the Certificate's subject field and subjectAltName extension (or, only in the case of Domain Names, was delegated such right or control by someone who had such right to use or control); (ii) followed the procedure when issuing the Certificate; and (iii) accurately described the procedure in the CA's Certificate Policy and/or Certification Practice Statement; -2. **Authorization for Certificate**: That, at the time of issuance, the CA (i) implemented a procedure for verifying that the Subject authorized the issuance of the Certificate and that the Applicant Representative is authorized to request the Certificate on behalf of the Subject; (ii) followed the procedure when issuing the Certificate; and (iii) accurately described the procedure in the CA's Certificate Policy and/or Certification Practice Statement; -3. **Accuracy of Information**: That, at the time of issuance, the CA (i) implemented a procedure for verifying the accuracy of all of the information contained in the Certificate (with the exception of the subject:organizationalUnitName attribute); (ii) followed the procedure when issuing the Certificate; and (iii) accurately described the procedure in the CA's Certificate Policy and/or Certification Practice Statement; -4. **No Misleading Information**: That, at the time of issuance, the CA (i) implemented a procedure for reducing the likelihood that the information contained in the Certificate's subject:organizationalUnitName attribute would be misleading; (ii) followed the procedure when issuing the Certificate; and (iii) accurately described the procedure in the CA's Certificate Policy and/or Certification Practice Statement; -5. **Identity of Applicant**: That, if the Certificate contains Subject Identity Information, the CA (i) implemented a procedure to verify the identity of the Applicant in accordance with Sections 3.2 and 11.2; (ii) followed the procedure when issuing the Certificate; and (iii) accurately described the procedure in the CA's Certificate Policy and/or Certification Practice Statement; -6. **Subscriber Agreement**: That, if the CA and Subscriber are not Affiliated, the Subscriber and CA are parties to a legally valid and enforceable Subscriber Agreement that satisfies these Requirements, or, if the CA and Subscriber are the same entity or are Affiliated, the Applicant Representative acknowledged the Terms of Use; -7. **Status**: That the CA maintains a 24 x 7 publicly-accessible Repository with current information regarding the status (valid or revoked) of all unexpired Certificates; and -8. **Revocation**: That the CA will revoke the Certificate for any of the reasons specified in these Requirements. - -The Root CA SHALL be responsible for the performance and warranties of the Subordinate CA, for the Subordinate CA's compliance with these Requirements, and for all liabilities and indemnification obligations of the Subordinate CA under these Requirements, as if the Root CA were the Subordinate CA issuing the Certificates - - -### 9.6.2 RA representations and warranties -No stipulation. - -### 9.6.3 Subscriber representations and warranties -The CA SHALL require, as part of the Subscriber Agreement or Terms of Use, that the Applicant make the commitments and warranties in this section for the benefit of the CA and the Certificate Beneficiaries. - -Prior to the issuance of a Certificate, the CA SHALL obtain, for the express benefit of the CA and the Certificate Beneficiaries, either: - -1. The Applicant's agreement to the Subscriber Agreement with the CA, or -2. The Applicant's acknowledgement of the Terms of Use. - -The CA SHALL implement a process to ensure that each Subscriber Agreement or Terms of Use is legally enforceable against the Applicant. In either case, the Agreement MUST apply to the Certificate to be issued pursuant to the certificate request. The CA MAY use an electronic or "click-through" Agreement provided that the CA has determined that such agreements are legally enforceable. A separate Agreement MAY be used for each certificate request, or a single Agreement MAY be used to cover multiple future certificate requests and the resulting Certificates, so long as each Certificate that the CA issues to the Applicant is clearly covered by that Subscriber Agreement or Terms of Use. - -The Subscriber Agreement or Terms of Use MUST contain provisions imposing on the Applicant itself (or made by the Applicant on behalf of its principal or agent under a subcontractor or hosting service relationship) the following obligations and warranties: - -1. **Accuracy of Information**: An obligation and warranty to provide accurate and complete information at all times to the CA, both in the certificate request and as otherwise requested by the CA in connection with the issuance of the Certificate(s) to be supplied by the CA; -2. **Protection of Private Key**: An obligation and warranty by the Applicant to take all reasonable measures to assure control of, keep confidential, and properly protect at all times the Private Key that corresponds to the Public Key to be included in the requested Certificate(s) (and any associated activation data or device, e.g. password or token); -3. **Acceptance of Certificate**: An obligation and warranty that the Subscriber will review and verify the Certificate contents for accuracy; -4. **Use of Certificate**: An obligation and warranty to install the Certificate only on servers that are accessible at the subjectAltName(s) listed in the Certificate, and to use the Certificate solely in compliance with all applicable laws and solely in accordance with the Subscriber Agreement or Terms of Use; -5. **Reporting and Revocation**: An obligation and warranty to: (a) promptly request revocation of the Certificate, and cease using it and its associated Private Key, if there is any actual or suspected misuse or compromise of the Subscriber’s Private Key associated with the Public Key included in the Certificate, and (b) promptly request revocation of the Certificate, and cease using it, if any information in the Certificate is or becomes incorrect or inaccurate; -6. **Termination of Use of Certificate**: An obligation and warranty to promptly cease all use of the Private Key corresponding to the Public Key included in the Certificate upon revocation of that Certificate for reasons of Key Compromise. -7. **Responsiveness**: An obligation to respond to the CA's instructions concerning Key Compromise or Certificate misuse within a specified time period. -8. **Acknowledgment and Acceptance**: An acknowledgment and acceptance that the CA is entitled to revoke the certificate immediately if the Applicant were to violate the terms of the Subscriber Agreement or Terms of Use or if the CA discovers that the Certificate is being used to enable criminal activities such as phishing attacks, fraud, or the distribution of malware. - -### 9.6.4 Relying party representations and warranties - -### 9.6.5 Representations and warranties of other participants - -## 9.7 Disclaimers of warranties - -## 9.8 Limitations of liability -For delegated tasks, the CA and any Delegated Third Party MAY allocate liability between themselves contractually as they determine, but the CA SHALL remain fully responsible for the performance of all parties in accordance with these Requirements, as if the tasks had not been delegated. - -If the CA has issued and managed the Certificate in compliance with these Requirements and its Certificate Policy and/or Certification Practice Statement, the CA MAY disclaim liability to the Certificate Beneficiaries or any other third parties for any losses suffered as a result of use or reliance on such Certificate beyond those specified in the CA's Certificate Policy and/or Certification Practice Statement. If the CA has not issued or managed the Certificate in compliance with these Requirements and its Certificate Policy and/or Certification Practice Statement, the CA MAY seek to limit its liability to the Subscriber and to Relying Parties, regardless of the cause of action or legal theory involved, for any and all claims, losses or damages suffered as a result of the use or reliance on such Certificate by any appropriate means that the CA desires. If the CA chooses to limit its liability for Certificates that are not issued or managed in compliance with these Requirements or its Certificate Policy and/or Certification Practice Statement, then the CA SHALL include the limitations on liability in the CA's Certificate Policy and/or Certification Practice Statement. - -## 9.9 Indemnities - -Notwithstanding any limitations on its liability to Subscribers and Relying Parties, the CA understands and acknowledges that the Application Software Suppliers who have a Root Certificate distribution agreement in place with the Root CA do not assume any obligation or potential liability of the CA under these Requirements or that otherwise might exist because of the issuance or maintenance of Certificates or reliance thereon by Relying Parties or others. Thus, except in the case where the CA is a government entity, the CA SHALL defend, indemnify, and hold harmless each Application Software Supplier for any and all claims, damages, and losses suffered by such Application Software Supplier related to a Certificate issued by the CA, regardless of the cause of action or legal theory involved. This does not apply, however, to any claim, damages, or loss suffered by such Application Software Supplier related to a Certificate issued by the CA where such claim, damage, or loss was directly caused by such Application Software Supplier's software displaying as not trustworthy a Certificate that is still valid, or displaying as trustworthy: (1) a Certificate that has expired, or (2) a Certificate that has been revoked (but only in cases where the revocation status is currently available from the CA online, and the application software either failed to check such status or ignored an indication of revoked status). - -## 9.10 Term and termination - -### 9.10.1 Term - -### 9.10.2 Termination - -### 9.10.3 Effect of termination and survival - -## 9.11 Individual notices and communications with participants - -## 9.12 Amendments - -### 9.12.1 Procedure for amendment - -### 9.12.2 Notification mechanism and period - -### 9.12.3 Circumstances under which OID must be changed - -## 9.13 Dispute resolution provisions - -## 9.14 Governing law - -## 9.15 Compliance with applicable law - -## 9.16 Miscellaneous provisions - -### 9.16.1 Entire agreement - -### 9.16.2 Assignment - -### 9.16.3 Severability - -In the event of a conflict between these Requirements and a law, regulation or government order (hereinafter 'Law') of any jurisdiction in which a CA operates or issues certificates, a CA MAY modify any conflicting requirement to the minimum extent necessary to make the requirement valid and legal in the jurisdiction. This applies only to operations or certificate issuances that are subject to that Law. In such event, the CA SHALL immediately (and prior to issuing a certificate under the modified requirement) include in Section 9.16.3 of the CA's CPS a detailed reference to the Law requiring a modification of these Requirements under this section, and the specific modification to these Requirements implemented by the CA. - -The CA MUST also (prior to issuing a certificate under the modified requirement) notify the CA/Browser Forum of the relevant information newly added to its CPS by sending a message to questions@cabforum.org and receiving confirmation that it has been posted to the Public Mailing List and is indexed in the Public Mail Archives available at https://cabforum.org/pipermail/public/ (or such other email addresses and links as the Forum may designate), so that the CA/Browser Forum may consider possible revisions to these Requirements accordingly. - -Any modification to CA practice enabled under this section MUST be discontinued if and when the Law no longer applies, or these Requirements are modified to make it possible to comply with both them and the Law simultaneously. An appropriate change in practice, modification to the CA's CPS and a notice to the CA/Browser Forum, as outlined above, MUST be made within 90 days. - -### 9.16.4 Enforcement (attorneys' fees and waiver of rights) - -### 9.16.5 Force Majeure - -## 9.17 Other provisions diff --git a/pages/certificates.md b/pages/certificates.md index 011a758..a5a2dac 100644 --- a/pages/certificates.md +++ b/pages/certificates.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: Certificates permalink: /certificates/ description: "FAQ on certificates and certificate authorities for agencies migrating to HTTPS." @@ -7,15 +8,13 @@ description: "FAQ on certificates and certificate authorities for agencies migra Frequently asked questions and answers about HTTPS certificates and certificate authorities. -* [What are certificates and certificate authorities?](#what-are-certificates-and-certificate-authorities?) -* [What kind of certificate should I get for my domain?](#what-kind-of-certificate-should-i-get-for-my-domain?) -* [What rules and oversight are certificate authorities subject to?](#what-rules-and-oversight-are-certificate-authorities-subject-to?) -* [Does the US government operate a publicly trusted certificate authority?](#does-the-us-government-operate-a-publicly-trusted-certificate-authority?) -* [Are there federal restrictions on acceptable certificate authorities to use?](#are-there-federal-restrictions-on-acceptable-certificate-authorities-to-use?) -* [Then how can I limit which CAs can issue certificates for a domain?](#then-how-can-i-limit-which-cas-can-issue-certificates-for-a-domain?) - - * [Certificate Transparency](#certificate-transparency) - * [HTTP Public Key Pinning](#http-public-key-pinning) +* [What are certificates and certificate authorities?](#what-are-certificates-and-certificate-authorities) +* [What kind of certificate should I get for my domain?](#what-kind-of-certificate-should-i-get-for-my-domain) +* [What rules and oversight are certificate authorities subject to?](#what-rules-and-oversight-are-certificate-authorities-subject-to) +* [Does the US government operate a publicly trusted certificate authority?](#does-the-us-government-operate-a-publicly-trusted-certificate-authority) +* [Are there federal restrictions on acceptable certificate authorities to use?](#are-there-federal-restrictions-on-acceptable-certificate-authorities-to-use) +* [Then how can I limit which CAs can issue certificates for a domain?](#then-how-can-i-limit-which-cas-can-issue-certificates-for-a-domain) +* [How can I find out when any certificate is issued for a domain?](#how-can–i–find-out-when-any-certificate–is-issued-for-a-domain) ## What are certificates and certificate authorities? @@ -39,13 +38,13 @@ There are many kinds of certificates in use in the federal government today, and In general: -* "Domain Validation" (DV) certificates are usually less expensive and more amenable to automation than "Extended Validation" (EV) certificates. EV certificates generally result in the domain owner's name appearing in the browser URL bar visitors see. **Ordinary DV certificates are completely acceptable for government use.** +* "Domain Validation" (DV) certificates are usually less expensive and more amenable to automation than "Extended Validation" (EV) certificates. **Ordinary DV certificates are completely acceptable for government use.** * Certificates can be valid for anywhere from years to days. In general, **shorter-lived certificates offer a better security posture**, since the impact of key compromise is less severe. Automating the issuance and renewal of certificates is an overall best practice, and can make the adoption of shorter-lived certificates more practical. * Agencies **[should immediately replace certificates signed with SHA-1](/technical-guidelines/#signature-algorithms)**, as browsers are quickly moving to remove support for the SHA-1 algorithm. Commercial CAs are forbidden from issuing them entirely as of January 1, 2016. -As a general matter, certificates from any commercial CA will meet the few [NIST technical requirements](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf) that relate to certificates. +As a general matter, certificates from any commercial CA will meet the few [NIST technical requirements](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf) that relate to certificates. ## What rules and oversight are certificate authorities subject to? @@ -66,13 +65,11 @@ The Baseline Requirements only constrain CAs -- they do not constrain browser be No, not as of early 2016, and this is unlikely to change in the near future. -The [Federal PKI](https://www.idmanagement.gov/IDM/s/article_content_old?tag=a0Gt0000000SfwP) root is trusted by some browsers and operating systems, but is not contained in the [Mozilla Trusted Root Program](https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/policy/). The Mozilla Trusted Root Program is used by Firefox, many Android devices, and a variety of other devices and operating systems. This means that the Federal PKI is not able to issue certificates for use in TLS/HTTPS that are trusted widely enough to secure a web service used by the general public. +The [Federal PKI](https://fpki.idmanagement.gov) root is trusted by some browsers and operating systems, but is not contained in the [Mozilla Trusted Root Program](https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/policy/). The Mozilla Trusted Root Program is used by Firefox, many Android devices, and a variety of other devices and operating systems. This means that the Federal PKI is not able to issue certificates for use in TLS/HTTPS that are trusted widely enough to secure a web service used by the general public. -The Federal PKI has an [open application](https://bugzilla.mozilla.org/show_bug.cgi?id=478418) to the Mozilla Trusted Root Program. However, even if the Federal PKI's application is accepted, it will take a significant amount of time for the Federal PKI's root certificate to actually be shipped onto devices and propagate widely around the world. +The Federal PKI has [cross-certified other commercial CAs](https://fpki.idmanagement.gov/tools/fpkigraph/), which means their certificates will be trusted by clients that trust the Federal PKI. However, even when a publicly trusted commercial CA is cross-certified with the Federal PKI, they are expected to maintain complete separation between their publicly trusted certificates and their Federal PKI cross-certified certificates. -The Federal PKI has [cross-certified other agencies and commercial CAs](https://www.idmanagement.gov/IDM/s/article_content_old?tag=a0Gt0000000SfwR), which means their certificates will be trusted by clients that trust the Federal PKI. However, none of these roots are _publicly trusted_. Even when a publicly trusted commercial CA is cross-certified with the Federal PKI, they maintain complete separation between their publicly trusted certificates and their Federal PKI cross-certified certificates. - -As a result, there is not currently a viable way to obtain an individual certificate for use in TLS/HTTPS that is issued or trusted by the Federal PKI, and also trusted by the general public. +As a result, there is not currently a viable way to obtain a certificate for use in TLS/HTTPS that is issued or trusted by the Federal PKI, and also trusted by the general public. ## Are there federal restrictions on acceptable certificate authorities to use? @@ -86,47 +83,46 @@ In practice, federal agencies use a wide variety of publicly trusted commercial There is no simple and 100% effective way to force all browsers to only trust certificates for your domain that have been issued from a certain CA. In general, the strength of HTTPS on today's internet depends on the overall standards, competence, and accountability of the entire CA system. -However, domain owners have some options to reduce the risk or impact of misissued or fraudulent certificates: +However, domain owners can use **DNS Certification Authority Authorization** to publish a list of approved CAs. -### Certificate Transparency +In addition, domain owners can use **Certificate Transparency** (see question below) to monitor and discover certificates issued by any CA. -**[Certificate Transparency](https://en.wikipedia.org/wiki/Certificate_Transparency)** (CT) allows domain owners to **detect missuance of certificates after the fact**. +**[DNS Certification Authority Authorization](https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization)** (CAA) allows domain owners to publish DNS records containing a list of the Certificate Authorities permitted to issue certificates for their domain. -CT allows CAs to publish some or all of the publicly trusted certificates that they issue to one or more public logs. Multiple organizations run CT logs, and it is possible to automatically monitor the logs for any certificates that are issued for any domains of interest. +All major CAs participate in CAA and promise to verify CAA DNS records before issuing certificates. Each CA should refuse to issue certificates for a domain name that publishes a CAA record that excludes the CA. -Comodo has released an [open source](https://github.com/crtsh) Certificate Transparency log viewer that they operate at [crt.sh](https://crt.sh). For example, it is possible to see [all recent certificates for whitehouse.gov](https://crt.sh/?q=whitehouse.gov), and [details of specific certificates](https://crt.sh/?id=7976268). +This is only a promise, so a non-compliant or compromised CA could still issue certificates for any domain name even in violation of CAA. But such mis-issuance would be more likely to be detected with CAA in place. -The strength of Certificate Transparency increases as more CAs publish more certificates to public CT logs. Certificate Transparency is not currently a requirement for CAs -- however, as the use of CT increases, so does the viability of requiring CT for publicly issued certificates. +The standard DNS is not secure, so CAA records could be suppressed or spoofed by an attacker in a privileged network position unless DNSSEC is in use by the domain owner and validated by each CA issuer. -#### Certificate Transparency Resources +CAA can be paired with Certificate Transparency log monitoring to detect occurrences of mis-issuance. -* [Google CT FAQ](https://www.certificate-transparency.org/faq) -* [RFC 6962](https://tools.ietf.org/html/rfc6962), the experimental standard for CT -* [Wikipedia entry](https://en.wikipedia.org/wiki/Certificate_Transparency) for CT +#### CAA Resources -### HTTP Public Key Pinning +* [Wikipedia entry](https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization) for CAA +* [RFC 6844](https://tools.ietf.org/html/rfc6844), the standard for CAA +* [CAA Record Generator](https://sslmate.com/caa/) -**[HTTP Public Key Pinning](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning)** (HPKP) allows domain owners to **tell browsers which certain keys, certs or CAs are trusted for their domain**. +## How can I find out when any certificate is issued for a domain? -Domain owners can use HPKP in one of two ways: +Domain owners can use **Certificate Transparency** to promptly discover any certificates issued for a domain, whether legitimate or fraudulent. -* The `Public-Key-Pins` header contains a list of SHA-256 hashes of public key information corresponding to client, intermediate, or root certificates. [Supporting browsers](http://caniuse.com/#search=hpkp) **will hard-fail** on certificates whose validated chain does not contain at least one of the listed keys. The domain owner can list a URI that browsers can POST to with error information when a hard-fail occurs. +**[Certificate Transparency](https://en.wikipedia.org/wiki/Certificate_Transparency)** (CT) allows domain owners to **detect mis-issuance of certificates after the fact**. -* The `Public-Key-Pins-Report-Only` HTTP header contains the same information, but **will not fail or show users an error** if a pinning violation is detected. Browsers will report detected violations to a given URI. +CT allows CAs to publish some or all of the publicly trusted certificates that they issue to one or more public logs. Multiple organizations run CT logs, and it is possible to automatically monitor the logs for any certificates that are issued for any domains of interest. -Using `Public-Key-Pins` is **powerful but potentially dangerous**, as mistakes can lead to a site being rendered entirely inaccessible for weeks or months. +Comodo has released an [open source](https://github.com/crtsh) Certificate Transparency log viewer that they operate at [crt.sh](https://crt.sh). For example, it is possible to see [all recent certificates for whitehouse.gov](https://crt.sh/?q=whitehouse.gov), and [details of specific certificates](https://crt.sh/?id=7976268). -Using `Public-Key-Pins-Report-Only` is very safe, and can provide useful information to detect potential certificate misissuance or attacks on users. +The strength of Certificate Transparency increases as more CAs publish more certificates to public CT logs. [Google Chrome requires Certificate Transparency](https://groups.google.com/a/chromium.org/forum/#!msg/ct-policy/wHILiYf31DE/iMFmpMEkAQAJ) for all new certificates issued after 30 April 2018. [Apple platforms, including Safari, require Certificate Transparency](https://support.apple.com/en-us/HT205280) for all new certificates issued after 15 October 2018. As a result, most CAs now submit new certificates to CT logs by default. -Like [HSTS](/hsts/), HPKP only takes effect once the browser has visited the site once and received the HPKP header over a secure connection. HPKP preloading is possible, but as of 2016 this requires special manual coordination with browsers to do. +However, a CA may still issue new certificates without disclosing them to a CT log. These certificates will not be trusted by Chrome or Safari, but they may be trusted by other browsers. -**Note:** As currently implemented in [Chrome](https://www.chromium.org/Home/chromium-security/security-faq#TOC-How-does-key-pinning-interact-with-local-proxies-and-filters-) and [Firefox](https://wiki.mozilla.org/SecurityEngineering/Public_Key_Pinning#How_to_use_pinning), pinning rules can be overridden by locally installed root certificates. This allows device owners -- and attackers who are able to install a local root -- to intercept or modify traffic even when a web service uses HPKP. +Chrome also exempts private CAs from these transparency rules, so private CAs that do not chain up to any public root may still issue certificates without submitting them to CT logs. -#### HPKP Resources +#### Certificate Transparency Resources -* [Guide to rolling out HPKP reporting](https://developers.google.com/web/updates/2015/09/HPKP-reporting-with-chrome-46?hl=en) by the Chrome team -* [RFC 7469](https://tools.ietf.org/html/rfc7469), the official standard -* [Discussion on GitHub](https://github.com/SSLMate/sslmate/issues/10) about HPKP strategy -* [Wikipedia entry](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning) for HPKP -* [Browser support](http://caniuse.com/#search=hpkp) for HPKP -* [Mozilla documentation](https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning) for HPKP +* [Google CT FAQ](https://www.certificate-transparency.org/faq) +* [RFC 6962](https://tools.ietf.org/html/rfc6962), the experimental standard for CT +* [Wikipedia entry](https://en.wikipedia.org/wiki/Certificate_Transparency) for CT +* [Cert Spotter](https://github.com/SSLMate/certspotter), an open source CT log monitor +* [U.S. Federal PKI page on Chrome CT enforcement](https://fpki.idmanagement.gov/announcements/chromect/) diff --git a/pages/everything.md b/pages/everything.md index 6324e99..d942b7a 100644 --- a/pages/everything.md +++ b/pages/everything.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: Why HTTPS for Everything? permalink: /everything/ description: "Today, there is no such thing as non-sensitive web traffic. By simply always using HTTPS, both people and browsers can make safer assumptions about secure connections." diff --git a/pages/faq.md b/pages/faq.md index 3fc3240..810ea52 100644 --- a/pages/faq.md +++ b/pages/faq.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: Introduction to HTTPS permalink: /faq/ description: "An introduction to HTTPS, and frequently asked questions." @@ -9,23 +10,23 @@ Below are some frequently asked questions and answers about HTTPS. For an in-depth introduction (no technical background required), check out the DigitalGov University presentation, **["An Introduction to HTTPS"](https://www.youtube.com/watch?v=d2GmcPYWm5k)**, to learn what HTTPS is and how it protects web services and users. -* [What does HTTPS do?](#what-does-https-do%3f) -* [What information does HTTPS protect?](#what-information-does-https-protect%3f) -* [What information does HTTPS _not_ protect?](#what-information-does-https-not-protect%3f) -* [How does HTTPS relate to HTTP/2?](#how-does-https-relate-to-http/2%3f) -* [How does migrating to HTTPS affect search engine optimization (SEO)?](#how-does-migrating-to-https-affect-search-engine-optimization-(seo)%3f) -* [How can an HTTPS site keep sending referrer information to linked HTTP sites?](#how-can-an-https-site-keep-sending-referrer-information-to-linked-http-sites%3f) -* [How difficult is it to attack an HTTPS connection?](#how-difficult-is-it-to-attack-an-https-connection%3f) -* [Why are domain names unencrypted over HTTPS today?](#why-are-domain-names-unencrypted-over-https-today%3f) -* [Why isn't DNSSEC good enough?](#why-isn't-dnssec-good-enough%3f) -* [How does HTTPS protect against DNS spoofing?](#how-does-https-protect-against-dns-spoofing%3f) +* [What does HTTPS do?](#what-does-https-do) +* [What information does HTTPS protect?](#what-information-does-https-protect) +* [What information does HTTPS _not_ protect?](#what-information-does-https-not-protect) +* [How does HTTPS relate to HTTP/2?](#how-does-https-relate-to-http-2) +* [How does migrating to HTTPS affect search engine optimization (SEO)?](#how-does-migrating-to-https-affect-search-engine-optimization-seo) +* [How can an HTTPS site keep sending referrer information to linked HTTP sites?](#how-can-an-https-site-keep-sending-referrer-information-to-linked-http-sites) +* [How difficult is it to attack an HTTPS connection?](#how-difficult-is-it-to-attack-an-https-connection) +* [Why are domain names unencrypted over HTTPS today?](#why-are-domain-names-unencrypted-over-https-today) +* [Why isn't DNSSEC good enough?](#why-isnt-dnssec-good-enough) +* [How does HTTPS protect against DNS spoofing?](#how-does-https-protect-against-dns-spoofing) ### What does HTTPS do? When properly configured, an HTTPS connection guarantees three things: * **Confidentiality.** The visitor's connection is encrypted, obscuring URLs, cookies, and other sensitive metadata. -* **Authenticity.** The visitor is talking to the "real" website, and not to an impersonator or through a "man-in-the-middle". +* **Authenticity.** The visitor is talking to the "real" website, and not to an impersonator or through a person-in-the-middle. * **Integrity.** The data sent between the visitor and the website has not been tampered with or modified. A plain HTTP connection can be easily monitored, modified, and impersonated. @@ -86,9 +87,9 @@ However, this means that if a website migrates to HTTPS, any HTTP sites it links Website owners who wish to continue sending outbound referrer information to linked HTTP sites can use **[Referrer Policy](https://www.w3.org/TR/referrer-policy/)** to override browser default behavior, while retaining the privacy of HTTPS URLs. -To do this, websites **should use** the [`origin-when-cross-origin`](https://www.w3.org/TR/referrer-policy/#referrer-policy-origin-when-cross-origin) policy. This will allow supporting browsers to send **only the origin** as the `Referer` header when going from an HTTPS site to an HTTP site. +To do this, websites **should use** the [`origin-when-cross-origin`](https://www.w3.org/TR/referrer-policy/#referrer-policy-origin-when-cross-origin) policy. This will allow supporting browsers to send **only the origin** as the `Referer` header. This limited referral information applies even if both sites use HTTPS. -For example, if a user is on `https://agency.gov/help/aids.html` and clicks a link to `http://moreinformation.com`, then if `origin-when-cross-origin` is set, the browser will make an HTTP request to `http://moreinformation.com` with a `Referer` header of `https://agency.gov`. +For example, if a user is on `https://agency.gov/help/aids.html` and clicks a link to `https://moreinformation.com`, then if `origin-when-cross-origin` is set, the browser will make an HTTP request to `https://moreinformation.com` with a `Referer` header of `https://agency.gov`. The simplest way to set this policy is by including a `` tag in the body of the HTTPS website: diff --git a/pages/guide.md b/pages/guide.md index c8f6b36..b24aac3 100644 --- a/pages/guide.md +++ b/pages/guide.md @@ -1,29 +1,32 @@ --- -layout: page +layout: base + title: Compliance Guide permalink: /guide/ description: "Guide for agencies on implementing the HTTPS transition." --- -[M-15-13](https://www.whitehouse.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf) calls for "all publicly accessible Federal websites and web services" to only provide service through a secure connection (HTTPS), and to use [HTTP Strict Transport Security](/hsts/) (HSTS) to ensure this. +[M-15-13](https://obamawhitehouse.archives.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf) calls for "all publicly accessible Federal websites and web services" to only provide service through a secure connection (HTTPS), and to use [HTTP Strict Transport Security](/hsts/) (HSTS) to ensure this. This applies to all public domains and subdomains operated by the federal government, regardless of the domain suffix, as long as they are reachable over HTTP/HTTPS on the public internet. -This page provides implementation guidance for agencies by the White House Office of Management and Budget, as agencies manage the transition to HTTPS by December 31, 2016. +This page provides implementation guidance for agencies by the White House Office of Management and Budget, as agencies manage their transition to HTTPS. * [Compliance and best practice checklist](#compliance-and-best-practice-checklist) * [Options for HSTS compliance](#options-for-hsts-compliance) * [Compliance FAQ](#compliance-faq) - * [What protocols are covered by M-15-13?](#what-protocols-are-covered-by-m-15-13%3f) - * [Do I need to shut off port 80?](#do-i-need-to-shut-off-port-80%3f) - * [What does "all Federal agency domains or subdomains" include?](#what-does-"all-federal-agency-domains-or-subdomains"-include%3f) - * [What about domains that are only used to redirect visitors to other websites?](#what-about-domains-that-are-only-used-to-redirect-visitors-to-other-websites%3f) - * [What about domains that are technically public, but in practice are only used internally?](#what-about-domains-that-are-technically-public,-but-in-practice-are-only-used-internally%3f) - * [What happens to visitors using browsers that don’t support HSTS, like older versions of Internet Explorer?](#what-happens-to-visitors-using-browsers-that-don't-support-hsts,-like-older-versions-of-internet-explorer%3f) - * [This site redirects users to HTTPS -- why is Pulse saying it doesn't enforce HTTPS?](#this-site-redirects-users-to-https----why-is-pulse-saying-it-doesn't-enforce-https%3f) - * [Are federally operated certificate revocation services (CRL, OCSP) also required to move to HTTPS?](#are-federally-operated-certificate-revocation-services-(crl,-ocsp)-also-required-to-move-to-https%3f) - * [What if I'm using a federally issued certificate -- such as from the Federal PKI or Department of Defense -- for my web service?](#what-if-i'm-using-a-federally-issued-certificate----such-as-from-the-federal-pki-or-department-of-defense----for-my-web-service%3f) - + * [What protocols are covered by M-15-13?](#what-protocols-are-covered-by-m-15-13) + * [Do I need to shut off port 80?](#do-i-need-to-shut-off-port-80) + * [If plain HTTP is entirely disabled on my server, do I still need HSTS?](#if-plain-http-is-entirely-disabled-on-my-server-do-i-still-need-hsts) + * [What about network services that don't actually serve web content?](#what-about-network-services-that-dont-actually-serve-web-content) + * [What does "all Federal agency domains or subdomains" include?](#what-does-all-federal-agency-domains-or-subdomains-include) + * [What about domains that are only used to redirect visitors to other websites?](#what-about-domains-that-are-only-used-to-redirect-visitors-to-other-websites) + * [Do domains that redirect to other external domains need to redirect internally to HTTPS before redirecting externally?](#do-domains-that-redirect-to-other-external-domains-need-to-redirect-internally-to-https-before-redirecting-externally) + * [What about domains that are technically public, but in practice are only used internally?](#what-about-domains-that-are-technically-public-but-in-practice-are-only-used-internally) + * [What happens to visitors using browsers that don’t support HSTS, like older versions of Internet Explorer?](#what-happens-to-visitors-using-browsers-that-dont-support-hsts-like-older-versions-of-internet-explorer) + * [This site redirects users to HTTPS -- why is Pulse saying it doesn't enforce HTTPS?](#this-site-redirects-users-to-https-why-is-pulse-saying-it-doesnt-enforce-https) + * [Are federally operated certificate revocation services (CRL, OCSP) also required to move to HTTPS?](#are-federally-operated-certificate-revocation-services-crl-ocsp-also-required-to-move-to-https) + * [What if I'm using a federally issued certificate -- such as from the Federal PKI or Department of Defense -- for my web service?](#what-if-im-using-a-federally-issued-certificate-such-as-from-the-federal-pki-or-department-of-defense-for-my-web-service) ## Compliance and best practice checklist @@ -57,7 +60,7 @@ Under either approach, web services used by non-browser clients (e.g. APIs) must Strict-Transport-Security: max-age=31536000; includeSubDomains; preload ``` -* The domain has been successfully [submitted and added to the HSTS preload list](https://hstspreload.appspot.com). +* The domain has been successfully [submitted and added to the HSTS preload list](https://hstspreload.org). * Individual website subdomains are still encouraged to set their own HSTS policies. HSTS preloading a parent domain allows agencies to avoid inventorying and configuring an HSTS policy for every individual subdomain. However, this approach also automatically includes **all** subdomains present on this domain -- including intranet subdomains. All subdomains will need to support HTTPS in order to remain reachable for use in major browsers. @@ -90,10 +93,32 @@ M-15-13 does not address the use of DNS or DNSSEC, FTP or SFTP, or any other non Agencies may employ port 80 for the sole purpose of redirecting clients to a secure connection. -Note that while connections to port 80 are insecure, even for redirects, the use of [HSTS](/hsts/]) will instruct supporting HTTP clients to automatically redirect themselves from port 80 to port 443, without attempting to connect to port 80 over the network. +HTTP redirects must use a response code in the 300's that can reliably cause HTTP clients to perform redirects to an HTTPS URI, such as 301 or 302. + +The use of error codes in the 400's or 500's **will not** satisfy this requirement. + +Note that while connections to port 80 are insecure, even for redirects, the use of [HSTS](/hsts/) will instruct supporting HTTP clients to automatically redirect themselves from port 80 to port 443, without attempting to connect to port 80 over the network. HSTS mitigates the security impact of connections over port 80, while allowing agencies the flexibility to continue redirecting legacy clients or clients which have not yet received an HSTS policy for the target domain. +### If plain HTTP is entirely disabled on my server, do I still need HSTS? + +**Yes.** Disabling HTTP support is not sufficient to prevent attacks that downgrade web browsers to plain HTTP. + +During an attack, it doesn't matter whether the "real" server has disabled HTTP. If the client can be coaxed into initiating a plain HTTP connection -- such as when a user clicks an `http://` link, or types a URL into their browser manually -- then a local attacker can respond to that connection attempt from their own server and establish their own connection. + +HSTS specifically instructs web browsers to never initiate plain HTTP connections. If a user clicks an `http://` link or types in an `http://` URL, HSTS causes the browser to first rewrite the URL to use `https://` before initiating the connection. + +For this reason, HSTS is necessary to effectively prevent downgrade attacks, even if plain HTTP connections are unsupported on the server. + +### What about network services that don't actually serve web content? + +M-15-13 covers any publicly accessible network service that responds to HTTPS or HTTP requests. This includes network services that don't serve content, but only return HTTP headers, or blank or insubstantial content. + +This also includes services that respond to HTTPS or HTTP requests on non-standard ports (ports other than 80 or 443), whether or not those services are included in external scans provided to agencies. + +Network services which do not respond to HTTPS or HTTP requests are not included in the scope of M-15-13. + ### What does "all Federal agency domains or subdomains" include? Domains and subdomains, in the context of M-15-13, refer to hostnames that are publicly accessible via HTTP or HTTPS. @@ -106,7 +131,17 @@ Federally operated domains do not all end in `.gov`, `.mil`, or `.fed.us`. Some ### What about domains that are only used to redirect visitors to other websites? -These domains must follow all the same requirements and guidelines as domains used to host websites and APIs, including HSTS and preloading. +These domains must enable port 443 and use properly configured HTTPS. + +They must follow all the same requirements and guidelines as domains used to host websites and APIs, including HSTS and preloading. + +### Do domains that redirect to other external domains need to redirect internally to HTTPS before redirecting externally? + +Not generally, but it is practically required in order to preload a second-level domain. + +For example, it is not required by M-15-13 to redirect from `http://example.gov:80` to `https://example.gov:443` before redirecting to `https://another-example.gov:443`. However, doing so enables the connecting client to see and cache the HSTS header on `example.gov`, which it may not otherwise see. + +However, doing an internal redirect first **is required** [to automatically preload second-level domains](https://hstspreload.org/#submission-requirements), and so this practice is recommended for second-level domains. ### What about domains that are technically public, but in practice are only used internally? @@ -143,7 +178,7 @@ Agencies are encouraged to operate OCSP and CRL services via hostnames specifica ### What if I'm using a federally issued certificate -- such as from the Federal PKI or Department of Defense -- for my web service? -There are [no restrictions on acceptable certificate authorities](/certificates/#are-there-federal-restrictions-on-acceptable-certificate-authorities-to-use%3f) agencies might use to meet the requirements of M-15-13. +There are [no restrictions on acceptable certificate authorities](/certificates/#are-there-federal-restrictions-on-acceptable-certificate-authorities-to-use) agencies might use to meet the requirements of M-15-13. However, M-15-13 requires agencies to do more than just redirect HTTP traffic to HTTPS. It also requires agencies to enable **[HTTP Strict Transport Security](/hsts/)** (HSTS), as [described above](#options-for-hsts-compliance). HSTS ensures that HTTPS is always used, and protects users from several common vulnerabilities. diff --git a/pages/hsts.md b/pages/hsts.md index 1fe96d9..ea8329f 100644 --- a/pages/hsts.md +++ b/pages/hsts.md @@ -1,11 +1,12 @@ --- -layout: page +layout: base + title: HTTP Strict Transport Security permalink: /hsts/ description: "An overview of HTTP Strict Transport Security (HSTS), a lightweight standard that prevents privacy leaks and downgrade attacks." --- -**[HTTP Strict Transport Security](https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security)** (HSTS) is a simple and [widely supported](http://caniuse.com/#feat=stricttransportsecurity) standard to protect visitors by ensuring that their browsers _always_ connect to a website over HTTPS. HSTS exists to remove the need for the common, insecure practice of redirecting users from `http://` to `https://` URLs. +**[HTTP Strict Transport Security](https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security)** (HSTS) is a simple and [widely supported](https://caniuse.com/#feat=stricttransportsecurity) standard to protect visitors by ensuring that their browsers _always_ connect to a website over HTTPS. HSTS exists to remove the need for the common, insecure practice of redirecting users from `http://` to `https://` URLs. When a browser knows that a domain has enabled HSTS, it does two things: @@ -39,17 +40,17 @@ Strict Transport Security was [proposed in 2009](https://lists.w3.org/Archives/P The basic problem that HSTS solves is that even after a website turns on HTTPS, visitors may still end up trying to connect over plain HTTP. For example: -* When a user types "dccode.gov" into the URL bar, browsers default to using `http://`. +* When a user types "gsa.gov" into the URL bar, browsers default to using `http://`. * A user may click on an old link that mistakenly uses an `http://` URL. * A user's network may be hostile and actively rewrite `https://` links to `http://`. Websites that prefer HTTPS will generally still listen for connections over HTTP in order to redirect the user to the HTTPS URL. For example: ``` -$ curl --head http://www.facebook.com +$ curl --head http://github.com HTTP/1.1 301 Moved Permanently -Location: https://www.facebook.com/ +Location: https://github.com/ ``` **This redirect is insecure** and is an opportunity for an attacker to capture information about the visitor (such as cookies from a previous secure session), or to maliciously redirect the user to a phishing site. @@ -57,15 +58,15 @@ Location: https://www.facebook.com/ This can be addressed by returning a `Strict-Transport-Security` header whenever the user connects securely. For example: ``` -$ curl --head https://www.facebook.com +$ curl --head https://github.com HTTP/1.1 200 OK -Strict-Transport-Security: max-age=15552000; preload +Strict-Transport-Security: max-age=31536000; includeSubdomains; preload ``` -This enables HSTS for `www.facebook.com`. While HSTS is in effect, clicking any links to `http://www.facebook.com` will cause the browser to issue a request directly for `https://www.facebook.com`. +This enables HSTS for `github.com`. While HSTS is in effect, clicking any links to `http://github.com` will cause the browser to issue a request directly for `https://github.com`. -In the above example, the browser will remember the HSTS policy for 180 days. The policy is refreshed every time browser sees the header again, so if a user visits `https://www.facebook.com` at least once every 180 days, they'll be indefinitely protected by HSTS. +In the above example, the browser will remember the HSTS policy for 1 year. The policy is refreshed every time browser sees the header again, so if a user visits `https://github.com` at least once every year, they'll be indefinitely protected by HSTS. ## HSTS Preloading @@ -74,7 +75,7 @@ For a user to take advantage of HSTS, their browser does have to see the HSTS he In addition, in many cases, **there may never be a first visit** to `https://domain.gov`. For example: * Many federal websites redirect directly from `http://domain.gov` to `https://www.domain.gov`. -* Many federal domains that are used solely for redirects will redirect from `http://source.gov` directly to `https://destination.gov`. +* Many federal domains that are used solely for redirects will redirect from `http://domain.gov` directly to `https://destination.gov`. In either case, `https://domain.gov` is never visited, meaning connecting clients will never see an HSTS policy with an `includeSubDomains` directive that applies to the whole zone. @@ -84,7 +85,7 @@ Firefox, Safari, Opera, and Edge also incorporate Chrome's HSTS preload list, ma ## How to preload a domain -The Chrome security team allows anyone to [submit their domain to the list](https://hstspreload.appspot.com/), provided it meets the following requirements: +The Chrome security team allows anyone to [submit their domain to the list](https://hstspreload.org), provided it meets the following requirements: * HTTPS is enabled on the root domain (e.g. `https://donotcall.gov`), and **all subdomains** (e.g. `https://www.donotcall.gov`) -- especially the `www` subdomain, if a DNS record for it exists. This necessarily includes any subdomains in use solely on intranets. * The HSTS policy includes all subdomains, with a long `max-age`, and a `preload` flag to indicate that the domain owner consents to preloading. @@ -126,14 +127,38 @@ On **Apache**, you would apply a `Header` directive to always set the HSTS heade Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" ``` -On **Microsoft systems running IIS** (Internet Information Services), there are no ".htaccess" files to implement custom headers. IIS applications use a central "web.config" file for configuration. For IIS 7.0 and up, the code is as follows: - -``` - - - - - +On **Microsoft systems running IIS** (Internet Information Services), there are no ".htaccess" files to implement custom headers. IIS applications use a central `web.config` file for configuration. + +For IIS 7.0 and up, the example `web.config` file configuration below will handle secure HTTP to HTTPS redirection with HSTS enabled for HTTPS: + +``` + + + + + + + + + + + + + + + + + + + + + + + + + ``` Generally, you want to set a custom HTTP header for `Strict-Transport-Security` with the value `max-age=31536000; includeSubDomains; preload` (or some variant). @@ -146,8 +171,8 @@ Here are some links to do that with other web servers: ## Resources -* [Browser support for HSTS](http://caniuse.com/#feat=stricttransportsecurity) +* [Browser support for HSTS](https://caniuse.com/#feat=stricttransportsecurity) * [HSTS web developer documentation](https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security) maintained by the Mozilla community -* Chrome's [HSTS preload list](https://chromium.googlesource.com/chromium/src/+/master/net/http/transport_security_state_static.json), and their [submission form](https://hstspreload.appspot.com/). -* ["Upgrading HTTPS in Mid-Air"](https://www.internetsociety.org/sites/default/files/01_4_0.pdf) - A paper analyzing the current detailed practice of HSTS and [HTTP Public Key Pinning](https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning), as of November 2014. +* Chrome's [HSTS preload list](https://chromium.googlesource.com/chromium/src/+/master/net/http/transport_security_state_static.json), and their [submission form](https://hstspreload.org). +* ["Upgrading HTTPS in Mid-Air"](https://www.cs.princeton.edu/research/techreps/TR-986-15) - A paper analyzing the current detailed practice of HSTS and [HTTP Public Key Pinning](https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning), as of November 2014. * ["The first .gov domains hardcoded into your browser as all-HTTPS"](https://18f.gsa.gov/2015/02/09/the-first-gov-domains-hardcoded-into-your-browser-as-all-https/), by 18F. diff --git a/pages/index.md b/pages/index.md index b1652c8..91c6070 100644 --- a/pages/index.md +++ b/pages/index.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: The HTTPS-Only Standard permalink: / description: "The American people expect government websites to be secure and their interactions with those websites to be private. All browsing activity should be considered private and sensitive. This proposed initiative would require the use of HTTPS on all publicly accessible Federal websites and web services." @@ -7,13 +8,13 @@ description: "The American people expect government websites to be secure and th The American people expect government websites to be secure and their interactions with those websites to be private. -This site contains a web-friendly version of the White House Office of Management and Budget memorandum [M-15-13](https://www.whitehouse.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf), **"A Policy to Require Secure Connections across Federal Websites and Web Services"**, and provides technical guidance and best practices to assist in its implementation. +This site contains a web-friendly version of the White House Office of Management and Budget memorandum [M-15-13](https://www.whitehouse.gov/sites/whitehouse.gov/files/omb/memoranda/2015/m-15-13.pdf), **"A Policy to Require Secure Connections across Federal Websites and Web Services"**, and provides technical guidance and best practices to assist in its implementation. ## Goal This Memorandum requires that all publicly accessible Federal websites and web services [[1]](#footnote-1) only provide service through a secure connection. The strongest privacy and integrity protection currently available for public web connections is [Hypertext Transfer Protocol Secure (HTTPS)](/faq/). -This Memorandum expands upon the material in prior Office of Management and Budget (OMB) guidance found in [M-05-04](https://www.whitehouse.gov/sites/default/files/omb/memoranda/fy2005/m05-04.pdf "Policies for Federal Agency Public Websites") and relates to material in [M-08-23](https://www.whitehouse.gov/sites/default/files/omb/assets/omb/memoranda/fy2008/m08-23.pdf "Securing the Federal Government’s Domain Name System Infrastructure."). It provides guidance to agencies for making the transition to HTTPS and a deadline by which agencies must be in compliance. +This Memorandum expands upon the material in prior Office of Management and Budget (OMB) guidance found in [M-05-04](https://www.whitehouse.gov/sites/whitehouse.gov/files/omb/memoranda/2005/m05-04.pdf "Policies for Federal Agency Public Websites") and relates to material in [M-08-23](https://www.whitehouse.gov/sites/whitehouse.gov/files/omb/memoranda/2008/m08-23.pdf "Securing the Federal Government’s Domain Name System Infrastructure."). It provides guidance to agencies for making the transition to HTTPS and a deadline by which agencies must be in compliance. ## Background @@ -53,9 +54,9 @@ HTTPS only guarantees the integrity of the connection between two systems, not t **Planning for Change:** Protocols and web standards improve regularly, and security vulnerabilities can emerge that require prompt attention. Federal websites and services should deploy HTTPS in a manner that allows for rapid updates to certificates, cipher choices (including [forward secrecy](/technical-guidelines/#forward-secrecy)) protocol versions, and other configuration elements. Agencies should monitor [https.cio.gov](https://https.cio.gov) and other [public resources](/resources/) to keep apprised of current best practices. -**[Strict Transport Security](/hsts/):** Websites and services available over HTTPS must enable HTTP Strict Transport Security (HSTS) to instruct compliant browsers to assume HTTPS going forward. This reduces insecure redirects, and protects users against attacks that attempt to downgrade connections to plain HTTP. Once HSTS is in place, domains can be submitted to a ["preload list"](https://hstspreload.appspot.com) used by all major browsers to ensure the HSTS policy is in effect at all times. +**[Strict Transport Security](/hsts/):** Websites and services available over HTTPS must enable HTTP Strict Transport Security (HSTS) to instruct compliant browsers to assume HTTPS going forward. This reduces insecure redirects, and protects users against attacks that attempt to downgrade connections to plain HTTP. Once HSTS is in place, domains can be submitted to a ["preload list"](https://hstspreload.org) used by all major browsers to ensure the HSTS policy is in effect at all times. -**Domain Name System Security (DNSSEC):** The new policy outlined in this Memorandum does not rescind or conflict with M-08-23, ["Securing the Federal Government's Domain Name System Infrastructure"](https://www.whitehouse.gov/sites/default/files/omb/memoranda/fy2008/m08-23.pdf). Once DNS resolution is complete, DNSSEC does not ensure the privacy or integrity of communication between a client and the destination IP. HTTPS provides this additional security. +**Domain Name System Security (DNSSEC):** The new policy outlined in this Memorandum does not rescind or conflict with M-08-23, ["Securing the Federal Government's Domain Name System Infrastructure"](https://www.whitehouse.gov/sites/whitehouse.gov/files/omb/memoranda/2008/m08-23.pdf). Once DNS resolution is complete, DNSSEC does not ensure the privacy or integrity of communication between a client and the destination IP. HTTPS provides this additional security. ## Cost Effective Implementation diff --git a/pages/mixed-content.md b/pages/mixed-content.md index 3135861..43ac6dc 100644 --- a/pages/mixed-content.md +++ b/pages/mixed-content.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: Mixed Content permalink: /mixed-content/ description: "Strategies for dealing with mixed content when upgrading a website from HTTP to HTTPS." @@ -119,7 +120,7 @@ Some resources: ## Why do browsers block mixed content? -If mixed content were not blocked, an attacker could control the main website by conducting a MITM attack against any of its active resources. +If mixed content were not blocked, an attacker could control the main website by conducting an attack against any of its active resources. Even with passive content like images, attackers can manipulate what the page looks like, and so the yellow-lock icon is intended to communicate that security has been weakened and user confidence should be reduced. In addition, an attacker will be able to read any cookies for that domain which do have the `Secure` flag, and set cookies. diff --git a/pages/resources.md b/pages/resources.md index 798a137..0bde66e 100644 --- a/pages/resources.md +++ b/pages/resources.md @@ -1,14 +1,11 @@ --- -layout: page +layout: base + title: Resources permalink: /resources/ description: "Articles, news, and tools about HTTPS." --- -### Ask Others In Government - -The HTTPS-Help listserv is a support forum for anyone with a `.gov` or `.mil` email address. Any questions, ideas, or general discussion about HTTPS is welcome. Join by sending a message to [`listserv@listserv.gsa.gov`](mailto:listserv@listserv.gsa.gov) with **no subject** and a body of "subscribe https-help". - ### Learning The DigitalGov University has several presentations on HTTPS from the General Services Administration: @@ -17,7 +14,7 @@ The DigitalGov University has several presentations on HTTPS from the General Se * **[Implementing HTTPS](https://www.youtube.com/watch?v=rnM2qAfEG-M)** (July 2015), by Eric Mill and Gray Brooks. A more detailed explanation of how HTTPS works, how to migrate a website to HTTPS, the [technical concepts](/technical-guidelines/) you should be aware of when implementing HTTPS, and new and upcoming advances in HTTPS. -* **[Migrating to HTTPS](https://www.youtube.com/watch?v=X5H8JRULDOo)** (July 2016), by Eric Mill and Timothy Badaczewski. This presentation covers common issues common to federal HTTPS migrations, including: [HTTP Strict Transport Security](/hsts/) (HSTS), [getting certificates](/certificates/), [mixed content](/mixed-content/), and [search engine optimization](/faq/#how-does-migrating-to-https-affect-search-engine-optimization-(seo)%3f) (SEO). +* **[Migrating to HTTPS](https://www.youtube.com/watch?v=X5H8JRULDOo)** (July 2016), by Eric Mill and Timothy Badaczewski. This presentation covers common issues common to federal HTTPS migrations, including: [HTTP Strict Transport Security](/hsts/) (HSTS), [getting certificates](/certificates/), [mixed content](/mixed-content/), and [search engine optimization](/faq/#how-does-migrating-to-https-affect-search-engine-optimization-seo) (SEO). ### Tools diff --git a/pages/sni.md b/pages/sni.md index 8303054..34cef6c 100644 --- a/pages/sni.md +++ b/pages/sni.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: Server Name Indication permalink: /sni/ description: "An overview of Server Name Indication (SNI), a TLS extension to allow multiple secure hostnames to be served from a single IP address." diff --git a/pages/technical.md b/pages/technical.md index eb52f92..6c0a1ad 100644 --- a/pages/technical.md +++ b/pages/technical.md @@ -1,5 +1,6 @@ --- -layout: page +layout: base + title: Technical Guidelines permalink: /technical-guidelines/ description: "Technical guidelines relating to HTTPS strength and quality." @@ -10,7 +11,7 @@ This page covers some relevant technical concepts relevant to the **strength and * [SSL and TLS](#ssl-and-tls) * [Forward secrecy](#forward-secrecy) * [Signature algorithms](#signature-algorithms), such as SHA-1 and SHA-2 -* [RC4](#rc4), a common but insecure cipher +* [Strong ciphersuites](#strong-ciphersuites) * [A complete certificate chain](#a-complete-certificate-chain) ### SSL and TLS @@ -24,7 +25,7 @@ SSL and TLS perform the same function, and TLS is a direct successor and replace The major versions of SSL/TLS in use today are: * **SSLv3:** [Released in 1996.](https://tools.ietf.org/html/rfc6101) **Considered to be insecure** after the [POODLE](https://www.openssl.org/~bodo/ssl-poodle.pdf) attack was published in 2014. Turning off SSLv3 effectively removes support for Internet Explorer 6. -* **TLSv1.0:** - [Released in 1999.](https://tools.ietf.org/html/rfc2246) Used widely today to support [some older clients](https://www.ssllabs.com/ssltest/clients.html), like IE8 and Android 4.3 and below. [NIST Special Publication 800-52](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf) disallows TLSv1.0 for government-facing systems. +* **TLSv1.0:** - [Released in 1999.](https://tools.ietf.org/html/rfc2246) Used widely today to support [some older clients](https://www.ssllabs.com/ssltest/clients.html), like IE8 and Android 4.3 and below. [NIST Special Publication 800-52](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf) disallows TLSv1.0 for government-facing systems. * **TLSv1.1:** - [Released in 2006.](https://tools.ietf.org/html/rfc4346) An improvement over TLSv1.0, but was quickly superseded by TLSv1.2. * **TLSv1.2:** - [Released in 2008.](https://tools.ietf.org/html/rfc5246) This is the strongest form of TLS today, and is widely supported by modern browsers. @@ -34,7 +35,7 @@ It is possible for an attacker to interfere with the negotiation process and att A downgrade attack can be prevented by using **[TLS Fallback SCSV](https://tools.ietf.org/html/rfc7507)**, a TLS extension proposed in 2014 and which is enabled by default in newer versions of OpenSSL. -For more details of NIST recommendations, read [NIST Special Publication 800-52](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf). +For more details of NIST recommendations, read [NIST Special Publication 800-52](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf). * **[The Pulse HTTPS dashboard for .gov domains](https://pulse.cio.gov/https/domains/)** will note when a domain still offers insecure SSLv3, or when a domain does not yet offer TLSv1.2. * **[https.cio.gov is configured](https://www.ssllabs.com/ssltest/analyze.html?d=https.cio.gov)** to support TLSv1.0, TLSv1.1, and TLSv1.2, and has TLS Fallback SCSV enabled. @@ -49,7 +50,7 @@ In forward secret connections, the server and client create a temporary key for In TLS, forward secrecy is provided by choosing ciphersuites that include the [DHE](https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange) and [ECDHE](https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman) key exchanges. -**Note:** Current drafts of TLS 1.3, the next version of TLS, require new connections to use employ forward secrecy by [removing support for static RSA and DH key exchange](https://tools.ietf.org/html/draft-ietf-tls-tls13-02#section-1.2). +**Note:** Current drafts of TLS 1.3, the next version of TLS, require new connections to use forward secrecy by [removing support for static RSA and DH key exchange](https://tools.ietf.org/html/draft-ietf-tls-tls13-02#section-1.2). * **[The Pulse HTTPS dashboard for .gov domains](https://pulse.cio.gov/https/domains/)** will note when a domain offers little or no forward secrecy. * **[https.cio.gov is configured](https://www.ssllabs.com/ssltest/analyze.html?d=https.cio.gov)** to offer robust forward secrecy. @@ -60,20 +61,25 @@ The HTTPS/TLS security model uses "certificates" to guarantee authenticity. Thes The certificate authority's trusted root certificate (which is included with your OS or browser) is used to sign an intermediary certificate, which is used to sign your website's certificate. There may be more than one intermediary certificate in the chain. A part of the signature process is computing a "hash" of the data included in the certificate. This can be done using a standard hashing algorithm, such as [SHA-1](https://en.wikipedia.org/wiki/SHA-1) or [SHA-2](https://en.wikipedia.org/wiki/SHA-2). -SHA-1 has been shown to have serious weaknesses, and so browser and OS providers like [Google](https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html), [Microsoft](http://social.technet.microsoft.com/wiki/contents/articles/32288.windows-enforcement-of-authenticode-code-signing-and-timestamping.aspx), and [Mozilla](https://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature-algorithms/) have announced timelines to deprecate SHA-1 in favor of the SHA-2 family of algorithms. +SHA-1 has been shown to have serious weaknesses, and so browser and OS providers like [Google](https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html), [Microsoft](https://social.technet.microsoft.com/wiki/contents/articles/32288.windows-enforcement-of-sha1-certificates.aspx), and [Mozilla](https://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature-algorithms/) have announced timelines to deprecate SHA-1 in favor of the SHA-2 family of algorithms. -[NIST has disallowed SHA-1](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf) for digital signature generation after 2013. +[NIST has disallowed SHA-1](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf) for digital signature generation after 2013. As of January 2016, commercial CAs are forbidden by most root programs from issuing a SHA-1 certificate. As such, obtaining a publicly trusted SHA-1 certificate is no longer feasible. In addition, site owners with an existing SHA-1 certificate should be aware that many browsers and OSes will be disabling SHA-1 support in early 2017. -### RC4 +### Strong ciphersuites + +Each TLS handshake makes use of a set of cryptographic primitives, including ciphers and signature algorithms. + +Which ciphers and algorithms are used in a handshake is a function of client support and preferences, and server support and preferences. + +Federal agencies have no control over the primitives supported by major clients used by the public (such as web browsers, cURL, and other common HTTP clients). However, agencies can control the ciphers and algorithms that are supported by their servers (which can also include proxies, load balancers, or content delivery networks). -There are a number of ciphers available to a TLS connection, and one of those is [RC4](https://en.wikipedia.org/wiki/RC4) (also known as ARC4 or ARCFOUR). RC4 was a popular cipher due to being a fast cipher which was not vulnerable to the [BEAST](https://blog.qualys.com/ssllabs/2011/10/17/mitigating-the-beast-attack-on-tls) attack. However, in 2013 it was announced that [RC4 had a serious flaw](http://www.isg.rhul.ac.uk/tls/) that would make it possible for a determined attacker to decrypt data encrypted with RC4 in TLS. +When configuring servers: -Due to the serious flaw in RC4, and the fact that the BEAST attack has been mitigated by all modern browsers, modern browsers no longer support RC4-based ciphersuites. Therefore all HTTPS sites need to be configured to use ciphers other than RC4. +* **Avoid SHA-1 in the TLS handshake.** Though there is no known specific vulnerability in the use of SHA-1 as part of the TLS handshake, SHA-1 has already been shown to be [unacceptably weak for use as a signature algorithm for issued certificates](#signature-algorithms). Beginning [with TLS 1.2](https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1), servers can and should negotiate the use of a signature algorithm other than SHA-1 for the TLS handshake. -* **[The Pulse HTTPS dashboard for .gov domains](https://pulse.cio.gov/https/domains/)** will note when a domain employs the RC4 cipher. -* **[https.cio.gov is configured](https://www.ssllabs.com/ssltest/analyze.html?d=https.cio.gov)** to avoid using the RC4 cipher. +* **Avoid RC4.** [RC4](https://en.wikipedia.org/wiki/RC4) was once a popular cipher, but [in 2013 was found to have a critical flaw](http://www.isg.rhul.ac.uk/tls/). Modern browsers no longer support RC4-based ciphersuites, and servers should no longer need to be configured to support RC4. ### A complete certificate chain @@ -81,7 +87,7 @@ In addition to the certificate itself, you should provide a "chain" of intermedi Failing to provide intermediates could prevent various browsers and clients from successfully connecting to your service, especially mobile browsers and non-browser clients (such as cURL, and tools based on libcurl). -Some browsers will cache intermediates from a previous connection or attempt to automatically download missing intermediates that are presented in a certificate's [Authority Information Access](https://tools.ietf.org/html/rfc5280#section-4.2.2.1) extension, and so it can be easy to miss this problem during initial configuration. Though most browsers have an option to inspect the certificates on a site, they vary in whether they show the exact certificates the server presented or a chain as reconstructed through the fetching of an intermediate listed in the AIA extension. +Some browsers will cache intermediates from a previous connection or attempt to automatically download missing intermediates that are presented in a certificate's [Authority Information Access](https://tools.ietf.org/html/rfc5280#section-4.2.2.1) extension, and so it can be easy to miss this problem during initial configuration. Though most browsers have an option to inspect the certificates on a site, they vary in whether they show the exact certificates the server presented or a chain as reconstructed through the fetching of an intermediate listed in the AIA extension. In general: diff --git a/resources/implementing-https-links.md b/resources/implementing-https-links.md index dc04e69..9759c5d 100644 --- a/resources/implementing-https-links.md +++ b/resources/implementing-https-links.md @@ -6,7 +6,7 @@ See the [recorded presentation on YouTube](https://www.youtube.com/watch?v=rnM2q * [https.cio.gov FAQ on HTTPS](https://https.cio.gov/faq/) * [Mozilla blog post on deprecating non-secure HTTP](https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/) -* [OMB Memorandum M-15-13](https://www.whitehouse.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf) +* [OMB Memorandum M-15-13](https://obamawhitehouse.archives.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf) #### How HTTPS Works