diff --git a/.gitignore b/.gitignore index eb1f17538..166cceaa6 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ example/ldap/private.ldif Configuration.schema.json users_database.test.yml + +.suite diff --git a/.npmignore b/.npmignore index 5248d7d1b..93304db63 100644 --- a/.npmignore +++ b/.npmignore @@ -8,13 +8,11 @@ images/ example/ .travis.yml -config.test.yml CONTRIBUTORS.md Dockerfile docker-compose.* Gruntfile.js tslint.json tsconfig.json -users_database.yml *.tgz diff --git a/.travis.yml b/.travis.yml index 40c9cec3a..f71f06bce 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: -- '8' +- '9' services: - docker - ntp @@ -23,16 +23,20 @@ addons: - public.example.com - authelia.example.com - admin.example.com + before_install: - npm install -g npm@'>=2.13.5' +- pushd client && npm install && popd + before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start - sleep 3 script: -- "./scripts/travis.sh" +- "./scripts/authelia-scripts travis" after_success: -- "./scripts/docker-publish.sh" +- "./scripts/authelia-scripts docker publish" + deploy: provider: npm email: clement.michaud34@gmail.com diff --git a/Dockerfile b/Dockerfile index 6687edd86..7abb1699f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN apk --update add --no-cache --virtual \ COPY dist/server /usr/src/server COPY dist/shared /usr/src/shared -EXPOSE 8080 +EXPOSE 9091 VOLUME /etc/authelia VOLUME /var/lib/authelia diff --git a/Dockerfile.dev b/Dockerfile.dev deleted file mode 100644 index 6eede7cc7..000000000 --- a/Dockerfile.dev +++ /dev/null @@ -1,20 +0,0 @@ -FROM node:8.7.0-alpine - -WORKDIR /usr/src - -COPY package.json /usr/src/package.json - -RUN apk --update add --no-cache --virtual \ - .build-deps make g++ python && \ - npm install && \ - apk del .build-deps - -COPY dist/server /usr/src/server -COPY dist/shared /usr/src/shared - -EXPOSE 8080 - -VOLUME /etc/authelia -VOLUME /var/lib/authelia - -CMD ["node", "server/src/index.js", "/etc/authelia/config.yml"] diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 5dea75530..000000000 --- a/Gruntfile.js +++ /dev/null @@ -1,246 +0,0 @@ -module.exports = function (grunt) { - const buildDir = "dist"; - const schemaDir = "server/src/lib/configuration/Configuration.schema.json" - var theme = grunt.option('theme') || 'default'; - - grunt.initConfig({ - env: { - "env-test-server-unit": { - TS_NODE_PROJECT: "server/tsconfig.json" - }, - "env-test-client-unit": { - TS_NODE_PROJECT: "client/tsconfig.json" - }, - "env-test-shared-unit": { - TS_NODE_PROJECT: "server/tsconfig.json" - } - }, - clean: { - dist: ['dist'], - backup: ['backup'], - }, - run: { - "compile-server": { - cmd: "./node_modules/.bin/tsc", - args: ['-p', 'server/tsconfig.json'] - }, - "generate-config-schema": { - cmd: "./node_modules/.bin/typescript-json-schema", - args: ["-o", schemaDir, "--strictNullChecks", - "--required", "server/tsconfig.json", "Configuration"] - }, - "compile-client": { - cmd: "./node_modules/.bin/tsc", - args: ['-p', 'client/tsconfig.json'] - }, - "lint-server": { - cmd: "./node_modules/.bin/tslint", - args: ['-c', 'server/tslint.json', '-p', 'server/tsconfig.json'] - }, - "lint-client": { - cmd: "./node_modules/.bin/tslint", - args: ['-c', 'client/tslint.json', '-p', 'client/tsconfig.json'] - }, - "test-server-unit": { - cmd: "./node_modules/.bin/mocha", - args: ['--colors', '--require', 'ts-node/register', 'server/src/**/*.spec.ts'] - }, - "test-shared-unit": { - cmd: "./node_modules/.bin/mocha", - args: ['--colors', '--require', 'ts-node/register', 'shared/**/*.spec.ts'] - }, - "test-client-unit": { - cmd: "./node_modules/.bin/mocha", - args: ['--colors', '--require', 'ts-node/register', 'client/test/**/*.test.ts'] - }, - "test-cucumber": { - cmd: "./scripts/run-cucumber.sh", - args: ["./test/features"] - }, - "test-complete-config": { - cmd: "./node_modules/.bin/mocha", - args: ['--colors', '--require', 'ts-node/register', 'test/complete-config/**/*.ts'] - }, - "test-minimal-config": { - cmd: "./node_modules/.bin/mocha", - args: ['--colors', '--require', 'ts-node/register', 'test/minimal-config/**/*.ts'] - }, - "test-inactivity": { - cmd: "./node_modules/.bin/mocha", - args: ['--colors', '--require', 'ts-node/register', 'test/inactivity/**/*.ts'] - }, - "docker-build": { - cmd: "docker", - args: ['build', '-t', 'clems4ever/authelia', '.'] - }, - "minify": { - cmd: "./node_modules/.bin/uglifyjs", - args: [`${buildDir}/server/src/public_html/js/authelia.js`, '-o', `${buildDir}/server/src/public_html/js/authelia.min.js`] - }, - "apidoc": { - cmd: "./node_modules/.bin/apidoc", - args: ["-i", "src/server", "-o", "doc"] - }, - "include-minified-script": { - cmd: "sed", - args: ["-i", "s/authelia.\(js\|css\)/authelia.min.\1/", `${buildDir}/server/src/views/layout/layout.pug`] - } - }, - copy: { - backup: { - files: [{ - expand: true, - src: ['dist/**'], - dest: 'backup' - }] - }, - resources: { - expand: true, - cwd: 'themes/' + theme + '/server/src/resources', - src: '**', - dest: `${buildDir}/server/src/resources/` - }, - views: { - expand: true, - cwd: 'themes/' + theme + '/server/src/views', - src: '**', - dest: `${buildDir}/server/src/views/` - }, - images: { - expand: true, - cwd: 'themes/' + theme + '/client/src/img', - src: '**', - dest: `${buildDir}/server/src/public_html/img/` - }, - thirdparties: { - expand: true, - cwd: 'themes/' + theme + '/client/src/thirdparties', - src: '**', - dest: `${buildDir}/server/src/public_html/js/` - }, - schema: { - src: schemaDir, - dest: `${buildDir}/${schemaDir}` - } - }, - browserify: { - dist: { - src: ['dist/client/src/index.js'], - dest: `${buildDir}/server/src/public_html/js/authelia.js`, - options: { - browserifyOptions: { - standalone: 'authelia' - }, - }, - }, - }, - watch: { - views: { - files: ['server/src/views/**/*.pug'], - tasks: ['copy:views'], - options: { - interrupt: false, - atBegin: true - } - }, - resources: { - files: ['server/src/resources/*.ejs'], - tasks: ['copy:resources'], - options: { - interrupt: false, - atBegin: true - } - }, - images: { - files: ['client/src/img/**'], - tasks: ['copy:images'], - options: { - interrupt: false, - atBegin: true - } - }, - css: { - files: ['client/src/**/*.css'], - tasks: ['concat:css', 'cssmin'], - options: { - interrupt: true, - atBegin: true - } - }, - client: { - files: ['client/src/**/*.ts'], - tasks: ['build-dev'], - options: { - interrupt: true, - atBegin: true - } - }, - server: { - files: ['server/src/**/*.ts'], - tasks: ['build-dev', 'run:docker-restart', 'run:make-dev-views' ], - options: { - interrupt: true, - atBegin: true - } - } - }, - concat: { - css: { - src: ['themes/' + theme + '/client/src/css/*.css'], - dest: `${buildDir}/server/src/public_html/css/authelia.css` - }, - }, - cssmin: { - target: { - files: { - [`${buildDir}/server/src/public_html/css/authelia.min.css`]: [`${buildDir}/server/src/public_html/css/authelia.css`] - } - } - } - }); - - grunt.loadNpmTasks('grunt-browserify'); - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-cssmin'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-run'); - grunt.loadNpmTasks('grunt-env'); - - grunt.registerTask('compile-server', ['run:lint-server', 'run:compile-server']) - grunt.registerTask('compile-client', ['run:lint-client', 'run:compile-client']) - - grunt.registerTask('test-server', ['env:env-test-server-unit', 'run:test-server-unit']) - grunt.registerTask('test-shared', ['env:env-test-shared-unit', 'run:test-shared-unit']) - grunt.registerTask('test-client', ['env:env-test-client-unit', 'run:test-client-unit']) - grunt.registerTask('test-unit', ['test-server', 'test-client', 'test-shared']); - grunt.registerTask('test-int', ['run:test-cucumber', 'run:test-minimal-config', 'run:test-complete-config', 'run:test-inactivity']); - - grunt.registerTask('copy-resources', ['copy:resources', 'copy:views', 'copy:images', 'copy:thirdparties', 'concat:css']); - - grunt.registerTask('generate-config-schema', ['run:generate-config-schema', 'copy:schema']); - - grunt.registerTask('build-client', ['compile-client', 'browserify']); - - grunt.registerTask('build-server', ['compile-server', 'copy-resources', 'generate-config-schema']); - - grunt.registerTask('build', ['build-client', 'build-server']); - grunt.registerTask('build-dist', ['clean:backup', 'copy:backup', 'clean:dist', 'build', 'run:minify', 'cssmin', 'run:include-minified-script']); - - grunt.registerTask('schema', ['run:generate-config-schema']) - - grunt.registerTask('docker-build', ['run:docker-build']); - - grunt.registerTask('check', function() { - if ((theme != 'default') && (theme != 'black') && (theme != 'matrix') && (theme != 'squares') && (theme != 'triangles')) { - grunt.warn('Valid argmuents are just "grunt" (will use default) or "grunt --theme=|default|black|matrix|squares|triangles"'); - } - if (grunt.option('theme') == 'default' || 'black' || 'matrix' || 'squares' || 'triangles') { - grunt.log.ok(); - grunt.log.writeln('Building "'+ theme +'" theme'); - } - }); - - grunt.registerTask('default', ['check', 'build-dist']); -}; diff --git a/client/.env.development b/client/.env.development new file mode 100644 index 000000000..a708a53b5 --- /dev/null +++ b/client/.env.development @@ -0,0 +1,2 @@ + +REACT_APP_CSP_CONTENT="default-src 'unsafe-inline'; script-src * 'unsafe-inline'; img-src * data:; style-src 'unsafe-inline'; connect-src * 'unsafe-inline' extensions:" diff --git a/client/.env.production b/client/.env.production new file mode 100644 index 000000000..959e56fbc --- /dev/null +++ b/client/.env.production @@ -0,0 +1,2 @@ + +REACT_APP_CSP_CONTENT="default-src 'self'; style-src 'self'; script-src 'self'; img-src 'self' data:" diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 000000000..4d29575de --- /dev/null +++ b/client/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/client/Dockerfile b/client/Dockerfile new file mode 100644 index 000000000..d7a7e1a0c --- /dev/null +++ b/client/Dockerfile @@ -0,0 +1,9 @@ +FROM node:10.15.0-jessie + +WORKDIR /usr/app/client + +ADD package.json package.json + +RUN npm i + +CMD ["npm", "start"] diff --git a/client/README.md b/client/README.md new file mode 100644 index 000000000..897dc8366 --- /dev/null +++ b/client/README.md @@ -0,0 +1,44 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/client/docker-compose.yml b/client/docker-compose.yml new file mode 100644 index 000000000..37c5d0ac2 --- /dev/null +++ b/client/docker-compose.yml @@ -0,0 +1,15 @@ +version: '2' +services: + authelia-frontend-dev: + build: + context: client + restart: always + volumes: + - ./client/tsconfig.json:/usr/app/client/tsconfig.json + - ./client/public:/usr/app/client/public + - ./client/src:/usr/app/client/src + - ./client/.env.development:/usr/app/client/.env.development + networks: + authelianet: + aliases: + - authelia-frontend diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 000000000..445262e82 --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,17959 @@ +{ + "name": "authelia-portal", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "requires": { + "@babel/highlight": "7.0.0" + } + }, + "@babel/core": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.6.tgz", + "integrity": "sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw==", + "requires": { + "@babel/code-frame": "7.0.0", + "@babel/generator": "7.2.2", + "@babel/helpers": "7.2.0", + "@babel/parser": "7.2.3", + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2", + "convert-source-map": "1.6.0", + "debug": "4.1.1", + "json5": "2.1.0", + "lodash": "4.17.11", + "resolve": "1.8.1", + "semver": "5.6.0", + "source-map": "0.5.7" + } + }, + "@babel/generator": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", + "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", + "requires": { + "@babel/types": "7.2.2", + "jsesc": "2.5.2", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "requires": { + "@babel/types": "7.2.2" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "requires": { + "@babel/helper-explode-assignable-expression": "7.1.0", + "@babel/types": "7.2.2" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", + "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==", + "requires": { + "@babel/types": "7.2.2", + "esutils": "2.0.2" + } + }, + "@babel/helper-call-delegate": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", + "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "requires": { + "@babel/helper-hoist-variables": "7.0.0", + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2" + } + }, + "@babel/helper-define-map": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", + "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "requires": { + "@babel/helper-function-name": "7.1.0", + "@babel/types": "7.2.2", + "lodash": "4.17.11" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "requires": { + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "requires": { + "@babel/helper-get-function-arity": "7.0.0", + "@babel/template": "7.2.2", + "@babel/types": "7.2.2" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "requires": { + "@babel/types": "7.2.2" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", + "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "requires": { + "@babel/types": "7.2.2" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "requires": { + "@babel/types": "7.2.2" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "requires": { + "@babel/types": "7.2.2" + } + }, + "@babel/helper-module-transforms": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", + "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "requires": { + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-simple-access": "7.1.0", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/template": "7.2.2", + "@babel/types": "7.2.2", + "lodash": "4.17.11" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "requires": { + "@babel/types": "7.2.2" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + }, + "@babel/helper-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", + "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "requires": { + "lodash": "4.17.11" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-wrap-function": "7.2.0", + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2" + } + }, + "@babel/helper-replace-supers": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", + "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", + "requires": { + "@babel/helper-member-expression-to-functions": "7.0.0", + "@babel/helper-optimise-call-expression": "7.0.0", + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "requires": { + "@babel/template": "7.2.2", + "@babel/types": "7.2.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "requires": { + "@babel/types": "7.2.2" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "requires": { + "@babel/helper-function-name": "7.1.0", + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2" + } + }, + "@babel/helpers": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz", + "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==", + "requires": { + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "requires": { + "chalk": "2.4.1", + "esutils": "2.0.2", + "js-tokens": "4.0.0" + } + }, + "@babel/parser": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz", + "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-remap-async-to-generator": "7.1.0", + "@babel/plugin-syntax-async-generators": "7.2.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz", + "integrity": "sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw==", + "requires": { + "@babel/helper-function-name": "7.1.0", + "@babel/helper-member-expression-to-functions": "7.0.0", + "@babel/helper-optimise-call-expression": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.2.3", + "@babel/plugin-syntax-class-properties": "7.2.0" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.6.tgz", + "integrity": "sha512-U42f8KhUbtlhUDyV/wK4Rq/wWh8vWyttYABckG/v0vVnMPvayOewZC/83CbVdmyP+UhEqI368FEQ7hHMfhBpQA==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.2.3", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/plugin-syntax-decorators": "7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-json-strings": "7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", + "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0", + "regexpu-core": "4.4.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz", + "integrity": "sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", + "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz", + "integrity": "sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", + "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz", + "integrity": "sha512-WhKr6yu6yGpGcNMVgIBuI9MkredpVc7Y3YR4UzEZmDztHoL6wV56YBHLhWnjO1EvId1B32HrD3DRFc+zSoKI1g==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", + "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "requires": { + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-remap-async-to-generator": "7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", + "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "lodash": "4.17.11" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", + "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-define-map": "7.1.0", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-optimise-call-expression": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.2.3", + "@babel/helper-split-export-declaration": "7.0.0", + "globals": "11.10.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", + "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", + "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0", + "regexpu-core": "4.4.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", + "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.1.6.tgz", + "integrity": "sha512-0tyFAAjJmnRlr8MVJV39ASn1hv+PbdVP71hf7aAseqLfQ0o9QXk9htbMbq7/ZYXnUIp6gDw0lUUP0+PQMbbtmg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-flow": "7.2.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", + "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", + "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "requires": { + "@babel/helper-function-name": "7.1.0", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", + "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "requires": { + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", + "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "requires": { + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-simple-access": "7.1.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", + "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", + "requires": { + "@babel/helper-hoist-variables": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "requires": { + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", + "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", + "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.2.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", + "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", + "requires": { + "@babel/helper-call-delegate": "7.1.0", + "@babel/helper-get-function-arity": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz", + "integrity": "sha512-YYQFg6giRFMsZPKUM9v+VcHOdfSQdz9jHCx3akAi3UYgyjndmdYGSXylQ/V+HswQt4fL8IklchD9HTsaOCrWQQ==", + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz", + "integrity": "sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q==", + "requires": { + "@babel/helper-builder-react-jsx": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-jsx": "7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-jsx": "7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", + "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-jsx": "7.2.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", + "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "requires": { + "regenerator-transform": "0.13.3" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz", + "integrity": "sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg==", + "requires": { + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "resolve": "1.8.1", + "semver": "5.6.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", + "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.2.0.tgz", + "integrity": "sha512-EnI7i2/gJ7ZNr2MuyvN2Hu+BHJENlxWte5XygPvfj/MbvtOkWor9zcnHpMMQL2YYaaCcqtIvJUyJ7QVfoGs7ew==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-typescript": "7.2.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", + "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0", + "regexpu-core": "4.4.0" + } + }, + "@babel/preset-env": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz", + "integrity": "sha512-AuHzW7a9rbv5WXmvGaPX7wADxFkZIqKlbBh1dmZUQp4iwiPpkE/Qnrji6SC4UQCQzvWY/cpHET29eUhXS9cLPw==", + "requires": { + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-proposal-async-generator-functions": "7.2.0", + "@babel/plugin-proposal-json-strings": "7.2.0", + "@babel/plugin-proposal-object-rest-spread": "7.2.0", + "@babel/plugin-proposal-optional-catch-binding": "7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "7.2.0", + "@babel/plugin-syntax-async-generators": "7.2.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "7.2.0", + "@babel/plugin-transform-arrow-functions": "7.2.0", + "@babel/plugin-transform-async-to-generator": "7.2.0", + "@babel/plugin-transform-block-scoped-functions": "7.2.0", + "@babel/plugin-transform-block-scoping": "7.2.0", + "@babel/plugin-transform-classes": "7.2.2", + "@babel/plugin-transform-computed-properties": "7.2.0", + "@babel/plugin-transform-destructuring": "7.2.0", + "@babel/plugin-transform-dotall-regex": "7.2.0", + "@babel/plugin-transform-duplicate-keys": "7.2.0", + "@babel/plugin-transform-exponentiation-operator": "7.2.0", + "@babel/plugin-transform-for-of": "7.2.0", + "@babel/plugin-transform-function-name": "7.2.0", + "@babel/plugin-transform-literals": "7.2.0", + "@babel/plugin-transform-modules-amd": "7.2.0", + "@babel/plugin-transform-modules-commonjs": "7.2.0", + "@babel/plugin-transform-modules-systemjs": "7.2.0", + "@babel/plugin-transform-modules-umd": "7.2.0", + "@babel/plugin-transform-new-target": "7.0.0", + "@babel/plugin-transform-object-super": "7.2.0", + "@babel/plugin-transform-parameters": "7.2.0", + "@babel/plugin-transform-regenerator": "7.0.0", + "@babel/plugin-transform-shorthand-properties": "7.2.0", + "@babel/plugin-transform-spread": "7.2.2", + "@babel/plugin-transform-sticky-regex": "7.2.0", + "@babel/plugin-transform-template-literals": "7.2.0", + "@babel/plugin-transform-typeof-symbol": "7.2.0", + "@babel/plugin-transform-unicode-regex": "7.2.0", + "browserslist": "4.3.7", + "invariant": "2.2.4", + "js-levenshtein": "1.1.5", + "semver": "5.6.0" + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-transform-react-display-name": "7.2.0", + "@babel/plugin-transform-react-jsx": "7.2.0", + "@babel/plugin-transform-react-jsx-self": "7.2.0", + "@babel/plugin-transform-react-jsx-source": "7.2.0" + } + }, + "@babel/preset-typescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.1.0.tgz", + "integrity": "sha512-LYveByuF9AOM8WrsNne5+N79k1YxjNB6gmpCQsnuSBAcV8QUeB+ZUxQzL7Rz7HksPbahymKkq2qBR+o36ggFZA==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-transform-typescript": "7.2.0" + } + }, + "@babel/runtime": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", + "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", + "requires": { + "regenerator-runtime": "0.12.1" + } + }, + "@babel/template": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "requires": { + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.2.3", + "@babel/types": "7.2.2" + } + }, + "@babel/traverse": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", + "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "requires": { + "@babel/code-frame": "7.0.0", + "@babel/generator": "7.2.2", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/parser": "7.2.3", + "@babel/types": "7.2.2", + "debug": "4.1.1", + "globals": "11.10.0", + "lodash": "4.17.11" + } + }, + "@babel/types": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", + "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@material/animation": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-0.41.0.tgz", + "integrity": "sha512-yYAwJbX3Q2AFd4dr6IYOsWLQy2HN8zWOFVl9AbUXunjzTfJCa/ecfXCriaT6qkmoNoHeTdJHRrsQJZC5GsPvzA==" + }, + "@material/base": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-0.41.0.tgz", + "integrity": "sha512-tEyzwBRu3d1H120SfKsDVYZHcqT5lKohh/7cWKR93aAaPDkSvjpKJIjyu2yuSkjpDduVZGzVocYbOvhUKhhzXQ==" + }, + "@material/button": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-0.41.0.tgz", + "integrity": "sha512-9mA/7P8yD3YPJ8ijwu0oOiT65OCa8Km3M9OF6VAsBE+XJS9Wo5hWDMgkv16raeOFeXj+1ALsjvuTz31JdcSkgQ==", + "requires": { + "@material/elevation": "0.41.0", + "@material/ripple": "0.41.0", + "@material/rtl": "0.40.1", + "@material/shape": "0.41.0", + "@material/theme": "0.41.0", + "@material/typography": "0.41.0" + } + }, + "@material/checkbox": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-0.41.0.tgz", + "integrity": "sha512-Zz6e5WRpziO7Z+4rbEs8GHNNBf1UuttniLp6/RvwPSQRaD8G04sdg4HcP/aDCY1KGMwivkuDPc2Bsgs6j+rD7Q==", + "requires": { + "@material/animation": "0.41.0", + "@material/base": "0.41.0", + "@material/ripple": "0.41.0", + "@material/rtl": "0.40.1", + "@material/selection-control": "0.41.0", + "@material/theme": "0.41.0" + } + }, + "@material/elevation": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-0.41.0.tgz", + "integrity": "sha512-ZtZS8z5ie9c7Cx5PVudgSorGYa0C3lu3dA+Nn6qJdhGUokl01msh54NfNuwk+EZsk65bNRRqw1Td/63TCbKIzg==", + "requires": { + "@material/animation": "0.41.0", + "@material/theme": "0.41.0" + } + }, + "@material/floating-label": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-0.41.0.tgz", + "integrity": "sha512-qI6f1nZU3crXxWAI9fw3U5fHw2qOzEor49EvskbcaV5KSRW5qO+jtfUQ3ib/Vhki7lqhgwNHB/0n7KYhvhjRHQ==", + "requires": { + "@material/animation": "0.41.0", + "@material/base": "0.41.0", + "@material/rtl": "0.40.1", + "@material/theme": "0.41.0", + "@material/typography": "0.41.0" + } + }, + "@material/line-ripple": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-0.41.0.tgz", + "integrity": "sha512-5DDIoC3d78fCLhNgle7DRFojT3D2SF+XVpUd3g6yLZmybHB7832p4bgl/qGpbIXwk1wAQA1dkUgKH5foxorjNQ==", + "requires": { + "@material/animation": "0.41.0", + "@material/base": "0.41.0", + "@material/theme": "0.41.0" + } + }, + "@material/notched-outline": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-0.41.0.tgz", + "integrity": "sha512-nQBkOXvkd5G9FeJ9UuecZh88WRgTsnGVvfj7UFJZEkvkzZwLBGUiJS6fF9FYraih3ZFgmphdbJxXEd9af3cqyQ==", + "requires": { + "@material/animation": "0.41.0", + "@material/base": "0.41.0", + "@material/rtl": "0.40.1", + "@material/shape": "0.41.0", + "@material/theme": "0.41.0" + } + }, + "@material/react-button": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@material/react-button/-/react-button-0.8.0.tgz", + "integrity": "sha512-j/wk/HK2A3/mb+yFdYCbkWFi6hYvvq4fc4t1M3aRLgdeddMNn/+FHOu014dyKeFW93RrBn1WAdQTwCc31KivuQ==", + "requires": { + "@material/button": "0.41.0", + "@material/react-ripple": "0.8.0", + "classnames": "2.2.6", + "react": "16.7.0" + } + }, + "@material/react-checkbox": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@material/react-checkbox/-/react-checkbox-0.8.0.tgz", + "integrity": "sha512-/7wQcFovUa04/T0MnJOnrbGn21CgxSSWjqkbMPFh/RjET8vya/kqAjhkLw51Mk4q6si+nfHljM6YSFvvXbUBBw==", + "requires": { + "@material/checkbox": "0.41.0", + "@material/react-ripple": "0.8.0", + "classnames": "2.2.6", + "react": "16.7.0" + } + }, + "@material/react-floating-label": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@material/react-floating-label/-/react-floating-label-0.8.0.tgz", + "integrity": "sha512-Bfa+/4nLFu6YE0pAB1wG+vxwYiFvHcOKIq7uAB/IY0/N/ONKM2Jh74/KKqLvNJI608YpZqLAqmZu87R3K15rNQ==", + "requires": { + "@material/floating-label": "0.41.0", + "classnames": "2.2.6", + "react": "16.7.0" + } + }, + "@material/react-line-ripple": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@material/react-line-ripple/-/react-line-ripple-0.8.0.tgz", + "integrity": "sha512-s921awUm8taB/kbETGN/vEEZV1WUwtTcsNkQ//HsK2fJW7lKuyVWrObc8ZhMFWljVEUj54ANmRvCke7M4/LSmA==", + "requires": { + "@material/line-ripple": "0.41.0", + "classnames": "2.2.6", + "react": "16.7.0" + } + }, + "@material/react-notched-outline": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@material/react-notched-outline/-/react-notched-outline-0.8.0.tgz", + "integrity": "sha512-fQ8hHGOQ3dpk9AuuQqXbCAN2UTuRr5LCztkDxdCwvaPC+oR5meTd8RW7RkJgx/MeiSLe/1/2EMz+9lP+V0rx2w==", + "requires": { + "@material/notched-outline": "0.41.0", + "classnames": "2.2.6", + "react": "16.7.0" + } + }, + "@material/react-ripple": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@material/react-ripple/-/react-ripple-0.8.0.tgz", + "integrity": "sha512-ThH9Px42poicRXgFBTfLjbAsVIUi6wmX4RszDPwiSTVMQYc785n240VAD8MfVCR27ykIxCrys/YibqxvREvjUQ==", + "requires": { + "@material/ripple": "0.41.0", + "classnames": "2.2.6", + "react": "16.7.0" + } + }, + "@material/react-text-field": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@material/react-text-field/-/react-text-field-0.8.0.tgz", + "integrity": "sha512-eISr4YIBmsIarQQU/LhAPfB9M8srY8Tzagqw6E2z5JyHux8eHlsMWSuYD6eh4FiQekdZoIgoJjlFIGhOvNV59Q==", + "requires": { + "@material/react-floating-label": "0.8.0", + "@material/react-line-ripple": "0.8.0", + "@material/react-notched-outline": "0.8.0", + "@material/textfield": "0.41.0", + "classnames": "2.2.6", + "react": "16.7.0" + } + }, + "@material/ripple": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-0.41.0.tgz", + "integrity": "sha512-rxEUVWM4AByDlTCH0kkthZQmUuY6eeN0X6cOHBoioFN2vUDk0D0Nfzz/N9FF2AlAf8C2lDDLrTuqnJPVIn+NHA==", + "requires": { + "@material/animation": "0.41.0", + "@material/base": "0.41.0", + "@material/theme": "0.41.0" + } + }, + "@material/rtl": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-0.40.1.tgz", + "integrity": "sha512-Pk6Iw1/KrhWZoZtkDsPMDUW0bm7Z1zeXb3MTQRCFmjf1wU5cRxgOTtuoZLcJqlcKGppLAzJL/TJV3E7KEiuL0A==" + }, + "@material/selection-control": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/selection-control/-/selection-control-0.41.0.tgz", + "integrity": "sha512-rRHGiZVPoP4nxAAoeqsgTsxz9GwInGs7HIlEhPfMFygmSZVUHHsuOJXSTpOKYi8GCoKHpB0RKZsAtxM0BYAelw==", + "requires": { + "@material/ripple": "0.41.0" + } + }, + "@material/shape": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-0.41.0.tgz", + "integrity": "sha512-k1K3CjOVxclfb/0r28cOa2oJpP7QMA2fP0SOS3Vh8ale5Q2jkaHTL60KX8VkHvV6rMqShpXW+60gPjoz5XRbDQ==" + }, + "@material/textfield": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-0.41.0.tgz", + "integrity": "sha512-kJ52W2gxOS2xfpreVhvHQ1u3UkiDl58duw9HkhEkK5Oi1bSDOtbnlWy0pGTOiAma5ZQgetPNgoa+T0zMBptfnw==", + "requires": { + "@material/animation": "0.41.0", + "@material/base": "0.41.0", + "@material/floating-label": "0.41.0", + "@material/line-ripple": "0.41.0", + "@material/notched-outline": "0.41.0", + "@material/ripple": "0.41.0", + "@material/rtl": "0.40.1", + "@material/shape": "0.41.0", + "@material/theme": "0.41.0", + "@material/typography": "0.41.0" + } + }, + "@material/theme": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-0.41.0.tgz", + "integrity": "sha512-ohW2JxObKOWvP34EkIIcrEVtL3g0Gs/T3/MdOsM36euyshY8Jwl1f6fjVUQvVjSpixUtSb30/+ulblF8fTOwBg==" + }, + "@material/typography": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-0.41.0.tgz", + "integrity": "sha512-15dlqSU+9uGcWdg4KXXcmDzTKJPb7/5Z9kmooONb2Laot1uiuntDXQS0yL+U2FYLW5Ros+WVMosDBKFruWx68A==" + }, + "@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.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "@svgr/core": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-2.4.1.tgz", + "integrity": "sha512-2i1cUbjpKt1KcIP05e10vkmu9Aedp32EFqVcSQ08onbB8lVxJqMPci3Hr54aI14S9cLg4JdcpO0D35HHUtT8oQ==", + "requires": { + "camelcase": "5.0.0", + "cosmiconfig": "5.0.7", + "h2x-core": "1.1.1", + "h2x-plugin-jsx": "1.2.0", + "merge-deep": "3.0.2", + "prettier": "1.15.3", + "svgo": "1.1.1" + } + }, + "@svgr/webpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-2.4.1.tgz", + "integrity": "sha512-sMHYq0zbMtSHcc9kVfkYI2zrl88u4mKGyQLgKt7r+ul5nITcncm/EPBhzEUrJY5izdlaU6EvyH8zOhZnfaSmOA==", + "requires": { + "@babel/core": "7.1.6", + "@babel/plugin-transform-react-constant-elements": "7.2.0", + "@babel/preset-env": "7.2.3", + "@babel/preset-react": "7.0.0", + "@svgr/core": "2.4.1", + "loader-utils": "1.2.3" + } + }, + "@types/classnames": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.7.tgz", + "integrity": "sha512-rzOhiQ55WzAiFgXRtitP/ZUT8iVNyllEpylJ5zHzR4vArUvMB39GTk+Zon/uAM0JxEFAWnwsxC2gH8s+tZ3Myg==" + }, + "@types/history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", + "integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==" + }, + "@types/jss": { + "version": "9.5.7", + "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.7.tgz", + "integrity": "sha512-OZimStu2QdDMtZ0h72JXqvLVbWUjXd5ZLk8vxLmfuC/nM1AabRyyGoxSufnzixrbpEcVcyy/JV5qeQu2JnjVZw==", + "requires": { + "csstype": "2.6.0", + "indefinite-observable": "1.0.2" + } + }, + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + }, + "@types/node-sass": { + "version": "3.10.32", + "resolved": "https://registry.npmjs.org/@types/node-sass/-/node-sass-3.10.32.tgz", + "integrity": "sha1-spbM5xRP+rd7hAkMqtTx5Lvqjgk=", + "requires": { + "@types/node": "10.12.18" + } + }, + "@types/prop-types": { + "version": "15.5.8", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz", + "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==" + }, + "@types/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", + "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" + }, + "@types/qrcode.react": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-0.8.1.tgz", + "integrity": "sha512-OpMOBjWIMTnC1sdLcFgif/cXZYiPQGUN2yDaxC2EmZaAmElxehE+toMzPZvUJVXNyFXFdmYSDRWsjKtTTnqqAQ==", + "requires": { + "@types/react": "16.7.18" + } + }, + "@types/query-string": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@types/query-string/-/query-string-6.2.0.tgz", + "integrity": "sha512-dnYqKg7eZ+t7ZhCuBtwLxjqON8yXr27hiu3zXfPqxfJSbWUZNwwISE0BJUxghlcKsk4lZSp7bdFSJBJVNWBfmA==" + }, + "@types/react": { + "version": "16.7.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.18.tgz", + "integrity": "sha512-Tx4uu3ppK53/iHk6VpamMP3f3ahfDLEVt3ZQc8TFm30a1H3v9lMsCntBREswZIW/SKrvJjkb3Hq8UwO6GREBng==", + "requires": { + "@types/prop-types": "15.5.8", + "csstype": "2.6.0" + } + }, + "@types/react-dom": { + "version": "16.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.11.tgz", + "integrity": "sha512-x6zUx9/42B5Kl2Vl9HlopV8JF64wLpX3c+Pst9kc1HgzrsH+mkehe/zmHMQTplIrR48H2gpU7ZqurQolYu8XBA==", + "requires": { + "@types/react": "16.7.18" + } + }, + "@types/react-redux": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-6.0.12.tgz", + "integrity": "sha512-fvcpm7cfW/JMflRdZgegCVbSGYt/hyEWQKriesaLZDRDjBGKQsAiui08VCQg5lBpocPmulVGKFhICtOAcMUPOQ==", + "requires": { + "@types/react": "16.7.18", + "redux": "4.0.1" + } + }, + "@types/react-router": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-4.4.3.tgz", + "integrity": "sha512-8GmjakEBFNCLJbpg9jtDp1EDvFP0VkIPPKBpVwmB3Q+9whFoHu8rluMUXUE5SoGkEQvVOtgJzWmUsJojNpFMQQ==", + "requires": { + "@types/history": "4.7.2", + "@types/react": "16.7.18" + } + }, + "@types/react-router-dom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.1.tgz", + "integrity": "sha512-GbztJAScOmQ/7RsQfO4cd55RuH1W4g6V1gDW3j4riLlt+8yxYLqqsiMzmyuXBLzdFmDtX/uU2Bpcm0cmudv44A==", + "requires": { + "@types/history": "4.7.2", + "@types/react": "16.7.18", + "@types/react-router": "4.4.3" + } + }, + "@types/redux-thunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/redux-thunk/-/redux-thunk-2.1.0.tgz", + "integrity": "sha1-vCtulylhgxr7gqm/TwZybjUflBY=", + "requires": { + "redux-thunk": "2.3.0" + } + }, + "@types/tapable": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", + "integrity": "sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==" + }, + "@webassemblyjs/ast": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", + "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==", + "requires": { + "@webassemblyjs/helper-module-context": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/wast-parser": "1.7.6", + "mamacro": "0.0.3" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz", + "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz", + "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz", + "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz", + "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==", + "requires": { + "@webassemblyjs/wast-printer": "1.7.6" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz", + "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz", + "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", + "requires": { + "mamacro": "0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz", + "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz", + "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-buffer": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/wasm-gen": "1.7.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz", + "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", + "requires": { + "@xtuc/ieee754": "1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz", + "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==", + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz", + "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz", + "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-buffer": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/helper-wasm-section": "1.7.6", + "@webassemblyjs/wasm-gen": "1.7.6", + "@webassemblyjs/wasm-opt": "1.7.6", + "@webassemblyjs/wasm-parser": "1.7.6", + "@webassemblyjs/wast-printer": "1.7.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz", + "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/ieee754": "1.7.6", + "@webassemblyjs/leb128": "1.7.6", + "@webassemblyjs/utf8": "1.7.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz", + "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-buffer": "1.7.6", + "@webassemblyjs/wasm-gen": "1.7.6", + "@webassemblyjs/wasm-parser": "1.7.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz", + "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-api-error": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/ieee754": "1.7.6", + "@webassemblyjs/leb128": "1.7.6", + "@webassemblyjs/utf8": "1.7.6" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz", + "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/floating-point-hex-parser": "1.7.6", + "@webassemblyjs/helper-api-error": "1.7.6", + "@webassemblyjs/helper-code-frame": "1.7.6", + "@webassemblyjs/helper-fsm": "1.7.6", + "@xtuc/long": "4.2.1", + "mamacro": "0.0.3" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz", + "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/wast-parser": "1.7.6", + "@xtuc/long": "4.2.1" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==" + }, + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.21", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", + "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==" + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "requires": { + "acorn": "5.7.3" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + } + } + }, + "acorn-globals": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "requires": { + "acorn": "6.0.5", + "acorn-walk": "6.1.1" + } + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" + }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==" + }, + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + }, + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "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.3" + } + }, + "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.10", + "normalize-path": "2.1.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "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.1" + } + } + } + }, + "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" + } + }, + "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.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.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.2.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.6" + } + } + } + }, + "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.2.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.6" + } + } + } + }, + "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.1.0" + } + }, + "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==" + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.2" + } + }, + "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.1" + } + } + } + }, + "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.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.1" + } + } + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "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.2.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.6" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "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.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "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.3.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.3" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "requires": { + "ast-types-flow": "0.0.7", + "commander": "2.19.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.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-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "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-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "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.3" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "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.2" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "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=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "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": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "requires": { + "lodash": "4.17.11" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "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.4.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.4.tgz", + "integrity": "sha512-7tpjBadJyHKf+gOJEmKhZIksWxdZCSrnKbbTJNsw+/zX9+f//DLELRQPWjjjVoDbbWlCuNRkN7RfmZwDVgWMLw==", + "requires": { + "browserslist": "4.3.7", + "caniuse-lite": "1.0.30000927", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "await-to-js": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/await-to-js/-/await-to-js-2.1.1.tgz", + "integrity": "sha512-CHBC6gQGCIzjZ09tJ+XmpQoZOn4GdWePB4qUweCaKNJ0D3f115YdhmYVTZ4rMVpiJ3cFzZcTYK1VMYEICV4YXw==" + }, + "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.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" + }, + "babel-eslint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", + "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "requires": { + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.2.3", + "@babel/traverse": "7.2.3", + "@babel/types": "7.2.2", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0" + } + }, + "babel-extract-comments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", + "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", + "requires": { + "babylon": "6.18.0" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + } + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-jest": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", + "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", + "requires": { + "babel-plugin-istanbul": "4.1.6", + "babel-preset-jest": "23.2.0" + } + }, + "babel-loader": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz", + "integrity": "sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw==", + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.2.3", + "mkdirp": "0.5.1", + "util.promisify": "1.0.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", + "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==", + "requires": { + "object.assign": "4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "find-up": "2.1.0", + "istanbul-lib-instrument": "1.10.2", + "test-exclude": "4.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=" + }, + "babel-plugin-macros": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz", + "integrity": "sha512-NBVpEWN4OQ/bHnu1fyDaAaTPAjnhXCEPqr1RwqxrU7b6tZ2hypp+zX4hlNfmVGfClD5c3Sl6Hfj5TJNF5VG5aA==", + "requires": { + "cosmiconfig": "5.0.7", + "resolve": "1.8.1" + } + }, + "babel-plugin-named-asset-import": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.0.tgz", + "integrity": "sha512-to6Shd/r8fMRRg/MaOhDNfqpuXfjlQx3ypWDG6jh4ESCVZDJCgdgIalZbrnVlBPGgH/QeyHMjnGb2W+JJiy+NQ==" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.20.tgz", + "integrity": "sha512-bWQ8e7LsgdFpyHU/RabjDAjVhL7KLAJXEt0nb0LANFje8YAGA8RlZv88a72aCswOxELWULkYuJqfFoKgs58Tng==" + }, + "babel-preset-jest": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", + "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "requires": { + "babel-plugin-jest-hoist": "23.2.0", + "babel-plugin-syntax-object-rest-spread": "6.13.0" + } + }, + "babel-preset-react-app": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-7.0.0.tgz", + "integrity": "sha512-LQKCB3xxdhAlRbk6IIZdO4ry1yA8gKGVV4phjOIgCEQr3oyaLPXf2j+lfD0zljOE2wkN2axRGOLTzdUPzVDO4w==", + "requires": { + "@babel/core": "7.1.6", + "@babel/plugin-proposal-class-properties": "7.1.0", + "@babel/plugin-proposal-decorators": "7.1.6", + "@babel/plugin-proposal-object-rest-spread": "7.0.0", + "@babel/plugin-syntax-dynamic-import": "7.0.0", + "@babel/plugin-transform-classes": "7.1.0", + "@babel/plugin-transform-destructuring": "7.1.3", + "@babel/plugin-transform-flow-strip-types": "7.1.6", + "@babel/plugin-transform-react-constant-elements": "7.0.0", + "@babel/plugin-transform-react-display-name": "7.0.0", + "@babel/plugin-transform-runtime": "7.1.0", + "@babel/preset-env": "7.1.6", + "@babel/preset-react": "7.0.0", + "@babel/preset-typescript": "7.1.0", + "@babel/runtime": "7.1.5", + "babel-loader": "8.0.4", + "babel-plugin-dynamic-import-node": "2.2.0", + "babel-plugin-macros": "2.4.2", + "babel-plugin-transform-react-remove-prop-types": "0.4.20" + }, + "dependencies": { + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz", + "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz", + "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-define-map": "7.1.0", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-optimise-call-expression": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.2.3", + "@babel/helper-split-export-declaration": "7.0.0", + "globals": "11.10.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz", + "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.0.0.tgz", + "integrity": "sha512-z8yrW4KCVcqPYr0r9dHXe7fu3daLzn0r6TQEFoGbXahdrzEwT1d1ux+/EnFcqIHv9uPilUlnRnPIUf7GMO0ehg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", + "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==", + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, + "@babel/preset-env": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.6.tgz", + "integrity": "sha512-YIBfpJNQMBkb6MCkjz/A9J76SNCSuGVamOVBgoUkLzpJD/z8ghHi9I42LQ4pulVX68N/MmImz6ZTixt7Azgexw==", + "requires": { + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-proposal-async-generator-functions": "7.2.0", + "@babel/plugin-proposal-json-strings": "7.2.0", + "@babel/plugin-proposal-object-rest-spread": "7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "7.2.0", + "@babel/plugin-syntax-async-generators": "7.2.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "7.2.0", + "@babel/plugin-transform-arrow-functions": "7.2.0", + "@babel/plugin-transform-async-to-generator": "7.2.0", + "@babel/plugin-transform-block-scoped-functions": "7.2.0", + "@babel/plugin-transform-block-scoping": "7.2.0", + "@babel/plugin-transform-classes": "7.1.0", + "@babel/plugin-transform-computed-properties": "7.2.0", + "@babel/plugin-transform-destructuring": "7.1.3", + "@babel/plugin-transform-dotall-regex": "7.2.0", + "@babel/plugin-transform-duplicate-keys": "7.2.0", + "@babel/plugin-transform-exponentiation-operator": "7.2.0", + "@babel/plugin-transform-for-of": "7.2.0", + "@babel/plugin-transform-function-name": "7.2.0", + "@babel/plugin-transform-literals": "7.2.0", + "@babel/plugin-transform-modules-amd": "7.2.0", + "@babel/plugin-transform-modules-commonjs": "7.2.0", + "@babel/plugin-transform-modules-systemjs": "7.2.0", + "@babel/plugin-transform-modules-umd": "7.2.0", + "@babel/plugin-transform-new-target": "7.0.0", + "@babel/plugin-transform-object-super": "7.2.0", + "@babel/plugin-transform-parameters": "7.2.0", + "@babel/plugin-transform-regenerator": "7.0.0", + "@babel/plugin-transform-shorthand-properties": "7.2.0", + "@babel/plugin-transform-spread": "7.2.2", + "@babel/plugin-transform-sticky-regex": "7.2.0", + "@babel/plugin-transform-template-literals": "7.2.0", + "@babel/plugin-transform-typeof-symbol": "7.2.0", + "@babel/plugin-transform-unicode-regex": "7.2.0", + "browserslist": "4.3.7", + "invariant": "2.2.4", + "js-levenshtein": "1.1.5", + "semver": "5.6.0" + } + }, + "@babel/runtime": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.5.tgz", + "integrity": "sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==", + "requires": { + "regenerator-runtime": "0.12.1" + } + } + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.6.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.11", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + }, + "dependencies": { + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.6.0", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "core-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", + "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" + }, + "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" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.6.1", + "regenerator-runtime": "0.11.1" + }, + "dependencies": { + "core-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", + "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.11" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.11" + }, + "dependencies": { + "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" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "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.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "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.2" + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "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.5" + } + }, + "bfj": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", + "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", + "requires": { + "bluebird": "3.5.3", + "check-types": "7.4.0", + "hoopy": "0.1.4", + "tryer": "1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==" + }, + "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.3" + } + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + }, + "dependencies": { + "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" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "2.1.2", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "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": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.3" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "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.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "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.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "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.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" + } + }, + "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.7" + } + }, + "browserslist": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.7.tgz", + "integrity": "sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ==", + "requires": { + "caniuse-lite": "1.0.30000927", + "electron-to-chromium": "1.3.100", + "node-releases": "1.1.3" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "requires": { + "node-int64": "0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "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-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "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=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "requires": { + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "3.0.3" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "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" + } + }, + "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=" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + }, + "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.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "4.3.7", + "caniuse-lite": "1.0.30000927", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000927", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000927.tgz", + "integrity": "sha512-ogq4NbUWf1uG/j66k0AmiO3GjqJAlQyF8n4w8a954cbCyFKmYGvRtgz6qkq2fWuduTXHibX7GyYL5Pg58Aks2g==" + }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "requires": { + "rsvp": "3.6.2" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz", + "integrity": "sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "check-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", + "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==" + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.1.0" + }, + "dependencies": { + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "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.1" + } + }, + "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.1" + } + }, + "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.2" + }, + "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.1" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "2.1.1" + } + }, + "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.2.2" + } + } + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "requires": { + "tslib": "1.9.3" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "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.3", + "safe-buffer": "5.1.2" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" + }, + "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.1", + "static-extend": "0.1.2" + }, + "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.6" + } + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "requires": { + "source-map": "0.6.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==" + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "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.1.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" + } + } + } + }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "requires": { + "for-own": "0.1.5", + "is-plain-object": "2.0.4", + "kind-of": "3.2.2", + "lazy-cache": "1.0.4", + "shallow-clone": "0.1.2" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "1.5.1", + "chalk": "2.4.1", + "q": "1.5.1" + } + }, + "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=" + }, + "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.1" + } + }, + "color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", + "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "requires": { + "color-convert": "1.9.3", + "color-string": "1.5.3" + } + }, + "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-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "1.1.3", + "simple-swizzle": "0.2.2" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "compressible": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", + "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "requires": { + "mime-db": "1.37.0" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.15", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "confusing-browser-globals": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.5.tgz", + "integrity": "sha512-tHo1tQL/9Ox5RELbkCAJhnViqWlzBz3MG1bB2czbHjH2mWd4aYUgNCNLfysFL7c4LoDws7pjg2tj48Gmpw4QHA==" + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "connected-react-router": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-6.2.1.tgz", + "integrity": "sha512-7QFs0wPYvwrzA7NptHx0DgblNA/nVErX0TUjTiOCwXSaqj/1Ng+nEmEczrfdA8gw7kIzFIa08WJGMymdb7bAZA==", + "requires": { + "immutable": "3.8.2", + "seamless-immutable": "7.1.4" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "0.1.4" + } + }, + "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=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "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.0.7", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", + "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "requires": { + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.12.1", + "parse-json": "4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1" + } + }, + "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.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "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.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "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.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "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.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "7.0.8", + "timsort": "0.3.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "css-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz", + "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==", + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.1", + "icss-utils": "2.1.0", + "loader-utils": "1.2.3", + "lodash.camelcase": "4.3.0", + "postcss": "6.0.23", + "postcss-modules-extract-imports": "1.2.1", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.1", + "source-list-map": "2.0.1" + } + }, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.2", + "domutils": "1.7.0", + "nth-check": "1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.2", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "requires": { + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "0.5.0" + } + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "requires": { + "mdn-data": "1.1.4", + "source-map": "0.5.7" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" + }, + "css-url-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=" + }, + "css-what": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==" + }, + "cssdb": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.3.0.tgz", + "integrity": "sha512-VHPES/+c9s+I0ryNj+PXvp84nz+ms843z/efpaEINwP/QfGsINL3gpLp5qjapzDNzNzbXxur8uxKxSXImrg4ag==" + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" + }, + "cssnano": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz", + "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==", + "requires": { + "cosmiconfig": "5.0.7", + "cssnano-preset-default": "4.0.6", + "is-resolvable": "1.1.0", + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz", + "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==", + "requires": { + "css-declaration-sorter": "4.0.1", + "cssnano-util-raw-cache": "4.0.1", + "postcss": "7.0.8", + "postcss-calc": "7.0.1", + "postcss-colormin": "4.0.2", + "postcss-convert-values": "4.0.1", + "postcss-discard-comments": "4.0.1", + "postcss-discard-duplicates": "4.0.2", + "postcss-discard-empty": "4.0.1", + "postcss-discard-overridden": "4.0.1", + "postcss-merge-longhand": "4.0.10", + "postcss-merge-rules": "4.0.2", + "postcss-minify-font-values": "4.0.2", + "postcss-minify-gradients": "4.0.1", + "postcss-minify-params": "4.0.1", + "postcss-minify-selectors": "4.0.1", + "postcss-normalize-charset": "4.0.1", + "postcss-normalize-display-values": "4.0.1", + "postcss-normalize-positions": "4.0.1", + "postcss-normalize-repeat-style": "4.0.1", + "postcss-normalize-string": "4.0.1", + "postcss-normalize-timing-functions": "4.0.1", + "postcss-normalize-unicode": "4.0.1", + "postcss-normalize-url": "4.0.1", + "postcss-normalize-whitespace": "4.0.1", + "postcss-ordered-values": "4.1.1", + "postcss-reduce-initial": "4.0.2", + "postcss-reduce-transforms": "4.0.1", + "postcss-svgo": "4.0.1", + "postcss-unique-selectors": "4.0.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "requires": { + "mdn-data": "1.1.4", + "source-map": "0.5.7" + } + } + } + }, + "cssom": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==" + }, + "cssstyle": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", + "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", + "requires": { + "cssom": "0.3.4" + } + }, + "csstype": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.0.tgz", + "integrity": "sha512-by8hi8BlLbowQq0qtkx54d9aN73R9oUW20HISpka5kmgsR9F7nnxgfsemuR2sdCKZh+CDNf5egW9UZMm4mgJRg==" + }, + "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.2" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, + "damerau-levenshtein": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", + "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=" + }, + "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" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "requires": { + "abab": "2.0.0", + "whatwg-mimetype": "2.3.0", + "whatwg-url": "7.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "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=" + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "default-gateway": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", + "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "requires": { + "execa": "0.10.0", + "ip-regex": "2.1.0" + }, + "dependencies": { + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + } + } + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "requires": { + "strip-bom": "2.0.0" + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "1.0.2", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "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=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "2.0.1" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "1.0.3", + "debug": "2.6.9" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "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.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dir-glob": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.0.tgz", + "integrity": "sha512-YqrO+bduKFqPgspvpjDAaKk0qhmvY+SY7NjIRljCDAy6CX7Ft65irIduHbrYXhy+BxJnYKjWuREw6X42w9/+DQ==", + "requires": { + "path-type": "3.0.0" + }, + "dependencies": { + "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" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "0.4.0" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.2" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "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==" + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "requires": { + "webidl-conversions": "4.0.2" + } + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "requires": { + "domelementtype": "1.3.1" + } + }, + "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.1.0", + "domelementtype": "1.3.1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "1.0.1" + } + }, + "dotenv": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz", + "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==" + }, + "dotenv-expand": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", + "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=" + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexify": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", + "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.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.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.100.tgz", + "integrity": "sha512-cEUzis2g/RatrVf8x26L8lK5VEls1AGnLHk6msluBUg/NTB4wcXzExTsGscFq+Vs4WBBU2zbLLySvD4C0C3hwg==" + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==" + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "requires": { + "graceful-fs": "4.1.15", + "memory-fs": "0.4.1", + "tapable": "1.1.1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "1.0.1" + } + }, + "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" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "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=" + }, + "escodegen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "eslint": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz", + "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==", + "requires": { + "@babel/code-frame": "7.0.0", + "ajv": "6.6.2", + "chalk": "2.4.1", + "cross-spawn": "6.0.5", + "debug": "3.2.6", + "doctrine": "2.1.0", + "eslint-scope": "4.0.0", + "eslint-utils": "1.3.1", + "eslint-visitor-keys": "1.0.0", + "espree": "4.1.0", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.3", + "globals": "11.10.0", + "ignore": "4.0.6", + "imurmurhash": "0.1.4", + "inquirer": "6.2.1", + "is-resolvable": "1.1.0", + "js-yaml": "3.12.1", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.3", + "regexpp": "2.0.1", + "require-uncached": "1.0.3", + "semver": "5.6.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.3", + "text-table": "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=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "2.1.1" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.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" + } + } + } + }, + "eslint-config-react-app": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.6.tgz", + "integrity": "sha512-VL5rA1EBZv7f9toc9x71or7nr4jRmwCH4V9JKB9DFVaTLOLI9+vjWLgQLjMu3xR9iUT80dty86RbCfNaKyrFFg==", + "requires": { + "confusing-browser-globals": "1.0.5" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "requires": { + "debug": "2.6.9", + "resolve": "1.8.1" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz", + "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==", + "requires": { + "loader-fs-cache": "1.0.1", + "loader-utils": "1.2.3", + "object-assign": "4.1.1", + "object-hash": "1.3.1", + "rimraf": "2.6.3" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "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" + } + }, + "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.1.0", + "pinkie-promise": "2.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "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.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "2.50.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz", + "integrity": "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ==", + "requires": { + "lodash": "4.17.11" + } + }, + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "requires": { + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.2.0", + "has": "1.0.3", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0", + "resolve": "1.8.1" + }, + "dependencies": { + "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" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "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.3.2" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", + "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", + "requires": { + "aria-query": "3.0.0", + "array-includes": "3.0.3", + "ast-types-flow": "0.0.7", + "axobject-query": "2.0.2", + "damerau-levenshtein": "1.0.4", + "emoji-regex": "6.5.1", + "has": "1.0.3", + "jsx-ast-utils": "2.0.1" + } + }, + "eslint-plugin-react": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", + "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", + "requires": { + "array-includes": "3.0.3", + "doctrine": "2.1.0", + "has": "1.0.3", + "jsx-ast-utils": "2.0.1", + "prop-types": "15.6.2" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==" + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "requires": { + "acorn": "6.0.5", + "acorn-jsx": "5.0.1", + "eslint-visitor-keys": "1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "requires": { + "original": "1.0.2" + } + }, + "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.5", + "safe-buffer": "5.1.2" + } + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "requires": { + "merge": "1.2.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.4" + } + }, + "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" + } + }, + "expect": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", + "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", + "requires": { + "ansi-styles": "3.2.1", + "jest-diff": "23.6.0", + "jest-get-type": "22.4.3", + "jest-matcher-utils": "23.6.0", + "jest-message-util": "23.4.0", + "jest-regex-util": "23.3.0" + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.4", + "qs": "6.5.2", + "range-parser": "1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + } + } + }, + "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" + } + } + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-glob": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", + "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "requires": { + "@mrmlnc/readdir-enhanced": "2.2.1", + "@nodelib/fs.stat": "1.1.3", + "glob-parent": "3.1.0", + "is-glob": "4.0.0", + "merge2": "1.2.3", + "micromatch": "3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "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.1" + } + } + } + }, + "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" + } + }, + "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.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.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.2.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.6" + } + } + } + }, + "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.2.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.6" + } + } + } + }, + "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.1.0" + } + }, + "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==" + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.2" + } + }, + "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.1" + } + } + } + }, + "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.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.1" + } + } + } + }, + "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.2" + }, + "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.1" + } + } + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "2.1.1" + } + }, + "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.2.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.6" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "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.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "requires": { + "websocket-driver": "0.7.0" + } + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "2.0.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "requires": { + "flat-cache": "1.3.4", + "object-assign": "4.1.1" + } + }, + "file-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", + "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "requires": { + "glob": "7.1.3", + "minimatch": "3.0.4" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.1", + "repeat-element": "1.1.3", + "repeat-string": "1.6.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "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" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "requires": { + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" + } + }, + "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" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "requires": { + "circular-json": "0.3.3", + "graceful-fs": "4.1.15", + "rimraf": "2.6.3", + "write": "0.2.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "follow-redirects": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", + "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "fork-ts-checker-webpack-plugin-alt": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin-alt/-/fork-ts-checker-webpack-plugin-alt-0.4.14.tgz", + "integrity": "sha512-s0wjOBuPdylMRBzZ4yO8LSJuzem3g0MYZFxsjRXrFDQyL5KJBVSq30+GoHM/t/r2CRU4tI6zi04sq6OXK0UYnw==", + "requires": { + "babel-code-frame": "6.26.0", + "chalk": "2.4.1", + "chokidar": "2.0.4", + "lodash": "4.17.11", + "micromatch": "3.1.10", + "minimatch": "3.0.4", + "resolve": "1.8.1", + "tapable": "1.1.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "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.1" + } + } + } + }, + "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" + } + }, + "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.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.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.2.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.6" + } + } + } + }, + "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.2.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.6" + } + } + } + }, + "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.1.0" + } + }, + "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==" + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.2" + } + }, + "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.1" + } + } + } + }, + "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.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.1" + } + } + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "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.2.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.6" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "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.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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.7", + "mime-types": "2.1.21" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "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" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-extra": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "4.1.15", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "optional": true, + "requires": { + "nan": "2.12.1", + "node-pre-gyp": "0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "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.2" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "optional": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "4.1.15", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.3" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + }, + "dependencies": { + "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.1" + } + }, + "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.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "1.2.1" + } + }, + "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-own-enumerable-property-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", + "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "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.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "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=" + }, + "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.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" + } + }, + "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.5", + "is-windows": "1.0.2", + "which": "1.3.1" + } + }, + "globals": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", + "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==" + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.2.0", + "fast-glob": "2.2.6", + "glob": "7.1.3", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" + }, + "dependencies": { + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "requires": { + "glob": "7.1.3", + "lodash": "4.17.11", + "minimatch": "3.0.4" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "gzip-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", + "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "requires": { + "duplexer": "0.1.1", + "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=" + } + } + }, + "h2x-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/h2x-core/-/h2x-core-1.1.1.tgz", + "integrity": "sha512-LdXe4Irs731knLtHgLyFrnJCumfiqXXQwKN1IMUhi37li29PLfLbMDvfK7Rk4wmgHLKP+sIITT1mcJV4QsC3nw==", + "requires": { + "h2x-generate": "1.1.0", + "h2x-parse": "1.1.1", + "h2x-traverse": "1.1.0" + } + }, + "h2x-generate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/h2x-generate/-/h2x-generate-1.1.0.tgz", + "integrity": "sha512-L7Hym0yb20QIjvqeULUPOeh/cyvScdOAyJ6oRlh5dF0+w92hf3OiTk1q15KBijde7jGEe+0R4aOmtW8gkPNIzg==", + "requires": { + "h2x-traverse": "1.1.0" + } + }, + "h2x-parse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/h2x-parse/-/h2x-parse-1.1.1.tgz", + "integrity": "sha512-WRSmPF+tIWuUXVEZaYRhcZx/JGEJx8LjZpDDtrvMr5m/GTR0NerydCik5dRzcKXPWCtfXxuJRLR4v2P4HB2B1A==", + "requires": { + "h2x-types": "1.1.0", + "jsdom": "13.1.0" + } + }, + "h2x-plugin-jsx": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/h2x-plugin-jsx/-/h2x-plugin-jsx-1.2.0.tgz", + "integrity": "sha512-a7Vb3BHhJJq0dPDNdqguEyQirENkVsFtvM2YkiaT5h/fmGhmM1nDy3BLeJeSKi2tL2g9v4ykm2Z+GG9QrhDgPA==", + "requires": { + "h2x-types": "1.1.0" + } + }, + "h2x-traverse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/h2x-traverse/-/h2x-traverse-1.1.0.tgz", + "integrity": "sha512-1ND8ZbISLSUgpLHYJRvhvElITvs0g44L7RxjeXViz5XP6rooa+FtXTFLByl2Yg01zj2txubifHIuU4pgvj8l+A==", + "requires": { + "h2x-types": "1.1.0" + } + }, + "h2x-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/h2x-types/-/h2x-types-1.1.0.tgz", + "integrity": "sha512-QdH5qfLcdF209UsCdM0ZNZ9Dwm2PHvMfeLZtivBrjX3Y/df4US2pwsUC4HBfWhye/mx/t6puODeC7Oacb/Ol8g==" + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + }, + "handlebars": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "requires": { + "async": "2.6.1", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.4.9" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "6.6.2", + "har-schema": "2.0.0" + } + }, + "harmony-reflect": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", + "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" + }, + "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.1.1" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "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.1" + } + }, + "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": { + "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.2.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.6" + } + } + } + }, + "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.6" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "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" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", + "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "requires": { + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "resolve-pathname": "2.2.0", + "value-equal": "0.4.0", + "warning": "3.0.0" + }, + "dependencies": { + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "1.4.0" + } + } + } + }, + "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.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "hoist-non-react-statics": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz", + "integrity": "sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw==", + "requires": { + "react-is": "16.7.0" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "requires": { + "parse-passwd": "1.0.0" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "requires": { + "whatwg-encoding": "1.0.5" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.2.1", + "commander": "2.17.1", + "he": "1.2.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.9" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + } + } + }, + "html-webpack-plugin": { + "version": "4.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-alpha.2.tgz", + "integrity": "sha512-tyvhjVpuGqD7QYHi1l1drMQTg5i+qRxpQEGbdnYFREgOKy7aFDf/ocQ/V1fuEDlQx7jV2zMap3Hj2nE9i5eGXw==", + "requires": { + "@types/tapable": "1.0.2", + "html-minifier": "3.5.21", + "loader-utils": "1.2.3", + "lodash": "4.17.11", + "pretty-error": "2.1.1", + "tapable": "1.1.1", + "util.promisify": "1.0.0" + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "requires": { + "domelementtype": "1.3.1", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "requires": { + "domelementtype": "1.3.1" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==" + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "requires": { + "eventemitter3": "3.1.0", + "follow-redirects": "1.6.1", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "requires": { + "http-proxy": "1.17.0", + "is-glob": "4.0.0", + "lodash": "4.17.11", + "micromatch": "3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "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.1" + } + } + } + }, + "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" + } + }, + "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.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.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.2.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.6" + } + } + } + }, + "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.2.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.6" + } + } + } + }, + "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.1.0" + } + }, + "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==" + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.2" + } + }, + "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.1" + } + } + } + }, + "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.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.1" + } + } + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "2.1.1" + } + }, + "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.2.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.6" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "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.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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.4.1", + "sshpk": "1.16.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=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "requires": { + "postcss": "6.0.23" + } + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "requires": { + "harmony-reflect": "1.6.1" + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "immer": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-1.7.2.tgz", + "integrity": "sha512-4Urocwu9+XLDJw4Tc6ZCg7APVjjLInCFvO4TwGsAYV5zT6YYSor14dsZR0+0tHlDIN92cFUOq+i7fC00G5vTxA==" + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "2.1.0" + } + }, + "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" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "3.0.0" + } + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + }, + "indefinite-observable": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-1.0.2.tgz", + "integrity": "sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==", + "requires": { + "symbol-observable": "1.2.0" + } + }, + "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.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "3.0.3", + "figures": "2.0.0", + "lodash": "4.17.11", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "6.3.3", + "string-width": "2.1.1", + "strip-ansi": "5.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "requires": { + "ansi-regex": "4.0.0" + } + } + } + }, + "internal-ip": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", + "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "requires": { + "default-gateway": "2.7.2", + "ipaddr.js": "1.8.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "1.4.0" + } + }, + "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=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "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.2.2" + } + }, + "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.12.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-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "requires": { + "ci-info": "1.6.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "0.0.4", + "hex-color-regex": "1.1.0", + "hsl-regex": "1.0.0", + "hsla-regex": "1.0.0", + "rgb-regex": "1.0.1", + "rgba-regex": "1.0.0" + } + }, + "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.2.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "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.1.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-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "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=" + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "1.0.2" + } + }, + "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-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.3" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", + "integrity": "sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "1.1.2" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "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-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "requires": { + "punycode": "2.1.1" + } + }, + "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=" + }, + "istanbul-api": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", + "requires": { + "async": "2.6.1", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.2.1", + "istanbul-lib-hook": "1.2.2", + "istanbul-lib-instrument": "1.10.2", + "istanbul-lib-report": "1.1.5", + "istanbul-lib-source-maps": "1.2.6", + "istanbul-reports": "1.5.1", + "js-yaml": "3.12.1", + "mkdirp": "0.5.1", + "once": "1.4.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==" + }, + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.1", + "semver": "5.6.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "requires": { + "istanbul-lib-coverage": "1.2.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.6", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "requires": { + "debug": "3.2.6", + "istanbul-lib-coverage": "1.2.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "2.1.1" + } + } + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "requires": { + "handlebars": "4.0.12" + } + }, + "jest": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", + "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", + "requires": { + "import-local": "1.0.0", + "jest-cli": "23.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "jest-cli": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", + "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "exit": "0.1.2", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "import-local": "1.0.0", + "is-ci": "1.2.1", + "istanbul-api": "1.3.7", + "istanbul-lib-coverage": "1.2.1", + "istanbul-lib-instrument": "1.10.2", + "istanbul-lib-source-maps": "1.2.6", + "jest-changed-files": "23.4.2", + "jest-config": "23.6.0", + "jest-environment-jsdom": "23.4.0", + "jest-get-type": "22.4.3", + "jest-haste-map": "23.6.0", + "jest-message-util": "23.4.0", + "jest-regex-util": "23.3.0", + "jest-resolve-dependencies": "23.6.0", + "jest-runner": "23.6.0", + "jest-runtime": "23.6.0", + "jest-snapshot": "23.6.0", + "jest-util": "23.4.0", + "jest-validate": "23.6.0", + "jest-watcher": "23.4.0", + "jest-worker": "23.2.0", + "micromatch": "2.3.11", + "node-notifier": "5.3.0", + "prompts": "0.1.14", + "realpath-native": "1.0.2", + "rimraf": "2.6.3", + "slash": "1.0.0", + "string-length": "2.0.0", + "strip-ansi": "4.0.0", + "which": "1.3.1", + "yargs": "11.1.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" + } + } + } + }, + "jest-changed-files": { + "version": "23.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", + "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", + "requires": { + "throat": "4.1.0" + } + }, + "jest-config": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", + "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", + "requires": { + "babel-core": "6.26.3", + "babel-jest": "23.6.0", + "chalk": "2.4.1", + "glob": "7.1.3", + "jest-environment-jsdom": "23.4.0", + "jest-environment-node": "23.4.0", + "jest-get-type": "22.4.3", + "jest-jasmine2": "23.6.0", + "jest-regex-util": "23.3.0", + "jest-resolve": "23.6.0", + "jest-util": "23.4.0", + "jest-validate": "23.6.0", + "micromatch": "2.3.11", + "pretty-format": "23.6.0" + }, + "dependencies": { + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.6.0", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "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" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "jest-diff": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", + "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", + "requires": { + "chalk": "2.4.1", + "diff": "3.5.0", + "jest-get-type": "22.4.3", + "pretty-format": "23.6.0" + } + }, + "jest-docblock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", + "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "requires": { + "detect-newline": "2.1.0" + } + }, + "jest-each": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", + "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", + "requires": { + "chalk": "2.4.1", + "pretty-format": "23.6.0" + } + }, + "jest-environment-jsdom": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "requires": { + "jest-mock": "23.2.0", + "jest-util": "23.4.0", + "jsdom": "11.12.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "requires": { + "abab": "2.0.0", + "acorn": "5.7.3", + "acorn-globals": "4.3.0", + "array-equal": "1.0.0", + "cssom": "0.3.4", + "cssstyle": "1.1.1", + "data-urls": "1.1.0", + "domexception": "1.0.1", + "escodegen": "1.11.0", + "html-encoding-sniffer": "1.0.2", + "left-pad": "1.3.0", + "nwsapi": "2.0.9", + "parse5": "4.0.0", + "pn": "1.1.0", + "request": "2.88.0", + "request-promise-native": "1.0.5", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.5.0", + "w3c-hr-time": "1.0.1", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.5", + "whatwg-mimetype": "2.3.0", + "whatwg-url": "6.5.0", + "ws": "5.2.2", + "xml-name-validator": "3.0.0" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "requires": { + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "1.0.0" + } + } + } + }, + "jest-environment-node": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "requires": { + "jest-mock": "23.2.0", + "jest-util": "23.4.0" + } + }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==" + }, + "jest-haste-map": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", + "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.15", + "invariant": "2.2.4", + "jest-docblock": "23.2.0", + "jest-serializer": "23.0.1", + "jest-worker": "23.2.0", + "micromatch": "2.3.11", + "sane": "2.5.2" + } + }, + "jest-jasmine2": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", + "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", + "requires": { + "babel-traverse": "6.26.0", + "chalk": "2.4.1", + "co": "4.6.0", + "expect": "23.6.0", + "is-generator-fn": "1.0.0", + "jest-diff": "23.6.0", + "jest-each": "23.6.0", + "jest-matcher-utils": "23.6.0", + "jest-message-util": "23.4.0", + "jest-snapshot": "23.6.0", + "jest-util": "23.4.0", + "pretty-format": "23.6.0" + } + }, + "jest-leak-detector": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", + "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", + "requires": { + "pretty-format": "23.6.0" + } + }, + "jest-matcher-utils": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", + "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", + "requires": { + "chalk": "2.4.1", + "jest-get-type": "22.4.3", + "pretty-format": "23.6.0" + } + }, + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "requires": { + "@babel/code-frame": "7.0.0", + "chalk": "2.4.1", + "micromatch": "2.3.11", + "slash": "1.0.0", + "stack-utils": "1.0.2" + } + }, + "jest-mock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", + "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=" + }, + "jest-pnp-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.1.tgz", + "integrity": "sha512-kzhvJQp+9k0a/hpvIIzOJgOwfOqmnohdrAMZW2EscH3kxR2VWD7EcPa10cio8EK9V7PcD75bhG1pFnO70zGwSQ==" + }, + "jest-regex-util": { + "version": "23.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", + "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=" + }, + "jest-resolve": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", + "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", + "requires": { + "browser-resolve": "1.11.3", + "chalk": "2.4.1", + "realpath-native": "1.0.2" + } + }, + "jest-resolve-dependencies": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", + "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", + "requires": { + "jest-regex-util": "23.3.0", + "jest-snapshot": "23.6.0" + } + }, + "jest-runner": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", + "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", + "requires": { + "exit": "0.1.2", + "graceful-fs": "4.1.15", + "jest-config": "23.6.0", + "jest-docblock": "23.2.0", + "jest-haste-map": "23.6.0", + "jest-jasmine2": "23.6.0", + "jest-leak-detector": "23.6.0", + "jest-message-util": "23.4.0", + "jest-runtime": "23.6.0", + "jest-util": "23.4.0", + "jest-worker": "23.2.0", + "source-map-support": "0.5.9", + "throat": "4.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==" + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + } + } + } + }, + "jest-runtime": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", + "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", + "requires": { + "babel-core": "6.26.3", + "babel-plugin-istanbul": "4.1.6", + "chalk": "2.4.1", + "convert-source-map": "1.6.0", + "exit": "0.1.2", + "fast-json-stable-stringify": "2.0.0", + "graceful-fs": "4.1.15", + "jest-config": "23.6.0", + "jest-haste-map": "23.6.0", + "jest-message-util": "23.4.0", + "jest-regex-util": "23.3.0", + "jest-resolve": "23.6.0", + "jest-snapshot": "23.6.0", + "jest-util": "23.4.0", + "jest-validate": "23.6.0", + "micromatch": "2.3.11", + "realpath-native": "1.0.2", + "slash": "1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "2.3.0", + "yargs": "11.1.0" + }, + "dependencies": { + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.6.0", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "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" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, + "jest-serializer": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", + "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=" + }, + "jest-snapshot": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", + "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", + "requires": { + "babel-types": "6.26.0", + "chalk": "2.4.1", + "jest-diff": "23.6.0", + "jest-matcher-utils": "23.6.0", + "jest-message-util": "23.4.0", + "jest-resolve": "23.6.0", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "pretty-format": "23.6.0", + "semver": "5.6.0" + } + }, + "jest-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "requires": { + "callsites": "2.0.0", + "chalk": "2.4.1", + "graceful-fs": "4.1.15", + "is-ci": "1.2.1", + "jest-message-util": "23.4.0", + "mkdirp": "0.5.1", + "slash": "1.0.0", + "source-map": "0.6.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==" + } + } + }, + "jest-validate": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", + "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "requires": { + "chalk": "2.4.1", + "jest-get-type": "22.4.3", + "leven": "2.1.0", + "pretty-format": "23.6.0" + } + }, + "jest-watcher": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", + "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "string-length": "2.0.0" + } + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "requires": { + "merge-stream": "1.0.1" + } + }, + "joi": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", + "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", + "requires": { + "hoek": "4.2.1", + "isemail": "3.2.0", + "topo": "2.0.2" + } + }, + "js-base64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.0.tgz", + "integrity": "sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g==" + }, + "js-levenshtein": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.5.tgz", + "integrity": "sha512-ap2aTez3WZASzMmJvgvG+nsrCCrtHPQ+4YB+WQjYQpXgLkM+WqwkpzdlVs5l7Xhk128I/CisIk4CdXl7pIchUA==" + }, + "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.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.1.0.tgz", + "integrity": "sha512-C2Kp0qNuopw0smXFaHeayvharqF3kkcNqlcIlSX71+3XrsOFwkEPLt/9f5JksMmaul2JZYIQuY+WTpqHpQQcLg==", + "requires": { + "abab": "2.0.0", + "acorn": "6.0.5", + "acorn-globals": "4.3.0", + "array-equal": "1.0.0", + "cssom": "0.3.4", + "cssstyle": "1.1.1", + "data-urls": "1.1.0", + "domexception": "1.0.1", + "escodegen": "1.11.0", + "html-encoding-sniffer": "1.0.2", + "nwsapi": "2.0.9", + "parse5": "5.1.0", + "pn": "1.1.0", + "request": "2.88.0", + "request-promise-native": "1.0.5", + "saxes": "3.1.5", + "symbol-tree": "3.2.2", + "tough-cookie": "2.5.0", + "w3c-hr-time": "1.0.1", + "w3c-xmlserializer": "1.0.1", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.5", + "whatwg-mimetype": "2.3.0", + "whatwg-url": "7.0.0", + "ws": "6.1.2", + "xml-name-validator": "3.0.0" + } + }, + "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": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "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=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "requires": { + "minimist": "1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "4.1.15" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "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" + } + }, + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "requires": { + "array-includes": "3.0.3" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "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.6" + } + }, + "kleur": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", + "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==" + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "requires": { + "lodash": "4.17.11", + "webpack-sources": "1.3.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "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" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "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.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "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.3.2" + } + } + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "requires": { + "find-cache-dir": "0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.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.1.0", + "pinkie-promise": "2.0.1" + } + }, + "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.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "loader-runner": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", + "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==" + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.0" + } + } + } + }, + "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" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "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": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=" + }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "requires": { + "lodash._reinterpolate": "3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "4.0.0" + } + }, + "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.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "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" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "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=" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.4" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" + }, + "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.1" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" + }, + "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.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "1.2.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + }, + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "requires": { + "arr-union": "3.1.0", + "clone-deep": "0.2.4", + "kind-of": "3.2.2" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "requires": { + "readable-stream": "2.3.6" + } + }, + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "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.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "1.37.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "mini-css-extract-plugin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz", + "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==", + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "1.0.0", + "webpack-sources": "1.3.0" + } + }, + "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.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "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" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.0.3" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nan": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "1.1.4" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==" + }, + "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.11", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.88.0", + "rimraf": "2.6.3", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.4", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "node-notifier": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz", + "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==", + "requires": { + "growly": "1.3.0", + "semver": "5.6.0", + "shellwords": "0.1.1", + "which": "1.3.1" + } + }, + "node-releases": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", + "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", + "requires": { + "semver": "5.6.0" + } + }, + "node-sass": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.3", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.12.1", + "node-gyp": "3.8.0", + "npmlog": "4.1.2", + "request": "2.88.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.1", + "true-case-path": "1.0.3" + }, + "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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "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.1.5", + "which": "1.3.1" + } + }, + "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.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" + } + }, + "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.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "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.1" + } + }, + "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.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "1.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=" + }, + "nwsapi": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", + "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==" + }, + "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.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "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.6" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + }, + "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.1" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.12" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "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.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1", + "has": "1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "1.2.0" + } + }, + "opn": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", + "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "requires": { + "cssnano": "4.1.8", + "last-call-webpack-plugin": "3.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "1.4.4" + } + }, + "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": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.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.2", + "os-tmpdir": "1.0.2" + } + }, + "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": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + }, + "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.3.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "pako": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz", + "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==" + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "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.2", + "json-parse-better-errors": "1.0.2" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "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.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "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-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "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-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + } + }, + "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.15", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "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.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "2.1.0" + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" + }, + "pnp-webpack-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.1.0.tgz", + "integrity": "sha512-CPCdcFxx7fEcDMWTDjXe2Wypt4JuMt4q5Q2UrpTcyBBkLiCIyPEh/mCGmUWIcNkKGyXwQ9Y2wVhlKm6ketiBNQ==" + }, + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.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==" + } + } + }, + "postcss-attribute-case-insensitive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.0.tgz", + "integrity": "sha512-K/zqdg0/UgUgC8qR0lDuxYzmowPpnvrrNC5YuoqzhHMubR9AuhsPlpVu3jjkLHgDAzR+ohD/m7//iGnN9WxbzQ==", + "requires": { + "postcss": "7.0.8", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "requires": { + "css-unit-converter": "1.1.1", + "postcss": "7.0.8", + "postcss-selector-parser": "5.0.0", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "requires": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.2.tgz", + "integrity": "sha512-8bIOzQMGdZVifoBQUJdw+yIY00omBd2EwkJXepQo9cjp1UOHHHoeRDeSzTP6vakEpaRc6GAIOfvcQR7jBYaG5Q==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "requires": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", + "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", + "requires": { + "browserslist": "4.3.7", + "color": "3.1.0", + "has": "1.0.3", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-custom-media": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.7.tgz", + "integrity": "sha512-bWPCdZKdH60wKOTG4HKEgxWnZVjAIVNOJDvi3lkuTa90xo/K0YHa2ZnlKLC5e2qF8qCcMQXt0yzQITBp8d0OFA==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-custom-properties": { + "version": "8.0.9", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.9.tgz", + "integrity": "sha512-/Lbn5GP2JkKhgUO2elMs4NnbUJcvHX4AaF5nuJDaNkd2chYW1KA5qtOGGgdkBEWcXtKSQfHXzT7C6grEVyb13w==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "requires": { + "postcss": "7.0.8", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "requires": { + "postcss": "7.0.8", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", + "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-flexbugs-fixes": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", + "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-font-variant": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-initial": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.0.tgz", + "integrity": "sha512-WzrqZ5nG9R9fUtrA+we92R4jhVvEB32IIRTzfIG/PLL8UV4CvbF1ugTEHEFX6vWxl41Xt5RTCJPEZkuWzrOM+Q==", + "requires": { + "lodash.template": "4.4.0", + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "requires": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "requires": { + "cosmiconfig": "4.0.0", + "import-cwd": "2.1.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.12.1", + "parse-json": "4.0.0", + "require-from-string": "2.0.2" + } + } + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "requires": { + "loader-utils": "1.2.3", + "postcss": "7.0.8", + "postcss-load-config": "2.0.0", + "schema-utils": "1.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", + "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1", + "stylehacks": "4.0.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", + "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "requires": { + "browserslist": "4.3.7", + "caniuse-api": "3.0.0", + "cssnano-util-same-parent": "4.0.1", + "postcss": "7.0.8", + "postcss-selector-parser": "3.1.1", + "vendors": "1.0.2" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", + "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "is-color-stop": "1.1.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", + "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", + "requires": { + "alphanum-sort": "1.0.2", + "browserslist": "4.3.7", + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1", + "uniqs": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", + "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "7.0.8", + "postcss-selector-parser": "3.1.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "requires": { + "postcss": "6.0.23" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "requires": { + "css-selector-tokenizer": "0.7.1", + "postcss": "6.0.23" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "requires": { + "css-selector-tokenizer": "0.7.1", + "postcss": "6.0.23" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.23" + } + }, + "postcss-nesting": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.0.tgz", + "integrity": "sha512-WSsbVd5Ampi3Y0nk/SKr5+K34n52PqMqEfswu6RtU4r7wA8vSD+gM8/D9qq4aJkHImwn1+9iEFTbjoWsQeqtaQ==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", + "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", + "requires": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", + "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", + "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-string": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", + "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", + "requires": { + "has": "1.0.3", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", + "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", + "requires": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "4.3.7", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "3.3.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", + "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", + "requires": { + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", + "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "requires": { + "postcss": "7.0.8", + "postcss-values-parser": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-preset-env": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.3.1.tgz", + "integrity": "sha512-erl+OcCTr1+jsfJNQjBweyb8Y1s6KngUBwoqJnRXO197PmEE6u9HxZfnpKkTQqasxZljxNHzXR5hMb7MdD0Zdw==", + "requires": { + "autoprefixer": "9.4.4", + "browserslist": "4.3.7", + "caniuse-lite": "1.0.30000927", + "cssdb": "4.3.0", + "postcss": "7.0.8", + "postcss-attribute-case-insensitive": "4.0.0", + "postcss-color-functional-notation": "2.0.1", + "postcss-color-gray": "5.0.0", + "postcss-color-hex-alpha": "5.0.2", + "postcss-color-mod-function": "3.0.3", + "postcss-color-rebeccapurple": "4.0.1", + "postcss-custom-media": "7.0.7", + "postcss-custom-properties": "8.0.9", + "postcss-custom-selectors": "5.1.2", + "postcss-dir-pseudo-class": "5.0.0", + "postcss-double-position-gradients": "1.0.0", + "postcss-env-function": "2.0.2", + "postcss-focus-visible": "4.0.0", + "postcss-focus-within": "3.0.0", + "postcss-font-variant": "4.0.0", + "postcss-gap-properties": "2.0.0", + "postcss-image-set-function": "3.0.1", + "postcss-initial": "3.0.0", + "postcss-lab-function": "2.0.1", + "postcss-logical": "3.0.0", + "postcss-media-minmax": "4.0.0", + "postcss-nesting": "7.0.0", + "postcss-overflow-shorthand": "2.0.0", + "postcss-page-break": "2.0.0", + "postcss-place": "4.0.1", + "postcss-pseudo-class-any-link": "6.0.0", + "postcss-replace-overflow-wrap": "3.0.0", + "postcss-selector-matches": "4.0.0", + "postcss-selector-not": "4.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "requires": { + "postcss": "7.0.8", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", + "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", + "requires": { + "browserslist": "4.3.7", + "caniuse-api": "3.0.0", + "has": "1.0.3", + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", + "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", + "requires": { + "cssnano-util-get-match": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-safe-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", + "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "requires": { + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "requires": { + "balanced-match": "1.0.0", + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-selector-not": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", + "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", + "requires": { + "balanced-match": "1.0.0", + "postcss": "7.0.8" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + } + } + }, + "postcss-svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", + "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", + "requires": { + "is-svg": "3.0.0", + "postcss": "7.0.8", + "postcss-value-parser": "3.3.1", + "svgo": "1.1.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "7.0.8", + "uniqs": "2.0.0" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "postcss-values-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.0.tgz", + "integrity": "sha512-cyRdkgbRRefu91ByAlJow4y9w/hnBmmWgLpWmlFQ2bpIy2eKrqowt3VeYcaHQ08otVXmC9V2JtYW1Z/RpvYR8A==", + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "prettier": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", + "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==" + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "requires": { + "renderkid": "2.0.2", + "utila": "0.4.0" + } + }, + "pretty-format": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "requires": { + "ansi-regex": "3.0.0", + "ansi-styles": "3.2.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "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.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prompts": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", + "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", + "requires": { + "kleur": "2.0.2", + "sisteransi": "0.1.1" + } + }, + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1" + } + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "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.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "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.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "3.6.1", + "inherits": "2.0.3", + "pump": "2.0.1" + }, + "dependencies": { + "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.4.1", + "once": "1.4.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==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qr.js": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", + "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=" + }, + "qrcode.react": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-0.9.2.tgz", + "integrity": "sha512-opV0IA4w84qMaZg3hhgmktDs1xjfx3K7RAOzdvmKgkLdhmtv95AYGZmlG0s3NIAZ1qXCK4AyPJayLd3sa6p/RA==", + "requires": { + "prop-types": "15.6.2", + "qr.js": "0.0.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.2.0.tgz", + "integrity": "sha512-5wupExkIt8RYL4h/FE+WTg3JHk62e6fFPWtAZA9J5IWK1PfTfKkMS93HBUHcFpeYi9KsY5pFbh+ldvEyaz5MyA==", + "requires": { + "decode-uri-component": "0.2.0", + "strict-uri-encode": "2.0.0" + } + }, + "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=" + }, + "querystringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", + "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" + }, + "raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "requires": { + "performance-now": "2.1.0" + } + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" + }, + "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==" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "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.6", + "safe-buffer": "5.1.2" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + } + } + }, + "react": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", + "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.6.2", + "scheduler": "0.12.0" + } + }, + "react-app-polyfill": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.2.0.tgz", + "integrity": "sha512-uBfocjRsBNqhTaEywUZ2buzhHbor2jBbnhZY8VUZ7VZ3PXucIPZrPDAAmbclELhvl+x08PbynAGQfMYcBmqZ2w==", + "requires": { + "core-js": "2.5.7", + "object-assign": "4.1.1", + "promise": "8.0.2", + "raf": "3.4.0", + "whatwg-fetch": "3.0.0" + }, + "dependencies": { + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + }, + "promise": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", + "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", + "requires": { + "asap": "2.0.6" + } + } + } + }, + "react-dev-utils": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-7.0.1.tgz", + "integrity": "sha512-AN/RKZKHsyB2FebKSyMLOecvjuzZ54lzsLYF8wNmwwgRA3dVC4vhYsafvME7JD4q7RUB0bejqFWjOS9QtN48Zg==", + "requires": { + "@babel/code-frame": "7.0.0", + "address": "1.0.3", + "browserslist": "4.1.1", + "chalk": "2.4.1", + "cross-spawn": "6.0.5", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "1.0.5", + "filesize": "3.6.1", + "find-up": "3.0.0", + "global-modules": "1.0.0", + "globby": "8.0.1", + "gzip-size": "5.0.0", + "immer": "1.7.2", + "inquirer": "6.2.0", + "is-root": "2.0.0", + "loader-utils": "1.1.0", + "opn": "5.4.0", + "pkg-up": "2.0.0", + "react-error-overlay": "5.1.2", + "recursive-readdir": "2.2.2", + "shell-quote": "1.6.1", + "sockjs-client": "1.1.5", + "strip-ansi": "4.0.0", + "text-table": "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=" + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "browserslist": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", + "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", + "requires": { + "caniuse-lite": "1.0.30000927", + "electron-to-chromium": "1.3.100", + "node-releases": "1.1.3" + } + }, + "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" + } + }, + "inquirer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "3.0.3", + "figures": "2.0.0", + "lodash": "4.17.11", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "6.3.3", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "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" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "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.1.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + }, + "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" + } + } + } + }, + "react-dom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz", + "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.6.2", + "scheduler": "0.12.0" + } + }, + "react-error-overlay": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.2.tgz", + "integrity": "sha512-7kEBKwU9R8fKnZJBRa5RSIfay4KJwnYvKB6gODGicUmDSAhQJ7Tdnll5S0RLtYrzRfMVXlqYw61rzrSpP4ThLQ==" + }, + "react-is": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", + "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==" + }, + "react-redux": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-6.0.0.tgz", + "integrity": "sha512-EmbC3uLl60pw2VqSSkj6HpZ6jTk12RMrwXMBdYtM6niq0MdEaRq9KYCwpJflkOZj349BLGQm1MI/JO1W96kLWQ==", + "requires": { + "@babel/runtime": "7.2.0", + "hoist-non-react-statics": "3.2.1", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "prop-types": "15.6.2", + "react-is": "16.7.0" + } + }, + "react-router": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", + "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", + "requires": { + "history": "4.7.2", + "hoist-non-react-statics": "2.5.5", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "path-to-regexp": "1.7.0", + "prop-types": "15.6.2", + "warning": "4.0.2" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-router-dom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", + "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", + "requires": { + "history": "4.7.2", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "prop-types": "15.6.2", + "react-router": "4.3.1", + "warning": "4.0.2" + } + }, + "react-scripts": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.1.3.tgz", + "integrity": "sha512-JASD0QVVgSVleVhA9TeA+UBx+shq887hm/L+09qjZLrqIUvJZHZU+oOnhMFGot02Yop+LKfkvf9KSsTNlu/Rwg==", + "requires": { + "@babel/core": "7.1.6", + "@svgr/webpack": "2.4.1", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "9.0.0", + "babel-jest": "23.6.0", + "babel-loader": "8.0.4", + "babel-plugin-named-asset-import": "0.3.0", + "babel-preset-react-app": "7.0.0", + "bfj": "6.1.1", + "case-sensitive-paths-webpack-plugin": "2.1.2", + "chalk": "2.4.1", + "css-loader": "1.0.0", + "dotenv": "6.0.0", + "dotenv-expand": "4.2.0", + "eslint": "5.6.0", + "eslint-config-react-app": "3.0.6", + "eslint-loader": "2.1.1", + "eslint-plugin-flowtype": "2.50.1", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-jsx-a11y": "6.1.2", + "eslint-plugin-react": "7.11.1", + "file-loader": "2.0.0", + "fork-ts-checker-webpack-plugin-alt": "0.4.14", + "fs-extra": "7.0.0", + "fsevents": "1.2.4", + "html-webpack-plugin": "4.0.0-alpha.2", + "identity-obj-proxy": "3.0.0", + "jest": "23.6.0", + "jest-pnp-resolver": "1.0.1", + "jest-resolve": "23.6.0", + "mini-css-extract-plugin": "0.4.3", + "optimize-css-assets-webpack-plugin": "5.0.1", + "pnp-webpack-plugin": "1.1.0", + "postcss-flexbugs-fixes": "4.1.0", + "postcss-loader": "3.0.0", + "postcss-preset-env": "6.3.1", + "postcss-safe-parser": "4.0.1", + "react-app-polyfill": "0.2.0", + "react-dev-utils": "7.0.1", + "resolve": "1.8.1", + "sass-loader": "7.1.0", + "style-loader": "0.23.0", + "terser-webpack-plugin": "1.1.0", + "url-loader": "1.1.1", + "webpack": "4.19.1", + "webpack-dev-server": "3.1.14", + "webpack-manifest-plugin": "2.0.4", + "workbox-webpack-plugin": "3.6.3" + } + }, + "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.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.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.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "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.1.0", + "pinkie-promise": "2.0.1" + } + }, + "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.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "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.15", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "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.1" + } + } + } + }, + "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" + } + }, + "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.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.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.2.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.6" + } + } + } + }, + "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.2.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.6" + } + } + } + }, + "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.1.0" + } + }, + "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==" + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.2" + } + }, + "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.1" + } + } + } + }, + "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.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.1" + } + } + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "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.2.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.6" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "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.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "realpath-native": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz", + "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==", + "requires": { + "util.promisify": "1.0.0" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + } + }, + "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" + } + }, + "redux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", + "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", + "requires": { + "loose-envify": "1.4.0", + "symbol-observable": "1.2.0" + } + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", + "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "requires": { + "regenerate": "1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + }, + "regenerator-transform": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", + "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", + "requires": { + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "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" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "regexpu-core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", + "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "requires": { + "regenerate": "1.4.0", + "regenerate-unicode-properties": "7.0.0", + "regjsgen": "0.5.0", + "regjsparser": "0.6.0", + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.0.2" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "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=" + }, + "renderkid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", + "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.4.0" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.2", + "domutils": "1.5.1", + "nth-check": "1.0.2" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.1" + } + } + } + }, + "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.2" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "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.21", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "1.1.31", + "punycode": "1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.5.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "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=" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + }, + "dependencies": { + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" + } + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "requires": { + "path-parse": "1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "3.0.0" + } + }, + "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.2", + "global-modules": "1.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-pathname": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", + "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "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" + } + }, + "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.4", + "inherits": "2.0.3" + } + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "1.2.0" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "requires": { + "tslib": "1.9.3" + } + }, + "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.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "requires": { + "anymatch": "2.0.0", + "capture-exit": "1.2.0", + "exec-sh": "0.2.2", + "fb-watchman": "2.0.0", + "fsevents": "1.2.4", + "micromatch": "3.1.10", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.18.0" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "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.1" + } + } + } + }, + "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" + } + }, + "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.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.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.2.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.6" + } + } + } + }, + "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.2.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.6" + } + } + } + }, + "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.1.0" + } + }, + "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==" + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.2" + } + }, + "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.1" + } + } + } + }, + "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.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.1" + } + } + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "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.2.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.6" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "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.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "requires": { + "glob": "7.1.3", + "lodash": "4.17.11", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "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.1" + } + }, + "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" + } + }, + "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.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "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" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "sass-loader": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", + "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "requires": { + "clone-deep": "2.0.2", + "loader-utils": "1.2.3", + "lodash.tail": "4.1.1", + "neo-async": "2.6.0", + "pify": "3.0.0", + "semver": "5.6.0" + }, + "dependencies": { + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "requires": { + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" + } + }, + "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.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "requires": { + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" + }, + "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==" + } + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "saxes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.5.tgz", + "integrity": "sha512-2mgiX2VOarcQv8G40WdJ5QJniYdsPr0yGedkd98PqApodsS9DG29qyHl/X65OILm7Bapd1/zUUvTHVZwNLhXvQ==", + "requires": { + "xmlchars": "1.3.1" + } + }, + "scheduler": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", + "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "6.6.2", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.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.5.0", + "source-map": "0.4.4" + }, + "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": "1.0.1" + } + } + } + }, + "seamless-immutable": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.4.tgz", + "integrity": "sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A==" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "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" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "serialize-javascript": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "requires": { + "accepts": "1.3.5", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.21", + "parseurl": "1.3.2" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.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.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "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.3", + "safe-buffer": "5.1.2" + } + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "requires": { + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + } + } + }, + "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.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "0.3.2" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sisteransi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", + "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "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.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" + }, + "dependencies": { + "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" + } + }, + "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.6" + } + }, + "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.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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.1", + "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.2" + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "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.2" + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.3.2" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": "0.7.0" + } + } + } + }, + "sockjs-client": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", + "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.4" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "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.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "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-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.3" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.3" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + }, + "spdy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "requires": { + "debug": "4.1.1", + "handle-thing": "2.0.0", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "4.1.1", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.1.1", + "wbuf": "1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "requires": { + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + } + } + }, + "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.2" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", + "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" + }, + "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.6" + } + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "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.3.6" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "requires": { + "astral-regex": "1.0.0", + "strip-ansi": "4.0.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" + } + } + } + }, + "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" + }, + "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" + } + } + } + }, + "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.2" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "3.0.0", + "is-obj": "1.0.1", + "is-regexp": "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.1.1" + } + }, + "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.1" + } + }, + "strip-comments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", + "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", + "requires": { + "babel-extract-comments": "1.0.0", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "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" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "style-loader": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.0.tgz", + "integrity": "sha512-uCcN7XWHkqwGVt7skpInW6IGO1tG6ReyFQ1Cseh0VcN6VdcFQi62aG/2F3Y9ueA8x4IVlfaSUxpmQXQD9QrEuQ==", + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "0.4.7" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "6.6.2", + "ajv-keywords": "3.2.0" + } + } + } + }, + "stylehacks": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", + "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", + "requires": { + "browserslist": "4.3.7", + "postcss": "7.0.8", + "postcss-selector-parser": "3.1.1" + }, + "dependencies": { + "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.5.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.8.tgz", + "integrity": "sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.0.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "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" + } + }, + "svgo": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", + "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", + "requires": { + "coa": "2.0.2", + "colors": "1.1.2", + "css-select": "2.0.2", + "css-select-base-adapter": "0.1.1", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "1.1.0", + "csso": "3.5.1", + "js-yaml": "3.12.1", + "mkdirp": "0.5.1", + "object.values": "1.1.0", + "sax": "1.2.4", + "stable": "0.1.8", + "unquote": "1.1.1", + "util.promisify": "1.0.0" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" + }, + "table": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "requires": { + "ajv": "6.6.2", + "ajv-keywords": "3.2.0", + "chalk": "2.4.1", + "lodash": "4.17.11", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + } + }, + "tapable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==" + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "terser": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", + "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", + "requires": { + "commander": "2.17.1", + "source-map": "0.6.1", + "source-map-support": "0.5.9" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "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-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + } + } + } + }, + "terser-webpack-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz", + "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==", + "requires": { + "cacache": "11.3.2", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.6.1", + "source-map": "0.6.1", + "terser": "3.14.1", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", + "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "requires": { + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "3.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" + } + }, + "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" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "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.1.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "test-exclude": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", + "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" + }, + "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" + } + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "requires": { + "setimmediate": "1.0.5" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "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.2.2" + } + }, + "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" + }, + "dependencies": { + "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.2.2" + } + } + } + }, + "topo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "requires": { + "hoek": "4.2.1" + } + }, + "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.31", + "punycode": "2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "2.1.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "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.3" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "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.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.21" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typesafe-actions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typesafe-actions/-/typesafe-actions-3.0.0.tgz", + "integrity": "sha512-NLpRc/FY+jPfWL0aUXQzjxPyF0Xug2om6akaoRLQ18KGwP2yYNBJu9vkv2q1q+Cx/+edy2Qf6O8xXnYY/xwz1A==" + }, + "typescript": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", + "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==" + }, + "u2f-api": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-1.0.10.tgz", + "integrity": "sha512-0Zh+IqM2l6xaA/IUJDT9WwoEM6nwPx6ive4flVVYEfzzgXIrKFRaenieItsEkbXIgOZEw13nO3o3oLtSDOyesA==" + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "requires": { + "commander": "2.17.1", + "source-map": "0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.7", + "serialize-javascript": "1.6.1", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "requires": { + "bluebird": "3.5.3", + "chownr": "1.1.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "4.1.5", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + } + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "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.4.1", + "once": "1.4.0" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "6.6.2", + "ajv-keywords": "3.2.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "1.0.4", + "unicode-property-aliases-ecmascript": "1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "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.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "2.0.1" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "requires": { + "imurmurhash": "0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "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.1" + }, + "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.6", + "has-values": "0.1.4", + "isobject": "2.1.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=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "2.1.1" + } + }, + "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=" + } + } + }, + "url-loader": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.1.tgz", + "integrity": "sha512-vugEeXjyYFBCUOpX+ZuaunbK3QXMKaQ3zUnRfIpRBlGkY7QizCnzyyn2ASfcxsvyU3ef+CJppVywnl3Kgf13Gg==", + "requires": { + "loader-utils": "1.2.3", + "mime": "2.4.0", + "schema-utils": "1.0.0" + } + }, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "requires": { + "querystringify": "2.1.0", + "requires-port": "1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "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" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utility-types": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.4.1.tgz", + "integrity": "sha512-GyH068kJf7c4vhfqj4aCM5X+TeV8jG2iPFLimpGpnQ7dvKfogZOHfiYxMww/nGEfMm/bEmnVbeZGO1see1OVKg==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "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.1.0", + "spdx-expression-parse": "3.0.0" + } + }, + "value-equal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", + "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" + }, + "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.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "requires": { + "browser-process-hrtime": "0.1.3" + } + }, + "w3c-xmlserializer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.0.1.tgz", + "integrity": "sha512-XZGI1OH/OLQr/NaJhhPmzhngwcAnZDLytsvXnRmlYeRkmbb0I7sqFFA22erq4WQR0sUu17ZSQOAV9mFwCqKRNg==", + "requires": { + "domexception": "1.0.1", + "webidl-conversions": "4.0.2", + "xml-name-validator": "3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.11" + } + }, + "warning": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", + "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", + "requires": { + "loose-envify": "1.4.0" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "requires": { + "exec-sh": "0.2.2", + "minimist": "1.2.0" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "requires": { + "chokidar": "2.0.4", + "graceful-fs": "4.1.15", + "neo-async": "2.6.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "1.0.1" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "webpack": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.19.1.tgz", + "integrity": "sha512-j7Q/5QqZRqIFXJvC0E59ipLV5Hf6lAnS3ezC3I4HMUybwEDikQBVad5d+IpPtmaQPQArvgUZLXIN6lWijHBn4g==", + "requires": { + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-module-context": "1.7.6", + "@webassemblyjs/wasm-edit": "1.7.6", + "@webassemblyjs/wasm-parser": "1.7.6", + "acorn": "5.7.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.6.2", + "ajv-keywords": "3.2.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.3.1", + "loader-utils": "1.2.3", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.0", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.7", + "tapable": "1.1.1", + "uglifyjs-webpack-plugin": "1.3.0", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "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.1" + } + } + } + }, + "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" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.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.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.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.2.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.6" + } + } + } + }, + "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.2.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.6" + } + } + } + }, + "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.1.0" + } + }, + "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==" + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.2" + } + }, + "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.1" + } + } + } + }, + "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.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.1" + } + } + } + }, + "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.2" + } + }, + "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.2" + } + }, + "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" + } + }, + "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.2.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.6" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "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.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "6.6.2", + "ajv-keywords": "3.2.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "requires": { + "memory-fs": "0.4.1", + "mime": "2.4.0", + "range-parser": "1.2.0", + "webpack-log": "2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", + "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "requires": { + "ansi-html": "0.0.7", + "bonjour": "3.5.0", + "chokidar": "2.0.4", + "compression": "1.7.3", + "connect-history-api-fallback": "1.6.0", + "debug": "3.2.6", + "del": "3.0.0", + "express": "4.16.4", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "2.0.0", + "internal-ip": "3.0.1", + "ip": "1.1.5", + "killable": "1.0.1", + "loglevel": "1.6.1", + "opn": "5.4.0", + "portfinder": "1.0.20", + "schema-utils": "1.0.0", + "selfsigned": "1.10.4", + "semver": "5.6.0", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "4.0.0", + "strip-ansi": "3.0.1", + "supports-color": "5.5.0", + "url": "0.11.0", + "webpack-dev-middleware": "3.4.0", + "webpack-log": "2.0.0", + "yargs": "12.0.2" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "2.1.1" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "requires": { + "xregexp": "4.0.0" + } + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "requires": { + "original": "1.0.2" + } + }, + "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.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.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" + } + }, + "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" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "3.0.0", + "resolve-cwd": "2.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==" + }, + "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" + } + }, + "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" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "requires": { + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.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" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "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.1.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "3.0.0" + } + }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "requires": { + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.4" + } + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "requires": { + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "10.1.0" + } + }, + "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" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "3.2.3", + "uuid": "3.3.2" + } + }, + "webpack-manifest-plugin": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", + "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", + "requires": { + "fs-extra": "7.0.0", + "lodash": "4.17.11", + "tapable": "1.1.1" + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "requires": { + "source-list-map": "2.0.1", + "source-map": "0.6.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==" + } + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "requires": { + "http-parser-js": "0.5.0", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "requires": { + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "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": "2.1.1" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "workbox-background-sync": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz", + "integrity": "sha512-ypLo0B6dces4gSpaslmDg5wuoUWrHHVJfFWwl1udvSylLdXvnrfhFfriCS42SNEe5lsZtcNZF27W/SMzBlva7Q==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-broadcast-cache-update": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz", + "integrity": "sha512-pJl4lbClQcvp0SyTiEw0zLSsVYE1RDlCPtpKnpMjxFtu8lCFTAEuVyzxp9w7GF4/b3P4h5nyQ+q7V9mIR7YzGg==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-build": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.6.3.tgz", + "integrity": "sha512-w0clZ/pVjL8VXy6GfthefxpEXs0T8uiRuopZSFVQ8ovfbH6c6kUpEh6DcYwm/Y6dyWPiCucdyAZotgjz+nRz8g==", + "requires": { + "babel-runtime": "6.26.0", + "common-tags": "1.8.0", + "fs-extra": "4.0.3", + "glob": "7.1.3", + "joi": "11.4.0", + "lodash.template": "4.4.0", + "pretty-bytes": "4.0.2", + "stringify-object": "3.3.0", + "strip-comments": "1.0.2", + "workbox-background-sync": "3.6.3", + "workbox-broadcast-cache-update": "3.6.3", + "workbox-cache-expiration": "3.6.3", + "workbox-cacheable-response": "3.6.3", + "workbox-core": "3.6.3", + "workbox-google-analytics": "3.6.3", + "workbox-navigation-preload": "3.6.3", + "workbox-precaching": "3.6.3", + "workbox-range-requests": "3.6.3", + "workbox-routing": "3.6.3", + "workbox-strategies": "3.6.3", + "workbox-streams": "3.6.3", + "workbox-sw": "3.6.3" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + } + } + }, + "workbox-cache-expiration": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz", + "integrity": "sha512-+ECNph/6doYx89oopO/UolYdDmQtGUgo8KCgluwBF/RieyA1ZOFKfrSiNjztxOrGJoyBB7raTIOlEEwZ1LaHoA==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-cacheable-response": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz", + "integrity": "sha512-QpmbGA9SLcA7fklBLm06C4zFg577Dt8u3QgLM0eMnnbaVv3rhm4vbmDpBkyTqvgK/Ly8MBDQzlXDtUCswQwqqg==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.3.tgz", + "integrity": "sha512-cx9cx0nscPkIWs8Pt98HGrS9/aORuUcSkWjG25GqNWdvD/pSe7/5Oh3BKs0fC+rUshCiyLbxW54q0hA+GqZeSQ==" + }, + "workbox-google-analytics": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz", + "integrity": "sha512-RQBUo/6SXtIaQTRFj4RQZ9e1gAl7D8oS5S+Hi173Kk70/BgJjzPwXpC5A249Jv5YfkCOLMQCeF9A27BiD0b0ig==", + "requires": { + "workbox-background-sync": "3.6.3", + "workbox-core": "3.6.3", + "workbox-routing": "3.6.3", + "workbox-strategies": "3.6.3" + } + }, + "workbox-navigation-preload": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz", + "integrity": "sha512-dd26xTX16DUu0i+MhqZK/jQXgfIitu0yATM4jhRXEmpMqQ4MxEeNvl2CgjDMOHBnCVMax+CFZQWwxMx/X/PqCw==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-precaching": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.6.3.tgz", + "integrity": "sha512-aBqT66BuMFviPTW6IpccZZHzpA8xzvZU2OM1AdhmSlYDXOJyb1+Z6blVD7z2Q8VNtV1UVwQIdImIX+hH3C3PIw==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-range-requests": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz", + "integrity": "sha512-R+yLWQy7D9aRF9yJ3QzwYnGFnGDhMUij4jVBUVtkl67oaVoP1ymZ81AfCmfZro2kpPRI+vmNMfxxW531cqdx8A==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-routing": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.6.3.tgz", + "integrity": "sha512-bX20i95OKXXQovXhFOViOK63HYmXvsIwZXKWbSpVeKToxMrp0G/6LZXnhg82ijj/S5yhKNRf9LeGDzaqxzAwMQ==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-strategies": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.6.3.tgz", + "integrity": "sha512-Pg5eulqeKet2y8j73Yw6xTgLdElktcWExGkzDVCGqfV9JCvnGuEpz5eVsCIK70+k4oJcBCin9qEg3g3CwEIH3g==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-streams": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.6.3.tgz", + "integrity": "sha512-rqDuS4duj+3aZUYI1LsrD2t9hHOjwPqnUIfrXSOxSVjVn83W2MisDF2Bj+dFUZv4GalL9xqErcFW++9gH+Z27w==", + "requires": { + "workbox-core": "3.6.3" + } + }, + "workbox-sw": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.6.3.tgz", + "integrity": "sha512-IQOUi+RLhvYCiv80RP23KBW/NTtIvzvjex28B8NW1jOm+iV4VIu3VXKXTA6er5/wjjuhmtB28qEAUqADLAyOSg==" + }, + "workbox-webpack-plugin": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-3.6.3.tgz", + "integrity": "sha512-RwmKjc7HFHUFHoOlKoZUq9349u0QN3F8W5tZZU0vc1qsBZDINWXRiIBCAKvo/Njgay5sWz7z4I2adnyTo97qIQ==", + "requires": { + "babel-runtime": "6.26.0", + "json-stable-stringify": "1.0.1", + "workbox-build": "3.6.3" + } + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "requires": { + "errno": "0.1.7" + } + }, + "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.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "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.1" + } + }, + "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.1.0", + "is-fullwidth-code-point": "1.0.0", + "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": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "requires": { + "mkdirp": "0.5.1" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "requires": { + "graceful-fs": "4.1.15", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "ws": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", + "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", + "requires": { + "async-limiter": "1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz", + "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==" + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "requires": { + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.3", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } + } + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 000000000..33afc7a92 --- /dev/null +++ b/client/package.json @@ -0,0 +1,52 @@ +{ + "name": "authelia-portal", + "version": "0.1.0", + "private": true, + "dependencies": { + "@material/react-button": "^0.8.0", + "@material/react-checkbox": "^0.8.0", + "@material/react-text-field": "^0.8.0", + "@types/classnames": "^2.2.7", + "@types/jss": "^9.5.7", + "@types/node": "^10.12.2", + "@types/node-sass": "^3.10.32", + "@types/qrcode.react": "^0.8.1", + "@types/query-string": "^6.2.0", + "@types/react": "^16.4.18", + "@types/react-dom": "^16.0.9", + "@types/react-redux": "^6.0.12", + "@types/react-router-dom": "^4.3.1", + "@types/redux-thunk": "^2.1.0", + "await-to-js": "^2.1.1", + "classnames": "^2.2.6", + "connected-react-router": "^6.2.1", + "node-sass": "^4.11.0", + "qrcode.react": "^0.9.2", + "query-string": "^6.2.0", + "react": "^16.6.0", + "react-dom": "^16.6.0", + "react-redux": "^6.0.0", + "react-router-dom": "^4.3.1", + "react-scripts": "^2.1.3", + "redux-thunk": "^2.3.0", + "typesafe-actions": "^3.0.0", + "typescript": "^3.1.6", + "u2f-api": "^1.0.10", + "utility-types": "^3.4.1" + }, + "scripts": { + "start": "SASS_PATH=./node_modules react-scripts start", + "build": "INLINE_RUNTIME_CHUNK=false SASS_PATH=./node_modules react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ] +} diff --git a/client/public/favicon.ico b/client/public/favicon.ico new file mode 100644 index 000000000..83f645c6f Binary files /dev/null and b/client/public/favicon.ico differ diff --git a/client/public/index.html b/client/public/index.html new file mode 100644 index 000000000..064a74229 --- /dev/null +++ b/client/public/index.html @@ -0,0 +1,42 @@ + + + + + + + + + + + + + Authelia - Portal + + + +
+ + + diff --git a/client/public/manifest.json b/client/public/manifest.json new file mode 100644 index 000000000..f0ff81c47 --- /dev/null +++ b/client/public/manifest.json @@ -0,0 +1,13 @@ +{ + "short_name": "Authelia", + "name": "Authelia - Portal", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone" +} diff --git a/client/src/App.scss b/client/src/App.scss new file mode 100644 index 000000000..d305c5e43 --- /dev/null +++ b/client/src/App.scss @@ -0,0 +1,3 @@ +@import "@material/react-button/index.scss"; +@import "@material/react-checkbox/index.scss"; +@import "@material/react-text-field/index.scss"; \ No newline at end of file diff --git a/client/src/App.test.tsx b/client/src/App.test.tsx new file mode 100644 index 000000000..a754b201b --- /dev/null +++ b/client/src/App.test.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render(, div); + ReactDOM.unmountComponentAtNode(div); +}); diff --git a/client/src/App.tsx b/client/src/App.tsx new file mode 100644 index 000000000..f35684a48 --- /dev/null +++ b/client/src/App.tsx @@ -0,0 +1,42 @@ +import React, { Component } from 'react'; +import './App.scss'; + +import { Route, Switch } from "react-router-dom"; +import { routes } from './routes/index'; +import { createBrowserHistory } from 'history'; +import { createStore, applyMiddleware, compose } from 'redux'; +import reducer from './reducers'; +import { Provider } from 'react-redux'; +import thunk from 'redux-thunk'; +import { routerMiddleware, ConnectedRouter } from 'connected-react-router'; + +const history = createBrowserHistory(); +const store = createStore( + reducer(history), + compose( + applyMiddleware( + routerMiddleware(history), + thunk + ) + ) +); + +class App extends Component { + render() { + return ( + + +
+ + {routes.map((r, key) => { + return + })} + +
+
+
+ ); + } +} + +export default App; diff --git a/client/src/img/stores/applestore-badge.svg b/client/src/assets/images/applestore-badge.svg similarity index 100% rename from client/src/img/stores/applestore-badge.svg rename to client/src/assets/images/applestore-badge.svg diff --git a/client/src/assets/images/error.svg b/client/src/assets/images/error.svg new file mode 100644 index 000000000..b0e544af1 --- /dev/null +++ b/client/src/assets/images/error.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/src/img/stores/googleplay-badge.svg b/client/src/assets/images/googleplay-badge.svg similarity index 100% rename from client/src/img/stores/googleplay-badge.svg rename to client/src/assets/images/googleplay-badge.svg diff --git a/client/src/img/mail.png b/client/src/assets/images/mail.png similarity index 100% rename from client/src/img/mail.png rename to client/src/assets/images/mail.png diff --git a/client/src/assets/images/security-key-hand.png b/client/src/assets/images/security-key-hand.png new file mode 100644 index 000000000..ab9a28424 Binary files /dev/null and b/client/src/assets/images/security-key-hand.png differ diff --git a/client/src/assets/images/security-key-large.png b/client/src/assets/images/security-key-large.png new file mode 100644 index 000000000..c612b17cf Binary files /dev/null and b/client/src/assets/images/security-key-large.png differ diff --git a/client/src/assets/images/security-key.png b/client/src/assets/images/security-key.png new file mode 100644 index 000000000..116e644f5 Binary files /dev/null and b/client/src/assets/images/security-key.png differ diff --git a/client/src/assets/images/user.svg b/client/src/assets/images/user.svg new file mode 100644 index 000000000..db78e7d94 --- /dev/null +++ b/client/src/assets/images/user.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/src/assets/scss/_variables.scss b/client/src/assets/scss/_variables.scss new file mode 100644 index 000000000..03c844ad0 --- /dev/null +++ b/client/src/assets/scss/_variables.scss @@ -0,0 +1,2 @@ + +$theme-spacing: 10px; \ No newline at end of file diff --git a/client/src/assets/scss/components/AlreadyAuthenticated/AlreadyAuthenticated.module.scss b/client/src/assets/scss/components/AlreadyAuthenticated/AlreadyAuthenticated.module.scss new file mode 100644 index 000000000..ae31adfa7 --- /dev/null +++ b/client/src/assets/scss/components/AlreadyAuthenticated/AlreadyAuthenticated.module.scss @@ -0,0 +1,24 @@ +@import '../../variables.scss'; + +.container { + text-align: center; +} + +.messageContainer { + color: green; + + .username { + display: block; + font-size: 1.6em; + font-weight: bold; + } +} + +.statusIcon { + margin-top: ($theme-spacing) * 2; + margin-bottom: ($theme-spacing) * 2; +} + +.logoutButtonContainer { + margin-top: ($theme-spacing) * 2, +} \ No newline at end of file diff --git a/client/src/assets/scss/components/CircleLoader/CircleLoader.module.scss b/client/src/assets/scss/components/CircleLoader/CircleLoader.module.scss new file mode 100644 index 000000000..9763156bf --- /dev/null +++ b/client/src/assets/scss/components/CircleLoader/CircleLoader.module.scss @@ -0,0 +1,148 @@ +$brand-success: #5cb85c; +$brand-failure: #d44141; +$loader-size: 4em; +$check-height: $loader-size/2; +$check-width: $check-height/2; +$check-left: ($loader-size/6 + $loader-size/25); +$check-thickness: 3px; +$check-color: $brand-success; + +$cross-height: $loader-size/2; +$cross-width: $check-height/10 - $check-height/12; +$cross-left: $loader-size/2; +$cross-top: $loader-size/4; + +.circleLoader { + border: 1px solid rgba(0, 0, 0, 0.2); + border-left-color: $check-color; + animation: loader-spin 1.2s infinite linear; + position: relative; + display: inline-block; + vertical-align: top; + border-radius: 50%; + width: $loader-size; + height: $loader-size; +} + +.loadComplete { + -webkit-animation: none; + animation: none; + transition: border 500ms ease-out; + &.success { + border-color: $brand-success; + } + &.failure { + border-color: $brand-failure; + } +} + +.checkmark { + display: none; + + &.show { + display: inline; + } + + &.draw:after { + animation-duration: 800ms; + animation-timing-function: ease; + animation-name: checkmark; + transform: scaleX(-1) rotate(135deg); + } + + &:after { + opacity: 1; + height: $check-height; + width: $check-width; + transform-origin: left top; + border-right: $check-thickness solid $check-color; + border-top: $check-thickness solid $check-color; + content: ''; + left: $check-left; + top: $check-height; + position: absolute; + } +} + +.cross { + display: none; + + &.show { + display: inline; + } + + &.draw:after, &.draw:before { + animation-duration: 300ms; + animation-timing-function: ease; + animation-name: cross; + } + + &:before, &:after { + position: absolute; + left: $cross-left; + top: $cross-top; + content: ''; + height: $cross-height; + width: $cross-width; + background-color: $brand-failure; + } + + &:before { + transform: rotate(45deg); + } + + &:after { + transform: rotate(-45deg); + } +} + +@keyframes loader-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@keyframes checkmark { + 0% { + height: 0; + width: 0; + opacity: 1; + } + 20% { + height: 0; + width: $check-width; + opacity: 1; + } + 40% { + height: $check-height; + width: $check-width; + opacity: 1; + } + 100% { + height: $check-height; + width: $check-width; + opacity: 1; + } +} + +@keyframes cross { + 0% { + width: 0; + height: 0; + } + 20% { + height: 0; + width: $cross-width; + } + 40% { + height: $cross-height; + width: $cross-width; + } + 100% { + width: $cross-width; + height: $cross-height; + } +} \ No newline at end of file diff --git a/client/src/assets/scss/components/FirstFactorForm/FirstFactorForm.module.scss b/client/src/assets/scss/components/FirstFactorForm/FirstFactorForm.module.scss new file mode 100644 index 000000000..58fb58b0b --- /dev/null +++ b/client/src/assets/scss/components/FirstFactorForm/FirstFactorForm.module.scss @@ -0,0 +1,43 @@ +@import '../../variables.scss'; + +.notification { + margin-bottom: ($theme-spacing) * 2; +} + +.field { + padding-bottom: ($theme-spacing) * 2; +} + +.input { + width: 100%; +} + +.buttons button{ + width: 100%; +} + +.controls { + display: inline-block; + width: 100%; + font-size: 0.875rem; +} + +.rememberMe { + float: left; + font-size: 0.8em; + display: flex; + align-items: center; + margin-left: -11px; +} + +.resetPassword { + height: 40px; + float: right; + display: flex; + align-items: center; +} + +.resetPassword a { + color: black; + font-size: 0.8em; +} \ No newline at end of file diff --git a/client/src/assets/scss/components/Notification/Notification.module.scss b/client/src/assets/scss/components/Notification/Notification.module.scss new file mode 100644 index 000000000..018237c95 --- /dev/null +++ b/client/src/assets/scss/components/Notification/Notification.module.scss @@ -0,0 +1,10 @@ +@import '../../variables.scss'; + +.container { + color: white; + font-size: 0.8em; + padding: ($theme-spacing) * 2; + border: 1px solid red; + border-radius: 5px; + background-color: #ff8d8d; +} \ No newline at end of file diff --git a/client/src/assets/scss/components/SecondFactorForm/SecondFactorForm.module.scss b/client/src/assets/scss/components/SecondFactorForm/SecondFactorForm.module.scss new file mode 100644 index 000000000..631cecddd --- /dev/null +++ b/client/src/assets/scss/components/SecondFactorForm/SecondFactorForm.module.scss @@ -0,0 +1,75 @@ +@import '../../variables.scss'; + +.container { + position: relative, +} + +.header { + font-size: 1.5em; + margin-bottom: ($theme-spacing); + position: relative; + + .hello { + display: inline-block; + } + + .logout { + position: absolute; + bottom: 0px; + right: 0px; + font-size: 0.6em, + } +} + +.body { + padding-top: ($theme-spacing) * 2; + padding-bottom: ($theme-spacing) * 2; + padding-left: ($theme-spacing) * 2; + padding-right: ($theme-spacing) * 2; + border: 1px solid #e0e0e0; + border-radius: 2px; +} + +.methodName { + font-size: 1.2em; + font-weight: bold; + margin-bottom: ($theme-spacing); +} + +.methodU2f { + border-bottom: 1px solid #e0e0e0; + padding: ($theme-spacing); +} + +.methodTotp { + padding: ($theme-spacing); + padding-top: ($theme-spacing) * 2; +} + +.image { + width: '120px'; +} + +.imageContainer { + text-align: center; + margin-top: ($theme-spacing) * 2; + margin-bottom: ($theme-spacing) * 2; +} + +.registerDeviceContainer { + text-align: right; + font-size: 0.7em; +} + +.totpField { + margin-top: ($theme-spacing) * 2; + width: 100%; +} + +.totpButton { + margin-top: ($theme-spacing); + + button { + width: 100%; + } +} \ No newline at end of file diff --git a/client/src/assets/scss/layouts/PortalLayout/PortalLayout.module.scss b/client/src/assets/scss/layouts/PortalLayout/PortalLayout.module.scss new file mode 100644 index 000000000..0d0d3069d --- /dev/null +++ b/client/src/assets/scss/layouts/PortalLayout/PortalLayout.module.scss @@ -0,0 +1,40 @@ +@import '../../variables.scss'; +@import "@material/theme/mdc-theme"; + +.mainContent { + width: 440px; + margin: auto; + margin-top: 80px; +} + +.title { + font-size: 1.4em; + font-weight: bold; + display: inline-block; + padding-bottom: ($theme-spacing); +} + +.frame { + box-shadow: + rgba(0,0,0,0.14902) 0px 1px 1px 0px, + rgba(0,0,0,0.09804) 0px 1px 2px 0px; + background-color: white; + border-radius: 5px; + padding: 40px; + border-top: 6px solid ($mdc-theme-primary); +} + +.innerFrame { + width: 100%; +} + +.footer { + margin-top: 10px; + text-align: center; + font-size: 0.65em; + color: grey; + + a:visited { + color: grey; + } +} \ No newline at end of file diff --git a/client/src/assets/scss/views/ConfirmationSentView/ConfirmationSentView.module.scss b/client/src/assets/scss/views/ConfirmationSentView/ConfirmationSentView.module.scss new file mode 100644 index 000000000..2ac1291e8 --- /dev/null +++ b/client/src/assets/scss/views/ConfirmationSentView/ConfirmationSentView.module.scss @@ -0,0 +1,26 @@ + +.image { + width: 100%; + display: inline-block +} + +.image img { + width: 64px; + display: block; +} + + +.left { + width: 24%; + display: inline-block; +} + +.right { + width: 76%; + display: inline-block; + vertical-align: top; +} + +.buttonContainer { + padding-top: 20px; +} diff --git a/client/src/assets/scss/views/ForgotPasswordView/ForgotPasswordView.module.scss b/client/src/assets/scss/views/ForgotPasswordView/ForgotPasswordView.module.scss new file mode 100644 index 000000000..02060a026 --- /dev/null +++ b/client/src/assets/scss/views/ForgotPasswordView/ForgotPasswordView.module.scss @@ -0,0 +1,36 @@ +@import '../../variables.scss'; + +.form { + padding-top: ($theme-spacing) * 2; +} + +.field { + width: 100%; +} + +.buttonsContainer { + margin-top: ($theme-spacing) * 2; + width: 100%; +} + +.buttonContainer { + width: 50%; + display: inline-block; + box-sizing: border-box; +} + +.buttonConfirmContainer { + padding-right: ($theme-spacing) / 2; +} + +.buttonConfirm { + width: 100%; +} + +.buttonCancelContainer { + padding-left: ($theme-spacing) / 2; +} + +.buttonCancel { + width: 100%; +} \ No newline at end of file diff --git a/client/src/assets/scss/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.module.scss b/client/src/assets/scss/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.module.scss new file mode 100644 index 000000000..35c860267 --- /dev/null +++ b/client/src/assets/scss/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.module.scss @@ -0,0 +1,64 @@ +@import '../../variables.scss'; + +.secretContainer { + width: 100%; + border: 1px solid #dcdcdc; + border-radius: 10px; + margin-top: ($theme-spacing) * 2; + margin-bottom: ($theme-spacing) * 2; +} + +.qrcodeContainer { + text-align: center; + padding: ($theme-spacing) * 2; +} + +.base32Container { + text-align: center; + border-top: 1px solid #dcdcdc; + padding: ($theme-spacing); + word-wrap: break-word; +} + +.otpauthContainer { + display: none; +} + +.text { + text-align: center; +} + +.needGoogleAuthenticator { + text-align: center; + margin-top: ($theme-spacing) * 2; +} + +.needGoogleAuthenticatorText { + font-size: 0.8em; +} + +.store { + width: 100px; + margin-top: ($theme-spacing) * 0.5; + margin-left: ($theme-spacing) * 0.5; + margin-right: ($theme-spacing) * 0.5; +} + +.buttonContainer { + text-align: center; + padding-top: ($theme-spacing) * 2; +} + +.progressContainer { + text-align: center; + padding-top: ($theme-spacing) * 2, +} + +.button { + margin-left: ($theme-spacing); + margin-right: ($theme-spacing); +} + +.loginButtonContainer { + text-align: center; +} \ No newline at end of file diff --git a/client/src/assets/scss/views/ResetPasswordView/ResetPasswordView.module.scss b/client/src/assets/scss/views/ResetPasswordView/ResetPasswordView.module.scss new file mode 100644 index 000000000..c716fa7a8 --- /dev/null +++ b/client/src/assets/scss/views/ResetPasswordView/ResetPasswordView.module.scss @@ -0,0 +1,32 @@ +@import '../../variables.scss'; + +.form { + margin-top: ($theme-spacing) * 2, +} + +.field { + width: 100%; + margin-bottom: ($theme-spacing) * 2; +} + +.buttonsContainer { + width: 100%; +} + +.buttonContainer { + width: 50%; + box-sizing: border-box; + display: inline-block; +} + +.buttonResetContainer { + padding-right: ($theme-spacing) / 2; +} + +.buttonCancelContainer { + padding-left: ($theme-spacing) / 2; +} + +.button { + width: 100%; +} \ No newline at end of file diff --git a/client/src/assets/scss/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.module.scss b/client/src/assets/scss/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.module.scss new file mode 100644 index 000000000..1486c4f71 --- /dev/null +++ b/client/src/assets/scss/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.module.scss @@ -0,0 +1,18 @@ +@import '../../variables.scss'; + +.infoContainer { + margin-bottom: ($theme-spacing) * 2; +} + +.imageContainer { + text-align: center; + + img { + width: 120px; + } +} + +.retryButtonContainer { + text-align: center; + padding-top: ($theme-spacing) * 2; +} \ No newline at end of file diff --git a/client/src/behaviors/FetchStateBehavior.ts b/client/src/behaviors/FetchStateBehavior.ts new file mode 100644 index 000000000..37db1e2c7 --- /dev/null +++ b/client/src/behaviors/FetchStateBehavior.ts @@ -0,0 +1,19 @@ +import { Dispatch } from "redux"; +import * as AutheliaService from '../services/AutheliaService'; +import { fetchStateFailure, fetchStateSuccess } from "../reducers/Portal/Authentication/actions"; +import to from "await-to-js"; + +export default async function(dispatch: Dispatch) { + let err, res; + [err, res] = await to(AutheliaService.fetchState()); + if (err) { + await dispatch(fetchStateFailure(err.message)); + return; + } + if (!res) { + await dispatch(fetchStateFailure('No response')); + return + } + await dispatch(fetchStateSuccess(res)); + return res; +} \ No newline at end of file diff --git a/client/src/behaviors/LogoutBehavior.ts b/client/src/behaviors/LogoutBehavior.ts new file mode 100644 index 000000000..a6b7b50b3 --- /dev/null +++ b/client/src/behaviors/LogoutBehavior.ts @@ -0,0 +1,18 @@ +import { Dispatch } from "redux"; +import { logout, logoutFailure, logoutSuccess } from "../reducers/Portal/SecondFactor/actions"; +import to from "await-to-js"; +import * as AutheliaService from '../services/AutheliaService'; +import fetchState from "./FetchStateBehavior"; + +export default async function(dispatch: Dispatch) { + await dispatch(logout()); + let err, res; + [err, res] = await to(AutheliaService.postLogout()); + + if (err) { + await dispatch(logoutFailure(err.message)); + return; + } + await dispatch(logoutSuccess()); + await fetchState(dispatch); +} \ No newline at end of file diff --git a/client/src/behaviors/SafelyRedirectBehavior.ts b/client/src/behaviors/SafelyRedirectBehavior.ts new file mode 100644 index 000000000..0d683456f --- /dev/null +++ b/client/src/behaviors/SafelyRedirectBehavior.ts @@ -0,0 +1,15 @@ +import { Dispatch } from "redux"; +import * as AutheliaService from '../services/AutheliaService'; + +export default async function(url: string) { + try { + // Check the url against the backend before redirecting. + await AutheliaService.checkRedirection(url); + window.location.href = url; + } catch (e) { + console.error( + 'Cannot redirect since the URL is not in the protected domain.' + + 'This behavior could be malicious so please the issue to an administrator.'); + throw e; + } +} \ No newline at end of file diff --git a/client/src/components/AlreadyAuthenticated/AlreadyAuthenticated.tsx b/client/src/components/AlreadyAuthenticated/AlreadyAuthenticated.tsx new file mode 100644 index 000000000..d73d636d0 --- /dev/null +++ b/client/src/components/AlreadyAuthenticated/AlreadyAuthenticated.tsx @@ -0,0 +1,43 @@ +import React, { Component } from "react"; +import classnames from 'classnames'; + +import styles from '../../assets/scss/components/AlreadyAuthenticated/AlreadyAuthenticated.module.scss'; +import Button from "@material/react-button"; +import CircleLoader, { Status } from "../CircleLoader/CircleLoader"; + +export interface OwnProps { + username: string; + redirectionUrl: string; +} + +export interface DispatchProps { + onLogoutClicked: () => void; +} + +export type Props = OwnProps & DispatchProps; + +class AlreadyAuthenticated extends Component { + render() { + return ( +
+
+
+ {this.props.username} + you are authenticated +
+
+
+ {this.props.redirectionUrl} +
+ +
+
+ ) + } +} + +export default AlreadyAuthenticated; \ No newline at end of file diff --git a/client/src/components/CircleLoader/CircleLoader.tsx b/client/src/components/CircleLoader/CircleLoader.tsx new file mode 100644 index 000000000..c87dc441a --- /dev/null +++ b/client/src/components/CircleLoader/CircleLoader.tsx @@ -0,0 +1,44 @@ +import React, { Component } from "react"; +import classnames from 'classnames'; + +import styles from '../../assets/scss/components/CircleLoader/CircleLoader.module.scss'; + +export enum Status { + LOADING, + SUCCESSFUL, + FAILURE, +} + +export interface Props { + status: Status; +} + +class CircleLoader extends Component { + render() { + const containerClasses = [styles.circleLoader]; + const checkmarkClasses = [styles.checkmark, styles.draw]; + const crossClasses = [styles.cross, styles.draw]; + + if (this.props.status === Status.SUCCESSFUL) { + containerClasses.push(styles.loadComplete); + containerClasses.push(styles.success); + checkmarkClasses.push(styles.show); + } + else if (this.props.status === Status.FAILURE) { + containerClasses.push(styles.loadComplete); + containerClasses.push(styles.failure); + crossClasses.push(styles.show); + } + + const key = 'container-' + this.props.status; + + return ( +
+ {
} + {
} +
+ ) + } +} + +export default CircleLoader; \ No newline at end of file diff --git a/client/src/components/FirstFactorForm/FirstFactorForm.tsx b/client/src/components/FirstFactorForm/FirstFactorForm.tsx new file mode 100644 index 000000000..57a1d323e --- /dev/null +++ b/client/src/components/FirstFactorForm/FirstFactorForm.tsx @@ -0,0 +1,143 @@ +import React, { Component, KeyboardEvent, FormEvent } from "react"; + +import TextField, {Input} from '@material/react-text-field'; +import Button from '@material/react-button'; +import Checkbox from '@material/react-checkbox'; + +import { Link } from "react-router-dom"; + +import Notification from "../../components/Notification/Notification"; + +import styles from '../../assets/scss/components/FirstFactorForm/FirstFactorForm.module.scss'; + +export interface OwnProps { + redirectionUrl: string | null; +} + +export interface StateProps { + formDisabled: boolean; + error: string | null; +} + +export interface DispatchProps { + onAuthenticationRequested(username: string, password: string, rememberMe: boolean): void; +} + +export type Props = OwnProps & StateProps & DispatchProps; + +interface State { + username: string; + password: string; + rememberMe: boolean; +} + +class FirstFactorForm extends Component { + constructor(props: Props) { + super(props) + this.state = { + username: '', + password: '', + rememberMe: false, + } + } + + toggleRememberMe = () => { + this.setState({ + rememberMe: !(this.state.rememberMe) + }) + } + + onUsernameChanged = (e: FormEvent) => { + const val = (e.target as HTMLInputElement).value; + this.setState({username: val}); + } + + onPasswordChanged = (e: FormEvent) => { + const val = (e.target as HTMLInputElement).value; + this.setState({password: val}); + } + + onLoginClicked = () => { + this.authenticate(); + } + + onPasswordKeyPressed = (e: KeyboardEvent) => { + if (e.key === 'Enter') { + this.authenticate(); + } + } + + render() { + return ( +
+ + {this.props.error || ''} + +
+
+ + + +
+
+ + + +
+
+
+
+ +
+
+
+ + +
+
+ Forgot password? +
+
+
+
+ ) + } + + private authenticate() { + this.props.onAuthenticationRequested( + this.state.username, + this.state.password, + this.state.rememberMe); + } +} + +export default FirstFactorForm; \ No newline at end of file diff --git a/client/src/components/Notification/Notification.tsx b/client/src/components/Notification/Notification.tsx new file mode 100644 index 000000000..46cd27e9c --- /dev/null +++ b/client/src/components/Notification/Notification.tsx @@ -0,0 +1,21 @@ +import React, { Component } from "react"; +import classnames from 'classnames'; + +import styles from '../../assets/scss/components/Notification/Notification.module.scss'; + +interface Props { + className?: string; + show: boolean; +} + +class Notification extends Component { + render() { + return (this.props.show) + ? (
+ {this.props.children} +
) + : null; + } +} + +export default Notification; \ No newline at end of file diff --git a/client/src/components/SecondFactorForm/SecondFactorForm.tsx b/client/src/components/SecondFactorForm/SecondFactorForm.tsx new file mode 100644 index 000000000..a2ac3b3ea --- /dev/null +++ b/client/src/components/SecondFactorForm/SecondFactorForm.tsx @@ -0,0 +1,162 @@ +import React, { Component, KeyboardEvent, FormEvent } from 'react'; +import classnames from 'classnames'; + +import TextField, { Input } from '@material/react-text-field'; +import Button from '@material/react-button'; + +import styles from '../../assets/scss/components/SecondFactorForm/SecondFactorForm.module.scss'; +import CircleLoader, { Status } from '../../components/CircleLoader/CircleLoader'; +import Notification from '../Notification/Notification'; + +export interface OwnProps { + username: string; + redirectionUrl: string | null; +} + +export interface StateProps { + securityKeySupported: boolean; + securityKeyVerified: boolean; + securityKeyError: string | null; + + oneTimePasswordVerificationInProgress: boolean, + oneTimePasswordVerificationError: string | null; +} + +export interface DispatchProps { + onInit: () => void; + onLogoutClicked: () => void; + onRegisterSecurityKeyClicked: () => void; + onRegisterOneTimePasswordClicked: () => void; + + onOneTimePasswordValidationRequested: (token: string) => void; +} + +export type Props = OwnProps & StateProps & DispatchProps; + +interface State { + oneTimePassword: string; +} + +class SecondFactorView extends Component { + constructor(props: Props) { + super(props); + this.state = { + oneTimePassword: '', + } + } + + componentWillMount() { + this.props.onInit(); + } + + private renderU2f(n: number) { + let u2fStatus = Status.LOADING; + if (this.props.securityKeyVerified) { + u2fStatus = Status.SUCCESSFUL; + } else if (this.props.securityKeyError) { + u2fStatus = Status.FAILURE; + } + return ( +
+
Option {n} - Security Key
+
Insert your security key into a USB port and touch the gold disk.
+
+ +
+ +
+ ) + } + + private onOneTimePasswordChanged = (e: FormEvent) => { + this.setState({oneTimePassword: (e.target as HTMLInputElement).value}); + } + + private onTotpKeyPressed = (e: KeyboardEvent) => { + if (e.key === 'Enter') { + this.onOneTimePasswordValidationRequested(); + } + } + + private onOneTimePasswordValidationRequested = () => { + if (this.props.oneTimePasswordVerificationInProgress) return; + this.props.onOneTimePasswordValidationRequested(this.state.oneTimePassword); + } + + private renderTotp(n: number) { + return ( +
+
Option {n} - One-Time Password
+ + {this.props.oneTimePasswordVerificationError} + + + + + +
+ +
+
+ ) + } + + private renderMode() { + const methods = []; + let n = 1; + if (this.props.securityKeySupported) { + methods.push(this.renderU2f(n)); + n++; + } + methods.push(this.renderTotp(n)); + + return ( +
+ {methods} +
+ ); + } + + render() { + return ( +
+
+
Hello {this.props.username}
+
+ Logout +
+
+
+ {this.renderMode()} +
+
+ ) + } +} + +export default SecondFactorView; \ No newline at end of file diff --git a/client/src/constants.ts b/client/src/constants.ts new file mode 100644 index 000000000..2ba816e87 --- /dev/null +++ b/client/src/constants.ts @@ -0,0 +1,3 @@ + +export const AUTHELIA_URL = "https://www.authelia.com/" +export const AUTHELIA_GITHUB_URL = "https://github.com/clems4ever/authelia"; \ No newline at end of file diff --git a/client/src/containers/components/AlreadyAuthenticated/AlreadyAuthenticated.ts b/client/src/containers/components/AlreadyAuthenticated/AlreadyAuthenticated.ts new file mode 100644 index 000000000..5029b5f4e --- /dev/null +++ b/client/src/containers/components/AlreadyAuthenticated/AlreadyAuthenticated.ts @@ -0,0 +1,17 @@ +import { connect } from 'react-redux'; +import { Dispatch } from 'redux'; +import { RootState } from '../../../reducers'; +import AlreadyAuthenticated, { DispatchProps } from '../../../components/AlreadyAuthenticated/AlreadyAuthenticated'; +import LogoutBehavior from '../../../behaviors/LogoutBehavior'; + +const mapStateToProps = (state: RootState) => { + return {}; +} + +const mapDispatchToProps = (dispatch: Dispatch): DispatchProps => { + return { + onLogoutClicked: () => LogoutBehavior(dispatch), + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(AlreadyAuthenticated); \ No newline at end of file diff --git a/client/src/containers/components/FirstFactorForm/FirstFactorForm.ts b/client/src/containers/components/FirstFactorForm/FirstFactorForm.ts new file mode 100644 index 000000000..e47ad6176 --- /dev/null +++ b/client/src/containers/components/FirstFactorForm/FirstFactorForm.ts @@ -0,0 +1,65 @@ +import { connect } from 'react-redux'; +import { Dispatch } from 'redux'; +import { authenticateFailure, authenticateSuccess, authenticate } from '../../../reducers/Portal/FirstFactor/actions'; +import FirstFactorForm, { StateProps, OwnProps } from '../../../components/FirstFactorForm/FirstFactorForm'; +import { RootState } from '../../../reducers'; +import * as AutheliaService from '../../../services/AutheliaService'; +import to from 'await-to-js'; +import FetchStateBehavior from '../../../behaviors/FetchStateBehavior'; +import SafelyRedirectBehavior from '../../../behaviors/SafelyRedirectBehavior'; + +const mapStateToProps = (state: RootState): StateProps => { + return { + error: state.firstFactor.error, + formDisabled: state.firstFactor.loading, + }; +} + +function onAuthenticationRequested(dispatch: Dispatch, redirectionUrl: string | null) { + return async (username: string, password: string, rememberMe: boolean) => { + let err, res; + + // Validate first factor + dispatch(authenticate()); + [err, res] = await to(AutheliaService.postFirstFactorAuth( + username, password, rememberMe, redirectionUrl)); + + if (err) { + await dispatch(authenticateFailure(err.message)); + return; + } + + if (!res) { + await dispatch(authenticateFailure('No response')); + return; + } + + if (res.status === 200) { + const json = await res.json(); + if ('error' in json) { + await dispatch(authenticateFailure(json['error'])); + return; + } + + if ('redirect' in json) { + window.location.href = json['redirect']; + return; + } + } else if (res.status === 204) { + dispatch(authenticateSuccess()); + + // fetch state to move to next stage + FetchStateBehavior(dispatch); + } else { + dispatch(authenticateFailure('Unknown error')); + } + } +} + +const mapDispatchToProps = (dispatch: Dispatch, ownProps: OwnProps) => { + return { + onAuthenticationRequested: onAuthenticationRequested(dispatch, ownProps.redirectionUrl), + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(FirstFactorForm); \ No newline at end of file diff --git a/client/src/containers/components/SecondFactorForm/SecondFactorForm.ts b/client/src/containers/components/SecondFactorForm/SecondFactorForm.ts new file mode 100644 index 000000000..804abdc9e --- /dev/null +++ b/client/src/containers/components/SecondFactorForm/SecondFactorForm.ts @@ -0,0 +1,119 @@ +import { connect } from 'react-redux'; +import { RootState } from '../../../reducers'; +import { Dispatch } from 'redux'; +import u2fApi from 'u2f-api'; +import to from 'await-to-js'; +import { securityKeySignSuccess, securityKeySign, securityKeySignFailure, setSecurityKeySupported, oneTimePasswordVerification, oneTimePasswordVerificationFailure, oneTimePasswordVerificationSuccess } from '../../../reducers/Portal/SecondFactor/actions'; +import SecondFactorForm, { OwnProps, StateProps } from '../../../components/SecondFactorForm/SecondFactorForm'; +import * as AutheliaService from '../../../services/AutheliaService'; +import { push } from 'connected-react-router'; +import fetchState from '../../../behaviors/FetchStateBehavior'; +import LogoutBehavior from '../../../behaviors/LogoutBehavior'; +import SafelyRedirectBehavior from '../../../behaviors/SafelyRedirectBehavior'; + +const mapStateToProps = (state: RootState): StateProps => ({ + securityKeySupported: state.secondFactor.securityKeySupported, + securityKeyVerified: state.secondFactor.securityKeySignSuccess || false, + securityKeyError: state.secondFactor.error, + + oneTimePasswordVerificationInProgress: state.secondFactor.oneTimePasswordVerificationLoading, + oneTimePasswordVerificationError: state.secondFactor.oneTimePasswordVerificationError, +}); + +async function triggerSecurityKeySigning(dispatch: Dispatch) { + let err, result; + dispatch(securityKeySign()); + [err, result] = await to(AutheliaService.requestSigning()); + if (err) { + await dispatch(securityKeySignFailure(err.message)); + throw err; + } + + if (!result) { + await dispatch(securityKeySignFailure('No response')); + throw 'No response'; + } + + [err, result] = await to(u2fApi.sign(result, 60)); + if (err) { + await dispatch(securityKeySignFailure(err.message)); + throw err; + } + + if (!result) { + await dispatch(securityKeySignFailure('No response')); + throw 'No response'; + } + + [err, result] = await to(AutheliaService.completeSecurityKeySigning(result)); + if (err) { + await dispatch(securityKeySignFailure(err.message)); + throw err; + } + await dispatch(securityKeySignSuccess()); +} + +async function handleSuccess(dispatch: Dispatch, ownProps: OwnProps, duration?: number) { + async function handle() { + if (ownProps.redirectionUrl) { + try { + await SafelyRedirectBehavior(ownProps.redirectionUrl); + } catch (e) { + await fetchState(dispatch); + } + } else { + await fetchState(dispatch); + } + } + + if (duration) { + setTimeout(handle, duration); + } else { + await handle(); + } +} + +const mapDispatchToProps = (dispatch: Dispatch, ownProps: OwnProps) => { + return { + onLogoutClicked: () => LogoutBehavior(dispatch), + onRegisterSecurityKeyClicked: async () => { + await AutheliaService.startU2FRegistrationIdentityProcess(); + await dispatch(push('/confirmation-sent')); + }, + onRegisterOneTimePasswordClicked: async () => { + await AutheliaService.startTOTPRegistrationIdentityProcess(); + await dispatch(push('/confirmation-sent')); + }, + onInit: async () => { + const isU2FSupported = await u2fApi.isSupported(); + if (isU2FSupported) { + await dispatch(setSecurityKeySupported(true)); + await triggerSecurityKeySigning(dispatch); + await handleSuccess(dispatch, ownProps, 1000); + } + }, + onOneTimePasswordValidationRequested: async (token: string) => { + let err, res; + dispatch(oneTimePasswordVerification()); + [err, res] = await to(AutheliaService.verifyTotpToken(token)); + if (err) { + dispatch(oneTimePasswordVerificationFailure(err.message)); + throw err; + } + if (!res) { + dispatch(oneTimePasswordVerificationFailure('No response')); + throw 'No response'; + } + + const body = await res.json(); + if ('error' in body) { + dispatch(oneTimePasswordVerificationFailure(body['error'])); + throw body['error']; + } + dispatch(oneTimePasswordVerificationSuccess()); + await handleSuccess(dispatch, ownProps); + }, + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(SecondFactorForm); \ No newline at end of file diff --git a/client/src/containers/layouts/PortalLayout/PortalLayout.ts b/client/src/containers/layouts/PortalLayout/PortalLayout.ts new file mode 100644 index 000000000..f3c52147b --- /dev/null +++ b/client/src/containers/layouts/PortalLayout/PortalLayout.ts @@ -0,0 +1,7 @@ +import { connect } from 'react-redux'; +import PortalLayout from '../../../layouts/PortalLayout/PortalLayout'; +import { RootState } from '../../../reducers'; + +const mapStateToProps = (state: RootState) => ({}); + +export default connect(mapStateToProps)(PortalLayout); \ No newline at end of file diff --git a/client/src/containers/views/AuthenticationView/AuthenticationView.ts b/client/src/containers/views/AuthenticationView/AuthenticationView.ts new file mode 100644 index 000000000..472037194 --- /dev/null +++ b/client/src/containers/views/AuthenticationView/AuthenticationView.ts @@ -0,0 +1,46 @@ +import { connect } from 'react-redux'; +import QueryString from 'query-string'; +import AuthenticationView, {StateProps, Stage, DispatchProps, OwnProps} from '../../../views/AuthenticationView/AuthenticationView'; +import { RootState } from '../../../reducers'; +import { Dispatch } from 'redux'; +import AuthenticationLevel from '../../../types/AuthenticationLevel'; +import FetchStateBehavior from '../../../behaviors/FetchStateBehavior'; + +function authenticationLevelToStage(level: AuthenticationLevel): Stage { + switch (level) { + case AuthenticationLevel.NOT_AUTHENTICATED: + return Stage.FIRST_FACTOR; + case AuthenticationLevel.ONE_FACTOR: + return Stage.SECOND_FACTOR; + case AuthenticationLevel.TWO_FACTOR: + return Stage.ALREADY_AUTHENTICATED; + } +} + +const mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => { + const stage = (state.authentication.remoteState) + ? authenticationLevelToStage(state.authentication.remoteState.authentication_level) + : Stage.FIRST_FACTOR; + + let url: string | null = null; + if (ownProps.location) { + const params = QueryString.parse(ownProps.location.search); + if ('rd' in params) { + url = params['rd'] as string; + } + } + + return { + redirectionUrl: url, + remoteState: state.authentication.remoteState, + stage: stage, + }; +} + +const mapDispatchToProps = (dispatch: Dispatch) => { + return { + onInit: async () => await FetchStateBehavior(dispatch) + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(AuthenticationView); \ No newline at end of file diff --git a/client/src/containers/views/ForgotPasswordView/ForgotPasswordView.ts b/client/src/containers/views/ForgotPasswordView/ForgotPasswordView.ts new file mode 100644 index 000000000..53fc7721a --- /dev/null +++ b/client/src/containers/views/ForgotPasswordView/ForgotPasswordView.ts @@ -0,0 +1,31 @@ +import { connect } from 'react-redux'; +import { RootState } from '../../../reducers'; +import { Dispatch } from 'redux'; +import { push } from 'connected-react-router'; +import * as AutheliaService from '../../../services/AutheliaService'; +import ForgotPasswordView from '../../../views/ForgotPasswordView/ForgotPasswordView'; +import { forgotPasswordRequest, forgotPasswordSuccess, forgotPasswordFailure } from '../../../reducers/Portal/ForgotPassword/actions'; + +const mapStateToProps = (state: RootState) => ({ + disabled: state.forgotPassword.loading, +}); + +const mapDispatchToProps = (dispatch: Dispatch) => { + return { + onPasswordResetRequested: async (username: string) => { + try { + dispatch(forgotPasswordRequest()); + await AutheliaService.initiatePasswordResetIdentityValidation(username); + dispatch(forgotPasswordSuccess()); + await dispatch(push('/confirmation-sent')); + } catch (err) { + dispatch(forgotPasswordFailure(err.message)); + } + }, + onCancelClicked: async () => { + dispatch(push('/')); + } + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(ForgotPasswordView); \ No newline at end of file diff --git a/client/src/containers/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.ts b/client/src/containers/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.ts new file mode 100644 index 000000000..f724b3458 --- /dev/null +++ b/client/src/containers/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.ts @@ -0,0 +1,68 @@ +import { connect } from 'react-redux'; +import OneTimePasswordRegistrationView from '../../../views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView'; +import { RootState } from '../../../reducers'; +import { Dispatch } from 'redux'; +import {to} from 'await-to-js'; +import { generateTotpSecret, generateTotpSecretSuccess, generateTotpSecretFailure } from '../../../reducers/Portal/OneTimePasswordRegistration/actions'; +import { push } from 'connected-react-router'; + +const mapStateToProps = (state: RootState) => ({ + error: state.oneTimePasswordRegistration.error, + secret: state.oneTimePasswordRegistration.secret, +}); + +async function checkIdentity(token: string) { + return fetch(`/api/secondfactor/totp/identity/finish?token=${token}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }) + .then(async (res) => { + if (res.status !== 200) { + throw new Error('Status code ' + res.status); + } + + const body = await res.json(); + if ('error' in body) { + throw new Error(body['error']); + } + return body; + }); +} + +async function tryGenerateTotpSecret(dispatch: Dispatch, token: string) { + let err, result; + dispatch(generateTotpSecret()); + [err, result] = await to(checkIdentity(token)); + if (err) { + const e = err; + setTimeout(() => { + dispatch(generateTotpSecretFailure(e.message)); + }, 2000); + return; + } + dispatch(generateTotpSecretSuccess(result)); +} + +const mapDispatchToProps = (dispatch: Dispatch) => { + let internalToken: string; + return { + onInit: async (token: string) => { + internalToken = token; + await tryGenerateTotpSecret(dispatch, internalToken); + }, + onRetryClicked: async () => { + await tryGenerateTotpSecret(dispatch, internalToken); + }, + onCancelClicked: () => { + dispatch(push('/')); + }, + onLoginClicked: () => { + dispatch(push('/')); + } + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(OneTimePasswordRegistrationView); \ No newline at end of file diff --git a/client/src/containers/views/ResetPasswordView/ResetPasswordView.ts b/client/src/containers/views/ResetPasswordView/ResetPasswordView.ts new file mode 100644 index 000000000..60840c171 --- /dev/null +++ b/client/src/containers/views/ResetPasswordView/ResetPasswordView.ts @@ -0,0 +1,27 @@ +import { connect } from 'react-redux'; +import { RootState } from '../../../reducers'; +import { Dispatch } from 'redux'; +import { push } from 'connected-react-router'; +import * as AutheliaService from '../../../services/AutheliaService'; +import ResetPasswordView, { StateProps } from '../../../views/ResetPasswordView/ResetPasswordView'; + +const mapStateToProps = (state: RootState): StateProps => ({ + disabled: state.resetPassword.loading, +}); + +const mapDispatchToProps = (dispatch: Dispatch) => { + return { + onInit: async (token: string) => { + await AutheliaService.completePasswordResetIdentityValidation(token); + }, + onPasswordResetRequested: async (newPassword: string) => { + await AutheliaService.resetPassword(newPassword); + await dispatch(push('/')); + }, + onCancelClicked: async () => { + await dispatch(push('/')); + } + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(ResetPasswordView); \ No newline at end of file diff --git a/client/src/containers/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.ts b/client/src/containers/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.ts new file mode 100644 index 000000000..f51fcb45e --- /dev/null +++ b/client/src/containers/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.ts @@ -0,0 +1,90 @@ +import { connect } from 'react-redux'; +import SecurityKeyRegistrationView from '../../../views/SecurityKeyRegistrationView/SecurityKeyRegistrationView'; +import { RootState } from '../../../reducers'; +import { Dispatch } from 'redux'; +import {to} from 'await-to-js'; +import * as U2fApi from "u2f-api"; +import { Props } from '../../../views/SecurityKeyRegistrationView/SecurityKeyRegistrationView'; +import { registerSecurityKey, registerSecurityKeyFailure, registerSecurityKeySuccess } from '../../../reducers/Portal/SecurityKeyRegistration/actions'; + +const mapStateToProps = (state: RootState) => ({ + deviceRegistered: state.securityKeyRegistration.success, + error: state.securityKeyRegistration.error, +}); + +async function checkIdentity(token: string) { + return fetch(`/api/secondfactor/u2f/identity/finish?token=${token}`, { + method: 'POST', + }); +} + +async function requestRegistration() { + return fetch('/api/u2f/register_request') + .then(async (res) => { + if (res.status !== 200) { + throw new Error('Status code ' + res.status); + } + return res.json(); + }); +} + +async function completeRegistration(response: U2fApi.RegisterResponse) { + return fetch('/api/u2f/register', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(response), + }) + .then(async (res) => { + if (res.status !== 200) { + throw new Error('Status code ' + res.status); + } + }); +} + +function fail(dispatch: Dispatch, err: Error) { + dispatch(registerSecurityKeyFailure(err.message)); +} + +const mapDispatchToProps = (dispatch: Dispatch, ownProps: Props) => { + return { + onInit: async (token: string) => { + let err, result; + dispatch(registerSecurityKey()); + [err, result] = await to(checkIdentity(token)); + if (err) { + fail(dispatch, err); + return; + } + [err, result] = await to(requestRegistration()); + if (err) { + fail(dispatch, err); + return; + } + + [err, result] = await to(U2fApi.register(result, [], 60)); + if (err) { + fail(dispatch, err); + return; + } + + [err, result] = await to(completeRegistration(result as U2fApi.RegisterResponse)); + if (err) { + fail(dispatch, err); + return; + } + + dispatch(registerSecurityKeySuccess()); + setTimeout(() => { + ownProps.history.push('/2fa'); + }, 2000); + }, + onBackClicked: () => { + ownProps.history.push('/2fa'); + } + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(SecurityKeyRegistrationView); \ No newline at end of file diff --git a/client/src/css/00-bootstrap.min.css b/client/src/css/00-bootstrap.min.css deleted file mode 100644 index ed3905e0e..000000000 --- a/client/src/css/00-bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/client/src/css/01-main.css b/client/src/css/01-main.css deleted file mode 100644 index ead0852a7..000000000 --- a/client/src/css/01-main.css +++ /dev/null @@ -1,67 +0,0 @@ -body { - background-image: url("/img/background.svg"); -} -.authelia-brand { - font-weight: bold; - font-style: italic; - color: #648caf -} -.poweredby-block { - margin: 0px 30px; - margin-top: 10px; - padding-top: 15px; - border-top: 1px solid rgba(0, 0, 0, 0.15); -} -.poweredby { - font-size: 0.7em; - color: #6b6b6b; -} -/* notifications */ -.notification { - padding: 10px; - margin: 15px 0px; - border-radius: 6px; - display: none; - position: absolute; -} -.notification img { - width: 24px; - margin-right: 10px; -} -.notification i, -.notification span { - display:table-cell; - vertical-align:middle; -} -.info { - border: 1px solid #9cb1ff; - background-color: rgb(192, 220, 255); -} -.success { - border: 1px solid #65ec7c; - background-color: rgb(163, 255, 157); -} -.error { - border: 1px solid #ffa3a3; - background-color: rgb(255, 175, 175); -} -.warning { - border: 1px solid #ffd743; - background-color: rgb(255, 230, 143); -} -.bottom-right-links { - text-align: right; - margin-top: 10px; - font-size: 0.8em; -} -.header { - background-color: #778dab; - color: white; - margin: 0px; -} -.body { - padding: 10px; -} -h1 { - font-size: 25px; -} diff --git a/client/src/css/02-login.css b/client/src/css/02-login.css deleted file mode 100644 index aa59733d3..000000000 --- a/client/src/css/02-login.css +++ /dev/null @@ -1,132 +0,0 @@ -.form-signin -{ - margin: 0 auto; -} - -.form-signin .form-signin-heading, .form-signin .checkbox -{ - margin-bottom: 10px; -} - -.form-signin .checkbox -{ - font-weight: normal; -} - -.form-signin .form-control -{ - position: relative; - font-size: 16px; - height: auto; - padding: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-signin .form-control:focus -{ - z-index: 2; -} -.form-signin input[type="text"] -{ - margin-bottom: -1px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.form-signin input[type="password"] -{ - /* margin-bottom: 10px; */ - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.account-wall -{ - border: 1px solid #DDD; - margin-top: 20px; - padding-bottom: 20px; - background-color: #f7f7f7; - -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); - box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); -} -.account-wall h1 -{ - margin-bottom: 15px; - margin-top: 15px; - font-weight: 800; - display: block; - text-align: center; -} -.account-wall h3 -{ - display: block; - text-align: center; -} -.account-wall p -{ - text-align: center; - margin: 10px; -} -.account-wall .form-inputs -{ - margin-bottom: 10px; -} -.account-wall hr { - border-color: #c5c5c5; -} - -.header-img -{ - width: 96px; - height: 96px; - margin: 0 auto 10px; - display: block; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - border-radius: 50%; -} - -.link -{ - margin-top: 10px; -} - -.btn-primary.totp -{ - background-color: rgb(102, 135, 162); -} - -.btn-primary.u2f -{ - background-color: rgb(83, 149, 204); -} - -.u2f-token { - text-align: center; -} - -.u2f-token img { - width: 70px; -} - -.keep-me-logged-in { - margin-top: 10px; - font-size: 0.8em; -} - -.keep-me-logged-in input[type=checkbox] { - transform: scale(0.8); - margin: 0; - margin-right: 4px; -} - -.keep-me-logged-in label { - font-weight: 300; -} - -.keep-me-logged-in input, -.keep-me-logged-in label { - display: inline-block; - margin-bottom: 0; /* I added this after I posted my reply */ - vertical-align: middle; /* Fixes any weird issues in Firefox and IE */ -} \ No newline at end of file diff --git a/client/src/css/03-errors.css b/client/src/css/03-errors.css deleted file mode 100644 index e9f97f33b..000000000 --- a/client/src/css/03-errors.css +++ /dev/null @@ -1,12 +0,0 @@ - -.error-401 .header-img { - border-radius: 0%; -} - -.error-403 .header-img { - border-radius: 0%; -} - -.error-404 .header-img { - border-radius: 0%; -} \ No newline at end of file diff --git a/client/src/css/03-password-reset-form.css b/client/src/css/03-password-reset-form.css deleted file mode 100644 index 34066bc24..000000000 --- a/client/src/css/03-password-reset-form.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-form .header-img { - border-radius: 0%; -} diff --git a/client/src/css/03-password-reset-request.css b/client/src/css/03-password-reset-request.css deleted file mode 100644 index 1a2ad4df8..000000000 --- a/client/src/css/03-password-reset-request.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-request .header-img { - border-radius: 0%; -} diff --git a/client/src/css/03-totp-register.css b/client/src/css/03-totp-register.css deleted file mode 100644 index cb76720ad..000000000 --- a/client/src/css/03-totp-register.css +++ /dev/null @@ -1,22 +0,0 @@ -.totp-register #secret { - background-color: white; - font-size: 0.9em; - font-weight: bold; - padding: 5px; - border: 1px solid #c7c7c7; - word-wrap: break-word; -} -.totp-register #qrcode img { - margin: 10px auto; -} -.totp-register .need-google-authenticator { - text-align: center; - margin-top: 20px; -} -.totp-register .store-badges { - margin-top: 5px; -} -.totp-register .store-badge { - width: 110px; - height: 30px; -} \ No newline at end of file diff --git a/client/src/css/03-u2f-register.css b/client/src/css/03-u2f-register.css deleted file mode 100644 index e54cddf89..000000000 --- a/client/src/css/03-u2f-register.css +++ /dev/null @@ -1,5 +0,0 @@ - -.u2f-register img { - display: block; - margin: 20px auto; -} \ No newline at end of file diff --git a/client/src/img/background.svg b/client/src/img/background.svg deleted file mode 100644 index 93b00339b..000000000 --- a/client/src/img/background.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/client/src/img/icon.png b/client/src/img/icon.png deleted file mode 100644 index 040d10c1a..000000000 Binary files a/client/src/img/icon.png and /dev/null differ diff --git a/client/src/img/notifications/error.png b/client/src/img/notifications/error.png deleted file mode 100644 index bf64d28f7..000000000 Binary files a/client/src/img/notifications/error.png and /dev/null differ diff --git a/client/src/img/notifications/info.png b/client/src/img/notifications/info.png deleted file mode 100644 index 67928e88c..000000000 Binary files a/client/src/img/notifications/info.png and /dev/null differ diff --git a/client/src/img/notifications/success.png b/client/src/img/notifications/success.png deleted file mode 100644 index d3998392d..000000000 Binary files a/client/src/img/notifications/success.png and /dev/null differ diff --git a/client/src/img/notifications/warning.png b/client/src/img/notifications/warning.png deleted file mode 100644 index ab8b54ffc..000000000 Binary files a/client/src/img/notifications/warning.png and /dev/null differ diff --git a/client/src/img/padlock.png b/client/src/img/padlock.png deleted file mode 100644 index 31abbaeef..000000000 Binary files a/client/src/img/padlock.png and /dev/null differ diff --git a/client/src/img/password.png b/client/src/img/password.png deleted file mode 100644 index cf6164740..000000000 Binary files a/client/src/img/password.png and /dev/null differ diff --git a/client/src/img/pendrive.png b/client/src/img/pendrive.png deleted file mode 100644 index fa49178c3..000000000 Binary files a/client/src/img/pendrive.png and /dev/null differ diff --git a/client/src/img/success.png b/client/src/img/success.png deleted file mode 100644 index ee9d6841b..000000000 Binary files a/client/src/img/success.png and /dev/null differ diff --git a/client/src/img/user.png b/client/src/img/user.png deleted file mode 100644 index 00941399d..000000000 Binary files a/client/src/img/user.png and /dev/null differ diff --git a/client/src/img/warning.png b/client/src/img/warning.png deleted file mode 100644 index c6acd953b..000000000 Binary files a/client/src/img/warning.png and /dev/null differ diff --git a/client/src/index.css b/client/src/index.css new file mode 100644 index 000000000..4821f2cce --- /dev/null +++ b/client/src/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; + background: #eee; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", + monospace; +} diff --git a/client/src/index.ts b/client/src/index.ts deleted file mode 100644 index 6c22d17c7..000000000 --- a/client/src/index.ts +++ /dev/null @@ -1,34 +0,0 @@ - -import FirstFactorValidator = require("./lib/firstfactor/FirstFactorValidator"); - -import FirstFactor from "./lib/firstfactor/index"; -import SecondFactor from "./lib/secondfactor/index"; -import TOTPRegister from "./lib/totp-register/totp-register"; -import U2fRegister from "./lib/u2f-register/u2f-register"; -import ResetPasswordRequest from "./lib/reset-password/reset-password-request"; -import ResetPasswordForm from "./lib/reset-password/reset-password-form"; -import jslogger = require("js-logger"); -import jQuery = require("jquery"); -import Endpoints = require("../../shared/api"); - -jslogger.useDefaults(); -jslogger.setLevel(jslogger.INFO); - -(function () { - (window).jQuery = jQuery; - require("bootstrap"); - - jQuery('[data-toggle="tooltip"]').tooltip(); - if (window.location.pathname == Endpoints.FIRST_FACTOR_GET) - FirstFactor(window, jQuery, FirstFactorValidator, jslogger); - else if (window.location.pathname == Endpoints.SECOND_FACTOR_GET) - SecondFactor(window, jQuery); - else if (window.location.pathname == Endpoints.SECOND_FACTOR_TOTP_IDENTITY_FINISH_GET) - TOTPRegister(window, jQuery); - else if (window.location.pathname == Endpoints.SECOND_FACTOR_U2F_IDENTITY_FINISH_GET) - U2fRegister(window, jQuery); - else if (window.location.pathname == Endpoints.RESET_PASSWORD_IDENTITY_FINISH_GET) - ResetPasswordForm(window, jQuery); - else if (window.location.pathname == Endpoints.RESET_PASSWORD_REQUEST_GET) - ResetPasswordRequest(window, jQuery); -})(); diff --git a/client/src/index.tsx b/client/src/index.tsx new file mode 100644 index 000000000..0c5e75da1 --- /dev/null +++ b/client/src/index.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import * as serviceWorker from './serviceWorker'; + +ReactDOM.render(, document.getElementById('root')); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: http://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/client/src/layouts/PortalLayout/PortalLayout.tsx b/client/src/layouts/PortalLayout/PortalLayout.tsx new file mode 100644 index 000000000..eb9760e41 --- /dev/null +++ b/client/src/layouts/PortalLayout/PortalLayout.tsx @@ -0,0 +1,52 @@ +import React, { Component } from "react"; + +import { Route, Switch, Redirect, RouterProps, RouteProps } from "react-router"; + +import { routes } from '../../routes/routes'; +import { AUTHELIA_GITHUB_URL } from "../../constants"; + +import styles from '../../assets/scss/layouts/PortalLayout/PortalLayout.module.scss'; + +interface Props extends RouterProps, RouteProps {} + +class PortalLayout extends Component { + private renderTitle() { + if (!this.props.location) return; + + for (let i in routes) { + const route = routes[i]; + if (route.path && route.path.indexOf(this.props.location.pathname) > -1) { + return route.title.toUpperCase(); + } + } + return; + } + + + render() { + return ( +
+
+
+ {this.renderTitle()} +
+
+
+ + {routes.map((r, key) => { + return + })} + + +
+
+ +
+
+ ) + } +} + +export default PortalLayout; \ No newline at end of file diff --git a/client/src/lib/GetPromised.ts b/client/src/lib/GetPromised.ts deleted file mode 100644 index 779139654..000000000 --- a/client/src/lib/GetPromised.ts +++ /dev/null @@ -1,14 +0,0 @@ -import BluebirdPromise = require("bluebird"); - -export default function ($: JQueryStatic, url: string, data: Object, fn: any, - dataType: string): BluebirdPromise { - return new BluebirdPromise((resolve, reject) => { - $.get(url, {}, undefined, dataType) - .done((data: any) => { - resolve(data); - }) - .fail((xhr: JQueryXHR, textStatus: string) => { - reject(textStatus); - }); - }); -} \ No newline at end of file diff --git a/client/src/lib/INotifier.ts b/client/src/lib/INotifier.ts deleted file mode 100644 index df947538f..000000000 --- a/client/src/lib/INotifier.ts +++ /dev/null @@ -1,14 +0,0 @@ - -declare type Handler = () => void; - -export interface Handlers { - onFadedIn: Handler; - onFadedOut: Handler; -} - -export interface INotifier { - success(msg: string, handlers?: Handlers): void; - error(msg: string, handlers?: Handlers): void; - warning(msg: string, handlers?: Handlers): void; - info(msg: string, handlers?: Handlers): void; -} \ No newline at end of file diff --git a/client/src/lib/Notifier.ts b/client/src/lib/Notifier.ts deleted file mode 100644 index c0252b9b9..000000000 --- a/client/src/lib/Notifier.ts +++ /dev/null @@ -1,83 +0,0 @@ - - -import util = require("util"); -import { INotifier, Handlers } from "./INotifier"; - -class NotificationEvent { - private element: JQuery; - private message: string; - private statusType: string; - private timeoutId: any; - - constructor(element: JQuery, msg: string, statusType: string) { - this.message = msg; - this.statusType = statusType; - this.element = element; - } - - private clearNotification() { - this.element.removeClass(this.statusType); - this.element.html(""); - } - - start(handlers?: Handlers) { - const that = this; - const FADE_TIME = 500; - const html = util.format('status %s\ - %s', this.statusType, this.statusType, this.message); - this.element.html(html); - this.element.addClass(this.statusType); - this.element.fadeIn(FADE_TIME, function () { - if (handlers) - handlers.onFadedIn(); - }); - - this.timeoutId = setTimeout(function () { - that.element.fadeOut(FADE_TIME, function () { - that.clearNotification(); - if (handlers) - handlers.onFadedOut(); - }); - }, 4000); - } - - interrupt() { - this.clearNotification(); - this.element.hide(); - clearTimeout(this.timeoutId); - } -} - -export class Notifier implements INotifier { - private element: JQuery; - private onGoingEvent: NotificationEvent; - - constructor(selector: string, $: JQueryStatic) { - this.element = $(selector); - this.onGoingEvent = undefined; - } - - private displayAndFadeout(msg: string, statusType: string, handlers?: Handlers): void { - if (this.onGoingEvent) - this.onGoingEvent.interrupt(); - - this.onGoingEvent = new NotificationEvent(this.element, msg, statusType); - this.onGoingEvent.start(handlers); - } - - success(msg: string, handlers?: Handlers) { - this.displayAndFadeout(msg, "success", handlers); - } - - error(msg: string, handlers?: Handlers) { - this.displayAndFadeout(msg, "error", handlers); - } - - warning(msg: string, handlers?: Handlers) { - this.displayAndFadeout(msg, "warning", handlers); - } - - info(msg: string, handlers?: Handlers) { - this.displayAndFadeout(msg, "info", handlers); - } -} \ No newline at end of file diff --git a/client/src/lib/QueryParametersRetriever.ts b/client/src/lib/QueryParametersRetriever.ts deleted file mode 100644 index a529adb6e..000000000 --- a/client/src/lib/QueryParametersRetriever.ts +++ /dev/null @@ -1,12 +0,0 @@ - -export class QueryParametersRetriever { - static get(name: string, url?: string): string { - if (!url) url = window.location.href; - name = name.replace(/[\[\]]/g, "\\$&"); - const regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), - results = regex.exec(url); - if (!results) return undefined; - if (!results[2]) return ""; - return decodeURIComponent(results[2].replace(/\+/g, " ")); - } -} \ No newline at end of file diff --git a/client/src/lib/SafeRedirect.ts b/client/src/lib/SafeRedirect.ts deleted file mode 100644 index 7e7684b8a..000000000 --- a/client/src/lib/SafeRedirect.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { BelongToDomain } from "../../../shared/BelongToDomain"; - -export function SafeRedirect(url: string, cb: () => void): void { - const domain = window.location.hostname.split(".").slice(-2).join("."); - if (url.startsWith("/") || BelongToDomain(url, domain)) { - window.location.href = url; - return; - } - cb(); -} \ No newline at end of file diff --git a/client/src/lib/firstfactor/FirstFactorValidator.ts b/client/src/lib/firstfactor/FirstFactorValidator.ts deleted file mode 100644 index eaa496fdd..000000000 --- a/client/src/lib/firstfactor/FirstFactorValidator.ts +++ /dev/null @@ -1,46 +0,0 @@ - -import BluebirdPromise = require("bluebird"); -import Endpoints = require("../../../../shared/api"); -import Constants = require("../../../../shared/constants"); -import Util = require("util"); -import UserMessages = require("../../../../shared/UserMessages"); - -export function validate(username: string, password: string, - keepMeLoggedIn: boolean, redirectUrl: string, $: JQueryStatic) - : BluebirdPromise { - return new BluebirdPromise(function (resolve, reject) { - let url: string; - if (redirectUrl != undefined) { - const redirectParam = Util.format("%s=%s", Constants.REDIRECT_QUERY_PARAM, redirectUrl); - url = Util.format("%s?%s", Endpoints.FIRST_FACTOR_POST, redirectParam); - } - else { - url = Util.format("%s", Endpoints.FIRST_FACTOR_POST); - } - - const data: any = { - username: username, - password: password, - }; - - if (keepMeLoggedIn) { - data.keepMeLoggedIn = "true"; - } - - $.ajax({ - method: "POST", - url: url, - data: data - }) - .done(function (body: any) { - if (body && body.error) { - reject(new Error(body.error)); - return; - } - resolve(body.redirect); - }) - .fail(function (xhr: JQueryXHR, textStatus: string) { - reject(new Error(UserMessages.AUTHENTICATION_FAILED)); - }); - }); -} diff --git a/client/src/lib/firstfactor/UISelectors.ts b/client/src/lib/firstfactor/UISelectors.ts deleted file mode 100644 index 0e971b3c3..000000000 --- a/client/src/lib/firstfactor/UISelectors.ts +++ /dev/null @@ -1,5 +0,0 @@ - -export const USERNAME_FIELD_ID = "#username"; -export const PASSWORD_FIELD_ID = "#password"; -export const SIGN_IN_BUTTON_ID = "#signin"; -export const KEEP_ME_LOGGED_IN_ID = "#keep_me_logged_in"; diff --git a/client/src/lib/firstfactor/index.ts b/client/src/lib/firstfactor/index.ts deleted file mode 100644 index 24affee2d..000000000 --- a/client/src/lib/firstfactor/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import FirstFactorValidator = require("./FirstFactorValidator"); -import JSLogger = require("js-logger"); -import UISelectors = require("./UISelectors"); -import { Notifier } from "../Notifier"; -import { QueryParametersRetriever } from "../QueryParametersRetriever"; -import Constants = require("../../../../shared/constants"); -import Endpoints = require("../../../../shared/api"); -import UserMessages = require("../../../../shared/UserMessages"); -import { SafeRedirect } from "../SafeRedirect"; - -export default function (window: Window, $: JQueryStatic, - firstFactorValidator: typeof FirstFactorValidator, jslogger: typeof JSLogger) { - - const notifier = new Notifier(".notification", $); - - function onFormSubmitted() { - const username: string = $(UISelectors.USERNAME_FIELD_ID).val() as string; - const password: string = $(UISelectors.PASSWORD_FIELD_ID).val() as string; - const keepMeLoggedIn: boolean = $(UISelectors.KEEP_ME_LOGGED_IN_ID).is(":checked"); - - $("form").css("opacity", 0.5); - $("input,button").attr("disabled", "true"); - $(UISelectors.SIGN_IN_BUTTON_ID).text("Please wait..."); - - const redirectUrl = QueryParametersRetriever.get(Constants.REDIRECT_QUERY_PARAM); - firstFactorValidator.validate(username, password, keepMeLoggedIn, redirectUrl, $) - .then(onFirstFactorSuccess, onFirstFactorFailure); - return false; - } - - function onFirstFactorSuccess(redirectUrl: string) { - SafeRedirect(redirectUrl, () => { - notifier.error("Cannot redirect to an external domain."); - }); - } - - function onFirstFactorFailure(err: Error) { - $("input,button").removeAttr("disabled"); - $("form").css("opacity", 1); - notifier.error(UserMessages.AUTHENTICATION_FAILED); - $(UISelectors.PASSWORD_FIELD_ID).select(); - $(UISelectors.SIGN_IN_BUTTON_ID).text("Sign in"); - } - - $(window.document).ready(function () { - $("form").on("submit", onFormSubmitted); - }); -} - diff --git a/client/src/lib/reset-password/constants.ts b/client/src/lib/reset-password/constants.ts deleted file mode 100644 index d48d4e67d..000000000 --- a/client/src/lib/reset-password/constants.ts +++ /dev/null @@ -1,2 +0,0 @@ - -export const FORM_SELECTOR = ".form-signin"; \ No newline at end of file diff --git a/client/src/lib/reset-password/reset-password-form.ts b/client/src/lib/reset-password/reset-password-form.ts deleted file mode 100644 index b94279cde..000000000 --- a/client/src/lib/reset-password/reset-password-form.ts +++ /dev/null @@ -1,57 +0,0 @@ -import BluebirdPromise = require("bluebird"); - -import Endpoints = require("../../../../shared/api"); -import UserMessages = require("../../../../shared/UserMessages"); - -import Constants = require("./constants"); -import { Notifier } from "../Notifier"; - -export default function (window: Window, $: JQueryStatic) { - const notifier = new Notifier(".notification", $); - - function modifyPassword(newPassword: string) { - return new BluebirdPromise(function (resolve, reject) { - $.post(Endpoints.RESET_PASSWORD_FORM_POST, { - password: newPassword, - }) - .done(function (body: any) { - if (body && body.error) { - reject(new Error(body.error)); - return; - } - resolve(body); - }) - .fail(function (xhr, status) { - reject(status); - }); - }); - } - - function onFormSubmitted() { - const password1 = $("#password1").val() as string; - const password2 = $("#password2").val() as string; - - if (!password1 || !password2) { - notifier.warning(UserMessages.MISSING_PASSWORD); - return false; - } - - if (password1 != password2) { - notifier.warning(UserMessages.DIFFERENT_PASSWORDS); - return false; - } - - modifyPassword(password1) - .then(function () { - window.location.href = Endpoints.FIRST_FACTOR_GET; - }) - .error(function () { - notifier.error(UserMessages.RESET_PASSWORD_FAILED); - }); - return false; - } - - $(document).ready(function () { - $(Constants.FORM_SELECTOR).on("submit", onFormSubmitted); - }); -} diff --git a/client/src/lib/reset-password/reset-password-request.ts b/client/src/lib/reset-password/reset-password-request.ts deleted file mode 100644 index 846226d75..000000000 --- a/client/src/lib/reset-password/reset-password-request.ts +++ /dev/null @@ -1,56 +0,0 @@ - -import BluebirdPromise = require("bluebird"); - -import Endpoints = require("../../../../shared/api"); -import UserMessages = require("../../../../shared/UserMessages"); -import Constants = require("./constants"); -import jslogger = require("js-logger"); -import { Notifier } from "../Notifier"; - -export default function (window: Window, $: JQueryStatic) { - const notifier = new Notifier(".notification", $); - - function requestPasswordReset(username: string) { - return new BluebirdPromise(function (resolve, reject) { - $.get(Endpoints.RESET_PASSWORD_IDENTITY_START_GET, { - userid: username, - }) - .done(function (body: any) { - if (body && body.error) { - reject(new Error(body.error)); - return; - } - resolve(); - }) - .fail(function (xhr: JQueryXHR, textStatus: string) { - reject(new Error(textStatus)); - }); - }); - } - - function onFormSubmitted() { - const username = $("#username").val() as string; - - if (!username) { - notifier.warning(UserMessages.MISSING_USERNAME); - return; - } - - requestPasswordReset(username) - .then(function () { - notifier.success(UserMessages.MAIL_SENT); - setTimeout(function () { - window.location.replace(Endpoints.FIRST_FACTOR_GET); - }, 1000); - }) - .error(function () { - notifier.error(UserMessages.MAIL_NOT_SENT); - }); - return false; - } - - $(document).ready(function () { - $(Constants.FORM_SELECTOR).on("submit", onFormSubmitted); - }); -} - diff --git a/client/src/lib/secondfactor/TOTPValidator.ts b/client/src/lib/secondfactor/TOTPValidator.ts deleted file mode 100644 index 5394139a6..000000000 --- a/client/src/lib/secondfactor/TOTPValidator.ts +++ /dev/null @@ -1,28 +0,0 @@ - -import BluebirdPromise = require("bluebird"); -import Endpoints = require("../../../../shared/api"); -import { RedirectionMessage } from "../../../../shared/RedirectionMessage"; -import { ErrorMessage } from "../../../../shared/ErrorMessage"; - -export function validate(token: string, $: JQueryStatic): BluebirdPromise { - return new BluebirdPromise(function (resolve, reject) { - $.ajax({ - url: Endpoints.SECOND_FACTOR_TOTP_POST, - data: { - token: token, - }, - method: "POST", - dataType: "json" - } as JQueryAjaxSettings) - .done(function (body: RedirectionMessage | ErrorMessage) { - if (body && "error" in body) { - reject(new Error((body as ErrorMessage).error)); - return; - } - resolve((body as RedirectionMessage).redirect); - }) - .fail(function (xhr: JQueryXHR, textStatus: string) { - reject(new Error(textStatus)); - }); - }); -} \ No newline at end of file diff --git a/client/src/lib/secondfactor/U2FValidator.ts b/client/src/lib/secondfactor/U2FValidator.ts deleted file mode 100644 index 5812922f7..000000000 --- a/client/src/lib/secondfactor/U2FValidator.ts +++ /dev/null @@ -1,42 +0,0 @@ -import U2f = require("u2f"); -import U2fApi from "u2f-api"; -import BluebirdPromise = require("bluebird"); -import Endpoints = require("../../../../shared/api"); -import UserMessages = require("../../../../shared/UserMessages"); -import { INotifier } from "../INotifier"; -import { RedirectionMessage } from "../../../../shared/RedirectionMessage"; -import { ErrorMessage } from "../../../../shared/ErrorMessage"; -import GetPromised from "../GetPromised"; - -function finishU2fAuthentication(responseData: U2fApi.SignResponse, - $: JQueryStatic): BluebirdPromise { - return new BluebirdPromise(function (resolve, reject) { - $.ajax({ - url: Endpoints.SECOND_FACTOR_U2F_SIGN_POST, - data: responseData, - method: "POST", - dataType: "json" - } as JQueryAjaxSettings) - .done(function (body: RedirectionMessage | ErrorMessage) { - if (body && "error" in body) { - reject(new Error((body as ErrorMessage).error)); - return; - } - resolve((body as RedirectionMessage).redirect); - }) - .fail(function (xhr: JQueryXHR, textStatus: string) { - reject(new Error(textStatus)); - }); - }); -} - -export function validate($: JQueryStatic): BluebirdPromise { - return GetPromised($, Endpoints.SECOND_FACTOR_U2F_SIGN_REQUEST_GET, {}, - undefined, "json") - .then(function (signRequest: U2f.Request) { - return U2fApi.sign(signRequest, 60); - }) - .then(function (signResponse: U2fApi.SignResponse) { - return finishU2fAuthentication(signResponse, $); - }); -} diff --git a/client/src/lib/secondfactor/constants.ts b/client/src/lib/secondfactor/constants.ts deleted file mode 100644 index 50bba7571..000000000 --- a/client/src/lib/secondfactor/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ - -export const TOTP_FORM_SELECTOR = ".form-signin.totp"; -export const TOTP_TOKEN_SELECTOR = ".form-signin #token"; diff --git a/client/src/lib/secondfactor/index.ts b/client/src/lib/secondfactor/index.ts deleted file mode 100644 index 279723dce..000000000 --- a/client/src/lib/secondfactor/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import TOTPValidator = require("./TOTPValidator"); -import U2FValidator = require("./U2FValidator"); -import ClientConstants = require("./constants"); -import { Notifier } from "../Notifier"; -import { QueryParametersRetriever } from "../QueryParametersRetriever"; -import UserMessages = require("../../../../shared/UserMessages"); -import SharedConstants = require("../../../../shared/constants"); -import { SafeRedirect } from "../SafeRedirect"; - -export default function (window: Window, $: JQueryStatic) { - const notifier = new Notifier(".notification", $); - - function onAuthenticationSuccess(serverRedirectUrl: string) { - const queryRedirectUrl = QueryParametersRetriever.get(SharedConstants.REDIRECT_QUERY_PARAM); - if (queryRedirectUrl) { - SafeRedirect(queryRedirectUrl, () => { - notifier.error(UserMessages.CANNOT_REDIRECT_TO_EXTERNAL_DOMAIN); - }); - } else if (serverRedirectUrl) { - SafeRedirect(serverRedirectUrl, () => { - notifier.error(UserMessages.CANNOT_REDIRECT_TO_EXTERNAL_DOMAIN); - }); - } else { - notifier.success(UserMessages.AUTHENTICATION_SUCCEEDED); - } - } - - function onSecondFactorTotpSuccess(redirectUrl: string) { - onAuthenticationSuccess(redirectUrl); - } - - function onSecondFactorTotpFailure(err: Error) { - notifier.error(UserMessages.AUTHENTICATION_TOTP_FAILED); - } - - function onU2fAuthenticationSuccess(redirectUrl: string) { - onAuthenticationSuccess(redirectUrl); - } - - function onU2fAuthenticationFailure() { - // TODO(clems4ever): we should not display this error message until a device - // is registered. - // notifier.error(UserMessages.AUTHENTICATION_U2F_FAILED); - } - - function onTOTPFormSubmitted(): boolean { - const token = $(ClientConstants.TOTP_TOKEN_SELECTOR).val() as string; - TOTPValidator.validate(token, $) - .then(onSecondFactorTotpSuccess) - .catch(onSecondFactorTotpFailure); - return false; - } - - $(window.document).ready(function () { - $(ClientConstants.TOTP_FORM_SELECTOR).on("submit", onTOTPFormSubmitted); - U2FValidator.validate($) - .then(onU2fAuthenticationSuccess, onU2fAuthenticationFailure); - }); -} \ No newline at end of file diff --git a/client/src/lib/totp-register/totp-register.ts b/client/src/lib/totp-register/totp-register.ts deleted file mode 100644 index 6a9aa7ee0..000000000 --- a/client/src/lib/totp-register/totp-register.ts +++ /dev/null @@ -1,11 +0,0 @@ - -import jslogger = require("js-logger"); -import UISelector = require("./ui-selector"); - -export default function(window: Window, $: JQueryStatic) { - jslogger.debug("Creating QRCode from OTPAuth url"); - const qrcode = $(UISelector.QRCODE_ID_SELECTOR); - const val = qrcode.text(); - qrcode.empty(); - new (window as any).QRCode(qrcode.get(0), val); -} diff --git a/client/src/lib/totp-register/ui-selector.ts b/client/src/lib/totp-register/ui-selector.ts deleted file mode 100644 index 9d43fabea..000000000 --- a/client/src/lib/totp-register/ui-selector.ts +++ /dev/null @@ -1,2 +0,0 @@ - -export const QRCODE_ID_SELECTOR = "#qrcode"; \ No newline at end of file diff --git a/client/src/lib/u2f-register/u2f-register.ts b/client/src/lib/u2f-register/u2f-register.ts deleted file mode 100644 index abf40ee05..000000000 --- a/client/src/lib/u2f-register/u2f-register.ts +++ /dev/null @@ -1,56 +0,0 @@ - -import BluebirdPromise = require("bluebird"); -import U2f = require("u2f"); -import * as U2fApi from "u2f-api"; -import { Notifier } from "../Notifier"; -import GetPromised from "../GetPromised"; -import Endpoints = require("../../../../shared/api"); -import UserMessages = require("../../../../shared/UserMessages"); -import { RedirectionMessage } from "../../../../shared/RedirectionMessage"; -import { ErrorMessage } from "../../../../shared/ErrorMessage"; -import { SafeRedirect } from "../SafeRedirect"; - -export default function (window: Window, $: JQueryStatic) { - const notifier = new Notifier(".notification", $); - - function checkRegistration(regResponse: U2fApi.RegisterResponse): BluebirdPromise { - return new BluebirdPromise(function (resolve, reject) { - $.post(Endpoints.SECOND_FACTOR_U2F_REGISTER_POST, regResponse, undefined, "json") - .done((body: RedirectionMessage | ErrorMessage) => { - if (body && "error" in body) { - reject(new Error((body as ErrorMessage).error)); - return; - } - resolve((body as RedirectionMessage).redirect); - }) - .fail((xhr, status) => { - reject(new Error("Failed to register device.")); - }); - }); - } - - function requestRegistration(): BluebirdPromise { - return GetPromised($, Endpoints.SECOND_FACTOR_U2F_REGISTER_REQUEST_GET, {}, - undefined, "json") - .then((registrationRequest: U2f.Request) => { - return U2fApi.register(registrationRequest, [], 60); - }) - .then((res) => checkRegistration(res)); - } - - function onRegisterFailure(err: Error) { - notifier.error(UserMessages.REGISTRATION_U2F_FAILED); - } - - $(document).ready(function () { - requestRegistration() - .then((redirectionUrl: string) => { - SafeRedirect(redirectionUrl, () => { - notifier.error(UserMessages.CANNOT_REDIRECT_TO_EXTERNAL_DOMAIN); - }); - }) - .catch((err) => { - onRegisterFailure(err); - }); - }); -} diff --git a/client/src/react-app-env.d.ts b/client/src/react-app-env.d.ts new file mode 100644 index 000000000..6431bc5fc --- /dev/null +++ b/client/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/client/src/reducers/Portal/Authentication/actions.ts b/client/src/reducers/Portal/Authentication/actions.ts new file mode 100644 index 000000000..ff0da5dc1 --- /dev/null +++ b/client/src/reducers/Portal/Authentication/actions.ts @@ -0,0 +1,20 @@ +import { createAction } from 'typesafe-actions'; +import { + FETCH_STATE_REQUEST, + FETCH_STATE_SUCCESS, + FETCH_STATE_FAILURE, +} from "../../constants"; +import RemoteState from '../../../views/AuthenticationView/RemoteState'; + +/* FETCH_STATE */ +export const fetchState = createAction(FETCH_STATE_REQUEST); +export const fetchStateSuccess = createAction(FETCH_STATE_SUCCESS, resolve => { + return (state: RemoteState) => { + return resolve(state); + } +}); +export const fetchStateFailure = createAction(FETCH_STATE_FAILURE, resolve => { + return (err: string) => { + return resolve(err); + } +}); \ No newline at end of file diff --git a/client/src/reducers/Portal/Authentication/reducer.ts b/client/src/reducers/Portal/Authentication/reducer.ts new file mode 100644 index 000000000..c298ebe10 --- /dev/null +++ b/client/src/reducers/Portal/Authentication/reducer.ts @@ -0,0 +1,43 @@ + +import * as Actions from './actions'; +import { ActionType, getType } from 'typesafe-actions'; +import RemoteState from '../../../views/AuthenticationView/RemoteState'; + +export type Action = ActionType; + +interface State { + remoteState: RemoteState | null; + remoteStateLoading: boolean; + remoteStateError: string | null; +} + +const initialState: State = { + remoteState: null, + remoteStateLoading: false, + remoteStateError: null, +} + +export default (state = initialState, action: Action): State => { + switch(action.type) { + case getType(Actions.fetchState): + return { + ...state, + remoteState: null, + remoteStateError: null, + remoteStateLoading: true, + }; + case getType(Actions.fetchStateSuccess): + return { + ...state, + remoteState: action.payload, + remoteStateLoading: false, + }; + case getType(Actions.fetchStateFailure): + return { + ...state, + remoteStateError: action.payload, + remoteStateLoading: false, + }; + } + return state; +} \ No newline at end of file diff --git a/client/src/reducers/Portal/FirstFactor/actions.ts b/client/src/reducers/Portal/FirstFactor/actions.ts new file mode 100644 index 000000000..cbbf2cdd2 --- /dev/null +++ b/client/src/reducers/Portal/FirstFactor/actions.ts @@ -0,0 +1,13 @@ +import { createAction } from 'typesafe-actions'; +import { + AUTHENTICATE_REQUEST, + AUTHENTICATE_SUCCESS, + AUTHENTICATE_FAILURE +} from "../../constants"; + +/* AUTHENTICATE_REQUEST */ +export const authenticate = createAction(AUTHENTICATE_REQUEST); +export const authenticateSuccess = createAction(AUTHENTICATE_SUCCESS); +export const authenticateFailure = createAction(AUTHENTICATE_FAILURE, resolve => { + return (error: string) => resolve(error); +}); diff --git a/client/src/reducers/Portal/FirstFactor/reducer.ts b/client/src/reducers/Portal/FirstFactor/reducer.ts new file mode 100644 index 000000000..f7aa685db --- /dev/null +++ b/client/src/reducers/Portal/FirstFactor/reducer.ts @@ -0,0 +1,49 @@ + +import * as Actions from './actions'; +import { ActionType, getType } from 'typesafe-actions'; + +export type FirstFactorAction = ActionType; + +enum Result { + NONE, + SUCCESS, + FAILURE, +} + +interface FirstFactorState { + lastResult: Result; + loading: boolean; + error: string | null; +} + +const firstFactorInitialState: FirstFactorState = { + lastResult: Result.NONE, + loading: false, + error: null, +} + +export default (state = firstFactorInitialState, action: FirstFactorAction): FirstFactorState => { + switch(action.type) { + case getType(Actions.authenticate): + return { + ...state, + loading: true, + error: null + }; + case getType(Actions.authenticateSuccess): + return { + ...state, + lastResult: Result.SUCCESS, + loading: false, + error: null, + }; + case getType(Actions.authenticateFailure): + return { + ...state, + lastResult: Result.FAILURE, + loading: false, + error: action.payload, + }; + } + return state; +} \ No newline at end of file diff --git a/client/src/reducers/Portal/ForgotPassword/actions.ts b/client/src/reducers/Portal/ForgotPassword/actions.ts new file mode 100644 index 000000000..9182dfa93 --- /dev/null +++ b/client/src/reducers/Portal/ForgotPassword/actions.ts @@ -0,0 +1,13 @@ +import { createAction } from 'typesafe-actions'; +import { + FORGOT_PASSWORD_REQUEST, + FORGOT_PASSWORD_SUCCESS, + FORGOT_PASSWORD_FAILURE +} from "../../constants"; + +/* AUTHENTICATE_REQUEST */ +export const forgotPasswordRequest = createAction(FORGOT_PASSWORD_REQUEST); +export const forgotPasswordSuccess = createAction(FORGOT_PASSWORD_SUCCESS); +export const forgotPasswordFailure = createAction(FORGOT_PASSWORD_FAILURE, resolve => { + return (error: string) => resolve(error); +}); diff --git a/client/src/reducers/Portal/ForgotPassword/reducer.ts b/client/src/reducers/Portal/ForgotPassword/reducer.ts new file mode 100644 index 000000000..d210eb63a --- /dev/null +++ b/client/src/reducers/Portal/ForgotPassword/reducer.ts @@ -0,0 +1,44 @@ + +import * as Actions from './actions'; +import { ActionType, getType } from 'typesafe-actions'; + +export type Action = ActionType; + + +interface State { + loading: boolean; + success: boolean | null; + error: string | null; +} + +const initialState: State = { + loading: false, + success: null, + error: null, +} + +export default (state = initialState, action: Action): State => { + switch(action.type) { + case getType(Actions.forgotPasswordRequest): + return { + ...state, + loading: true, + error: null + }; + case getType(Actions.forgotPasswordSuccess): + return { + ...state, + success: true, + loading: false, + error: null, + }; + case getType(Actions.forgotPasswordFailure): + return { + ...state, + success: false, + loading: false, + error: action.payload, + }; + } + return state; +} \ No newline at end of file diff --git a/client/src/reducers/Portal/OneTimePasswordRegistration/actions.ts b/client/src/reducers/Portal/OneTimePasswordRegistration/actions.ts new file mode 100644 index 000000000..f9a90dba3 --- /dev/null +++ b/client/src/reducers/Portal/OneTimePasswordRegistration/actions.ts @@ -0,0 +1,13 @@ +import { createAction } from "typesafe-actions"; +import { GENERATE_TOTP_SECRET_REQUEST, GENERATE_TOTP_SECRET_SUCCESS, GENERATE_TOTP_SECRET_FAILURE } from "../../constants"; +import { Secret } from "../../../views/OneTimePasswordRegistrationView/Secret"; + + +/* GENERATE_TOTP_SECRET_REQUEST */ +export const generateTotpSecret = createAction(GENERATE_TOTP_SECRET_REQUEST); +export const generateTotpSecretSuccess = createAction(GENERATE_TOTP_SECRET_SUCCESS, resolve => { + return (secret: Secret) => resolve(secret); +}); +export const generateTotpSecretFailure = createAction(GENERATE_TOTP_SECRET_FAILURE, resolve => { + return (error: string) => resolve(error); +}); diff --git a/client/src/reducers/Portal/OneTimePasswordRegistration/reducer.ts b/client/src/reducers/Portal/OneTimePasswordRegistration/reducer.ts new file mode 100644 index 000000000..0ac990418 --- /dev/null +++ b/client/src/reducers/Portal/OneTimePasswordRegistration/reducer.ts @@ -0,0 +1,41 @@ +import { ActionType, getType } from "typesafe-actions"; +import * as Actions from './actions'; +import { Secret } from "../../../views/OneTimePasswordRegistrationView/Secret"; + +type OneTimePasswordRegistrationAction = ActionType + +export interface OneTimePasswordRegistrationState { + loading: boolean; + error: string | null; + secret: Secret | null; +} + +let oneTimePasswordRegistrationInitialState: OneTimePasswordRegistrationState = { + loading: true, + error: null, + secret: null, +} + +export default (state = oneTimePasswordRegistrationInitialState, action: OneTimePasswordRegistrationAction): OneTimePasswordRegistrationState => { + switch(action.type) { + case getType(Actions.generateTotpSecret): + return { + loading: true, + error: null, + secret: null, + }; + case getType(Actions.generateTotpSecretSuccess): + return { + ...state, + loading: false, + secret: action.payload, + } + case getType(Actions.generateTotpSecretFailure): + return { + ...state, + loading: false, + error: action.payload, + } + } + return state; +} \ No newline at end of file diff --git a/client/src/reducers/Portal/ResetPassword/actions.ts b/client/src/reducers/Portal/ResetPassword/actions.ts new file mode 100644 index 000000000..9220ec435 --- /dev/null +++ b/client/src/reducers/Portal/ResetPassword/actions.ts @@ -0,0 +1,9 @@ +import { createAction } from 'typesafe-actions'; +import { RESET_PASSWORD_REQUEST, RESET_PASSWORD_SUCCESS, RESET_PASSWORD_FAILURE } from "../../constants"; + +/* AUTHENTICATE_REQUEST */ +export const resetPasswordRequest = createAction(RESET_PASSWORD_REQUEST); +export const resetPasswordSuccess = createAction(RESET_PASSWORD_SUCCESS); +export const resetPasswordFailure = createAction(RESET_PASSWORD_FAILURE, resolve => { + return (error: string) => resolve(error); +}); diff --git a/client/src/reducers/Portal/ResetPassword/reducer.ts b/client/src/reducers/Portal/ResetPassword/reducer.ts new file mode 100644 index 000000000..8d415ac9e --- /dev/null +++ b/client/src/reducers/Portal/ResetPassword/reducer.ts @@ -0,0 +1,44 @@ + +import * as Actions from './actions'; +import { ActionType, getType } from 'typesafe-actions'; + +export type Action = ActionType; + + +interface State { + loading: boolean; + success: boolean | null; + error: string | null; +} + +const initialState: State = { + loading: false, + success: null, + error: null, +} + +export default (state = initialState, action: Action): State => { + switch(action.type) { + case getType(Actions.resetPasswordRequest): + return { + ...state, + loading: true, + error: null + }; + case getType(Actions.resetPasswordSuccess): + return { + ...state, + success: true, + loading: false, + error: null, + }; + case getType(Actions.resetPasswordFailure): + return { + ...state, + success: false, + loading: false, + error: action.payload, + }; + } + return state; +} \ No newline at end of file diff --git a/client/src/reducers/Portal/SecondFactor/actions.ts b/client/src/reducers/Portal/SecondFactor/actions.ts new file mode 100644 index 000000000..c934824ef --- /dev/null +++ b/client/src/reducers/Portal/SecondFactor/actions.ts @@ -0,0 +1,36 @@ +import { createAction } from "typesafe-actions"; +import { + LOGOUT_REQUEST, + LOGOUT_SUCCESS, + LOGOUT_FAILURE, + SECURITY_KEY_SIGN, + SECURITY_KEY_SIGN_SUCCESS, + SECURITY_KEY_SIGN_FAILURE, + SET_SECURITY_KEY_SUPPORTED, + ONE_TIME_PASSWORD_VERIFICATION_REQUEST, + ONE_TIME_PASSWORD_VERIFICATION_SUCCESS, + ONE_TIME_PASSWORD_VERIFICATION_FAILURE +} from "../../constants"; + +export const setSecurityKeySupported = createAction(SET_SECURITY_KEY_SUPPORTED, resolve => { + return (supported: boolean) => resolve(supported); +}) + +export const securityKeySign = createAction(SECURITY_KEY_SIGN); +export const securityKeySignSuccess = createAction(SECURITY_KEY_SIGN_SUCCESS); +export const securityKeySignFailure = createAction(SECURITY_KEY_SIGN_FAILURE, resolve => { + return (error: string) => resolve(error); +}); + +export const oneTimePasswordVerification = createAction(ONE_TIME_PASSWORD_VERIFICATION_REQUEST); +export const oneTimePasswordVerificationSuccess = createAction(ONE_TIME_PASSWORD_VERIFICATION_SUCCESS); +export const oneTimePasswordVerificationFailure = createAction(ONE_TIME_PASSWORD_VERIFICATION_FAILURE, resolve => { + return (err: string) => resolve(err); +}); + + +export const logout = createAction(LOGOUT_REQUEST); +export const logoutSuccess = createAction(LOGOUT_SUCCESS); +export const logoutFailure = createAction(LOGOUT_FAILURE, resolve => { + return (error: string) => resolve(error); +}); diff --git a/client/src/reducers/Portal/SecondFactor/reducer.ts b/client/src/reducers/Portal/SecondFactor/reducer.ts new file mode 100644 index 000000000..86a446122 --- /dev/null +++ b/client/src/reducers/Portal/SecondFactor/reducer.ts @@ -0,0 +1,104 @@ + +import * as Actions from './actions'; +import { ActionType, getType, StateType } from 'typesafe-actions'; + +export type SecondFactorAction = ActionType; + +interface SecondFactorState { + logoutLoading: boolean; + logoutSuccess: boolean | null; + error: string | null; + + securityKeySupported: boolean; + securityKeySignLoading: boolean; + securityKeySignSuccess: boolean | null; + + oneTimePasswordVerificationLoading: boolean, + oneTimePasswordVerificationSuccess: boolean | null, + oneTimePasswordVerificationError: string | null, +} + +const secondFactorInitialState: SecondFactorState = { + logoutLoading: false, + logoutSuccess: null, + error: null, + + securityKeySupported: false, + securityKeySignLoading: false, + securityKeySignSuccess: null, + + oneTimePasswordVerificationLoading: false, + oneTimePasswordVerificationError: null, + oneTimePasswordVerificationSuccess: null, +} + +export type PortalState = StateType; + +export default (state = secondFactorInitialState, action: SecondFactorAction): SecondFactorState => { + switch(action.type) { + case getType(Actions.logout): + return { + ...state, + logoutLoading: true, + logoutSuccess: null, + error: null, + }; + case getType(Actions.logoutSuccess): + return { + ...state, + logoutLoading: false, + logoutSuccess: true, + }; + case getType(Actions.logoutFailure): + return { + ...state, + logoutLoading: false, + error: action.payload, + } + + case getType(Actions.securityKeySign): + return { + ...state, + securityKeySignLoading: true, + securityKeySignSuccess: false, + }; + case getType(Actions.securityKeySignSuccess): + return { + ...state, + securityKeySignLoading: false, + securityKeySignSuccess: true, + }; + case getType(Actions.securityKeySignFailure): + return { + ...state, + securityKeySignLoading: false, + securityKeySignSuccess: false, + }; + + case getType(Actions.setSecurityKeySupported): + return { + ...state, + securityKeySupported: action.payload, + }; + + case getType(Actions.oneTimePasswordVerification): + return { + ...state, + oneTimePasswordVerificationLoading: true, + oneTimePasswordVerificationError: null, + } + case getType(Actions.oneTimePasswordVerificationSuccess): + return { + ...state, + oneTimePasswordVerificationLoading: false, + oneTimePasswordVerificationSuccess: true, + } + case getType(Actions.oneTimePasswordVerificationFailure): + return { + ...state, + oneTimePasswordVerificationLoading: false, + oneTimePasswordVerificationError: action.payload, + } + } + return state; +} \ No newline at end of file diff --git a/client/src/reducers/Portal/SecurityKeyRegistration/actions.ts b/client/src/reducers/Portal/SecurityKeyRegistration/actions.ts new file mode 100644 index 000000000..8ee3b4148 --- /dev/null +++ b/client/src/reducers/Portal/SecurityKeyRegistration/actions.ts @@ -0,0 +1,8 @@ +import { createAction } from "typesafe-actions"; +import { REGISTER_SECURITY_KEY_REQUEST, REGISTER_SECURITY_KEY_SUCCESS, REGISTER_SECURITY_KEY_FAILURE } from "../../constants"; + +export const registerSecurityKey = createAction(REGISTER_SECURITY_KEY_REQUEST); +export const registerSecurityKeySuccess = createAction(REGISTER_SECURITY_KEY_SUCCESS); +export const registerSecurityKeyFailure = createAction(REGISTER_SECURITY_KEY_FAILURE, resolve => { + return (error: string) => resolve(error); +}); diff --git a/client/src/reducers/Portal/SecurityKeyRegistration/reducer.ts b/client/src/reducers/Portal/SecurityKeyRegistration/reducer.ts new file mode 100644 index 000000000..00ff3c530 --- /dev/null +++ b/client/src/reducers/Portal/SecurityKeyRegistration/reducer.ts @@ -0,0 +1,36 @@ +import { ActionType, getType } from "typesafe-actions"; +import * as Actions from './actions'; + +type SecurityKeyRegistrationAction = ActionType + +export interface SecurityKeyRegistrationState { + error: string | null; + success: boolean | null; +} + +let securityKeyRegistrationInitialState: SecurityKeyRegistrationState = { + error: null, + success: null, +} + +export default (state = securityKeyRegistrationInitialState, action: SecurityKeyRegistrationAction): SecurityKeyRegistrationState => { + switch(action.type) { + case getType(Actions.registerSecurityKey): + return { + success: null, + error: null, + }; + case getType(Actions.registerSecurityKeySuccess): + return { + ...state, + success: true, + }; + case getType(Actions.registerSecurityKeyFailure): + return { + ...state, + success: false, + error: action.payload, + }; + } + return state; +} \ No newline at end of file diff --git a/client/src/reducers/Portal/index.ts b/client/src/reducers/Portal/index.ts new file mode 100644 index 000000000..65265caa9 --- /dev/null +++ b/client/src/reducers/Portal/index.ts @@ -0,0 +1,28 @@ +import { combineReducers } from 'redux'; + +import FirstFactorReducer from './FirstFactor/reducer'; +import SecondFactorReducer from './SecondFactor/reducer'; +import OneTimePasswordRegistrationReducer from './OneTimePasswordRegistration/reducer'; +import SecurityKeyRegistrationReducer from './SecurityKeyRegistration/reducer'; +import AuthenticationReducer from './Authentication/reducer'; +import ForgotPasswordReducer from './ForgotPassword/reducer'; +import ResetPasswordReducer from './ResetPassword/reducer'; + +import { connectRouter } from 'connected-react-router' +import { History } from 'history'; + +function reducer(history: History) { + return combineReducers({ + router: connectRouter(history), + authentication: AuthenticationReducer, + firstFactor: FirstFactorReducer, + secondFactor: SecondFactorReducer, + oneTimePasswordRegistration: OneTimePasswordRegistrationReducer, + securityKeyRegistration: SecurityKeyRegistrationReducer, + forgotPassword: ForgotPasswordReducer, + resetPassword: ResetPasswordReducer, + }); +} + + +export default reducer; \ No newline at end of file diff --git a/client/src/reducers/constants.ts b/client/src/reducers/constants.ts new file mode 100644 index 000000000..232e13ce7 --- /dev/null +++ b/client/src/reducers/constants.ts @@ -0,0 +1,44 @@ + +export const FETCH_STATE_REQUEST = '@portal/fetch_state_request'; +export const FETCH_STATE_SUCCESS = '@portal/fetch_state_success'; +export const FETCH_STATE_FAILURE = '@portal/fetch_state_failure'; + +// AUTHENTICATION PROCESS +export const AUTHENTICATE_REQUEST = '@portal/authenticate_request'; +export const AUTHENTICATE_SUCCESS = '@portal/authenticate_success'; +export const AUTHENTICATE_FAILURE = '@portal/authenticate_failure'; + +// SECOND FACTOR PAGE +export const SET_SECURITY_KEY_SUPPORTED = '@portal/second_factor/set_security_key_supported'; + +export const SECURITY_KEY_SIGN = '@portal/second_factor/security_key_sign'; +export const SECURITY_KEY_SIGN_SUCCESS = '@portal/second_factor/security_key_sign_success'; +export const SECURITY_KEY_SIGN_FAILURE = '@portal/second_factor/security_key_sign_failure'; + +export const ONE_TIME_PASSWORD_VERIFICATION_REQUEST = '@portal/second_factor/one_time_password_verification_request'; +export const ONE_TIME_PASSWORD_VERIFICATION_SUCCESS = '@portal/second_factor/one_time_password_verification_success'; +export const ONE_TIME_PASSWORD_VERIFICATION_FAILURE = '@portal/second_factor/one_time_password_verification_failure'; + +export const LOGOUT_REQUEST = '@portal/logout_request'; +export const LOGOUT_SUCCESS = '@portal/logout_success'; +export const LOGOUT_FAILURE = '@portal/logout_failure'; + +// TOTP REGISTRATION +export const GENERATE_TOTP_SECRET_REQUEST = '@portal/generate_totp_secret_request'; +export const GENERATE_TOTP_SECRET_SUCCESS = '@portal/generate_totp_secret_success'; +export const GENERATE_TOTP_SECRET_FAILURE = '@portal/generate_totp_secret_failure'; + +// U2F REGISTRATION +export const REGISTER_SECURITY_KEY_REQUEST = '@portal/security_key_registration/register_request'; +export const REGISTER_SECURITY_KEY_SUCCESS = '@portal/security_key_registration/register_success'; +export const REGISTER_SECURITY_KEY_FAILURE = '@portal/security_key_registration/register_failed'; + +// FORGOT PASSWORD +export const FORGOT_PASSWORD_REQUEST = '@portal/forgot_password/forgot_password_request'; +export const FORGOT_PASSWORD_SUCCESS = '@portal/forgot_password/forgot_password_success'; +export const FORGOT_PASSWORD_FAILURE = '@portal/forgot_password/forgot_password_failure'; + +// FORGOT PASSWORD +export const RESET_PASSWORD_REQUEST = '@portal/forgot_password/reset_password_request'; +export const RESET_PASSWORD_SUCCESS = '@portal/forgot_password/reset_password_success'; +export const RESET_PASSWORD_FAILURE = '@portal/forgot_password/reset_password_failure'; \ No newline at end of file diff --git a/client/src/reducers/index.ts b/client/src/reducers/index.ts new file mode 100644 index 000000000..8458f5230 --- /dev/null +++ b/client/src/reducers/index.ts @@ -0,0 +1,12 @@ +import PortalReducer from './Portal'; +import { StateType } from 'typesafe-actions'; + +function getReturnType (f: (...args: any[]) => R): R { + return null!; +} + +const t = getReturnType(PortalReducer) + +export type RootState = StateType; + +export default PortalReducer; \ No newline at end of file diff --git a/client/src/routes/index.ts b/client/src/routes/index.ts new file mode 100644 index 000000000..731c0a05f --- /dev/null +++ b/client/src/routes/index.ts @@ -0,0 +1,6 @@ +import PortalLayout from "../containers/layouts/PortalLayout/PortalLayout"; + +export const routes = [{ + path: '/', + component: PortalLayout +}]; \ No newline at end of file diff --git a/client/src/routes/routes.ts b/client/src/routes/routes.ts new file mode 100644 index 000000000..7fe058ac3 --- /dev/null +++ b/client/src/routes/routes.ts @@ -0,0 +1,32 @@ +import ConfirmationSentView from "../views/ConfirmationSentView/ConfirmationSentView"; +import OneTimePasswordRegistrationView from "../containers/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView"; +import SecurityKeyRegistrationView from "../containers/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView"; +import ForgotPasswordView from "../containers/views/ForgotPasswordView/ForgotPasswordView"; +import ResetPasswordView from "../containers/views/ResetPasswordView/ResetPasswordView"; +import AuthenticationView from "../containers/views/AuthenticationView/AuthenticationView"; + +export const routes = [{ + path: '/', + title: 'Sign in', + component: AuthenticationView, +}, { + path: '/confirmation-sent', + title: 'e-mail sent', + component: ConfirmationSentView +}, { + path: '/one-time-password-registration', + title: 'One-time password', + component: OneTimePasswordRegistrationView, +}, { + path: '/security-key-registration', + title: 'Security key', + component: SecurityKeyRegistrationView, +}, { + path: '/forgot-password', + title: 'Forgot password', + component: ForgotPasswordView, +}, { + path: '/reset-password', + title: 'Reset password', + component: ResetPasswordView, +}] \ No newline at end of file diff --git a/client/src/serviceWorker.ts b/client/src/serviceWorker.ts new file mode 100644 index 000000000..86af82ce8 --- /dev/null +++ b/client/src/serviceWorker.ts @@ -0,0 +1,135 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read http://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.1/8 is considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config: any) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit http://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl: any, config: any) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See http://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl: any, config: any) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister(); + }); + } +} diff --git a/client/src/services/AutheliaService.ts b/client/src/services/AutheliaService.ts new file mode 100644 index 000000000..ed77fdff2 --- /dev/null +++ b/client/src/services/AutheliaService.ts @@ -0,0 +1,146 @@ +import RemoteState from "../views/AuthenticationView/RemoteState"; +import u2fApi, { SignRequest } from "u2f-api"; + +async function fetchSafe(url: string, options?: RequestInit) { + return fetch(url, options) + .then(async (res) => { + if (res.status !== 200 && res.status !== 204) { + throw new Error('Status code ' + res.status); + } + return res; + }); +} + +/** + * Fetch current authentication state. + */ +export async function fetchState() { + return fetchSafe('/api/state') + .then(async (res) => { + const body = await res.json() as RemoteState; + return body; + }); +} + +export async function postFirstFactorAuth(username: string, password: string, + rememberMe: boolean, redirectionUrl: string | null) { + + const headers: Record = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + } + + if (redirectionUrl) { + headers['X-Target-Url'] = redirectionUrl; + } + + return fetchSafe('/api/firstfactor', { + method: 'POST', + headers: headers, + body: JSON.stringify({ + username: username, + password: password, + keepMeLoggedIn: rememberMe, + }) + }); +} + +export async function postLogout() { + return fetchSafe('/api/logout', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }) +} + +export async function startU2FRegistrationIdentityProcess() { + return fetchSafe('/api/secondfactor/u2f/identity/start', { + method: 'POST', + }); +} + +export async function startTOTPRegistrationIdentityProcess() { + return fetchSafe('/api/secondfactor/totp/identity/start', { + method: 'POST', + }); +} + +export async function requestSigning() { + return fetchSafe('/api/u2f/sign_request') + .then(async (res) => { + const body = await res.json(); + return body as SignRequest; + }); +} + +export async function completeSecurityKeySigning(response: u2fApi.SignResponse) { + return fetchSafe('/api/u2f/sign', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(response), + }); +} + +export async function verifyTotpToken(token: string) { + return fetchSafe('/api/totp', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({token}), + }) +} + +export async function initiatePasswordResetIdentityValidation(username: string) { + return fetchSafe('/api/password-reset/identity/start', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({username}) + }); +} + +export async function completePasswordResetIdentityValidation(token: string) { + return fetch(`/api/password-reset/identity/finish?token=${token}`, { + method: 'POST', + }); +} + +export async function resetPassword(newPassword: string) { + return fetchSafe('/api/password-reset', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({password: newPassword}) + }); +} + +export async function checkRedirection(url: string) { + const res = await fetch('/api/redirect', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({url}) + }) + + if (res.status !== 200) { + throw new Error('Status code ' + res.status); + } + + const text = await res.text(); + if (text !== 'OK') { + throw new Error('Cannot redirect'); + } + return; +} \ No newline at end of file diff --git a/client/src/thirdparties/qrcode.min.js b/client/src/thirdparties/qrcode.min.js deleted file mode 100644 index 993e88f39..000000000 --- a/client/src/thirdparties/qrcode.min.js +++ /dev/null @@ -1 +0,0 @@ -var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/client/src/types/AuthenticationLevel.ts b/client/src/types/AuthenticationLevel.ts new file mode 100644 index 000000000..550cc947c --- /dev/null +++ b/client/src/types/AuthenticationLevel.ts @@ -0,0 +1,7 @@ +enum AuthenticationLevel { + NOT_AUTHENTICATED = 0, + ONE_FACTOR = 1, + TWO_FACTOR = 2 +}; + +export default AuthenticationLevel; \ No newline at end of file diff --git a/client/src/views/AuthenticationView/AuthenticationView.tsx b/client/src/views/AuthenticationView/AuthenticationView.tsx new file mode 100644 index 000000000..c6bba5d85 --- /dev/null +++ b/client/src/views/AuthenticationView/AuthenticationView.tsx @@ -0,0 +1,49 @@ +import React, { Component } from "react"; +import AlreadyAuthenticated from "../../containers/components/AlreadyAuthenticated/AlreadyAuthenticated"; +import FirstFactorForm from "../../containers/components/FirstFactorForm/FirstFactorForm"; +import SecondFactorForm from "../../containers/components/SecondFactorForm/SecondFactorForm"; +import RemoteState from "./RemoteState"; +import { RouterProps, RouteProps } from "react-router"; + +export enum Stage { + FIRST_FACTOR, + SECOND_FACTOR, + ALREADY_AUTHENTICATED, +} + +export interface OwnProps extends RouteProps {} + +export interface StateProps { + stage: Stage; + remoteState: RemoteState | null; + redirectionUrl: string | null; +} + +export interface DispatchProps { + onInit: () => void; +} + +export type Props = StateProps & DispatchProps & RouterProps; + +class AuthenticationView extends Component { + componentWillMount() { + this.props.onInit(); + } + + render() { + if (!this.props.remoteState) return null; + + if (this.props.stage === Stage.SECOND_FACTOR) { + return ; + } else if (this.props.stage === Stage.ALREADY_AUTHENTICATED) { + return ; + } + return ; + } +} + +export default AuthenticationView; \ No newline at end of file diff --git a/client/src/views/AuthenticationView/RemoteState.ts b/client/src/views/AuthenticationView/RemoteState.ts new file mode 100644 index 000000000..e99eca5b3 --- /dev/null +++ b/client/src/views/AuthenticationView/RemoteState.ts @@ -0,0 +1,9 @@ +import AuthenticationLevel from '../../types/AuthenticationLevel'; + +interface RemoteState { + username: string; + authentication_level: AuthenticationLevel; + default_redirection_url: string; +} + +export default RemoteState; \ No newline at end of file diff --git a/client/src/views/ConfirmationSentView/ConfirmationSentView.tsx b/client/src/views/ConfirmationSentView/ConfirmationSentView.tsx new file mode 100644 index 000000000..55eb7637d --- /dev/null +++ b/client/src/views/ConfirmationSentView/ConfirmationSentView.tsx @@ -0,0 +1,36 @@ +import React, { Component } from "react"; +import classnames from 'classnames'; + +import mail from '../../assets/images/mail.png'; + +import styles from '../../assets/scss/views/ConfirmationSentView/ConfirmationSentView.module.scss'; +import Button from "@material/react-button"; +import { RouterProps } from "react-router"; + +interface Props extends RouterProps {} + +class ConfirmationSentView extends Component { + render() { + return ( +
+
+ mail +
+
+ Please check your e-mails and follow the instructions to confirm the operation. +
+ +
+
+
+ ) + } +} + +export default ConfirmationSentView; \ No newline at end of file diff --git a/client/src/views/ForgotPasswordView/ForgotPasswordView.tsx b/client/src/views/ForgotPasswordView/ForgotPasswordView.tsx new file mode 100644 index 000000000..f75ab23bb --- /dev/null +++ b/client/src/views/ForgotPasswordView/ForgotPasswordView.tsx @@ -0,0 +1,92 @@ +import React, { Component, KeyboardEvent, FormEvent } from "react"; +import classnames from 'classnames'; +import Button from "@material/react-button"; +import TextField, { Input } from "@material/react-text-field"; + +import styles from '../../assets/scss/views/ForgotPasswordView/ForgotPasswordView.module.scss'; + +export interface StateProps { + disabled: boolean; +} + +export interface DispatchProps { + onPasswordResetRequested: (username: string) => void; + onCancelClicked: () => void; +} + +export type Props = StateProps & DispatchProps; + +interface State { + username: string; +} + +class ForgotPasswordView extends Component { + constructor(props: Props) { + super(props); + this.state = { + username: '', + } + } + + private onUsernameChanged = (e: FormEvent) => { + this.setState({username: (e.target as HTMLInputElement).value}); + } + + private onKeyPressed = (e: KeyboardEvent) => { + if (e.key == 'Enter') { + this.onPasswordResetRequested(); + } + } + + private onPasswordResetRequested = () => { + if (this.state.username.length == 0) return; + this.props.onPasswordResetRequested(this.state.username); + } + + render() { + return ( +
+
What's your username?
+
+ + + +
+
+ +
+
+ +
+
+
+
+ ); + } +} + +export default ForgotPasswordView; \ No newline at end of file diff --git a/client/src/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.tsx b/client/src/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.tsx new file mode 100644 index 000000000..15e55cd04 --- /dev/null +++ b/client/src/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.tsx @@ -0,0 +1,129 @@ +import React, { Component } from "react"; +import classnames from 'classnames'; + +import Button from "@material/react-button"; + +import styles from '../../assets/scss/views/OneTimePasswordRegistrationView/OneTimePasswordRegistrationView.module.scss'; +import { RouteProps, RouterProps } from "react-router"; +import QueryString from 'query-string'; + +import QRCode from 'qrcode.react'; +import Notification from "../../components/Notification/Notification"; + +import googleStoreImage from '../../assets/images/googleplay-badge.svg'; +import appleStoreImage from '../../assets/images/applestore-badge.svg'; +import { Secret } from "./Secret"; +import CircleLoader, { Status } from "../../components/CircleLoader/CircleLoader"; + +export interface Props extends RouteProps, RouterProps { + secret: Secret | null; + error: string | null; + onInit: (token: string) => void; + onRetryClicked: () => void; + onCancelClicked: () => void; + onLoginClicked: () => void; +} + +class OneTimePasswordRegistrationView extends Component { + private token: string | null; + constructor(props: Props) { + super(props); + this.token = null; + } + + componentWillMount() { + // If secret is already populated, we skip onInit (for testing purposes). + if (this.props.secret) return; + + if (!this.props.location) { + console.error('There is no location to retrieve query params from...'); + return; + } + const params = QueryString.parse(this.props.location.search); + if (!('token' in params)) { + console.error('Token parameter is expected and not provided'); + return; + } + this.token = params['token'] as string; + this.props.onInit(this.token); + } + + private renderWithSecret(secret: Secret) { + return ( +
+
+ Register your device by scanning the barcode or adding the key. +
+
+
+ +
+
{secret.otpauth_url}
+
{secret.base32_secret}
+
+
+ +
+
+
Need Google Authenticator?
+ Google Authenticator on Apple Store + Google Authenticator on Google Store +
+
+ ) + } + + private renderError() { + return ( +
+ +
{this.props.error}
+
+
+ + +
+
+ ); + } + + private renderSecret() { + return this.props.secret + ? this.renderWithSecret(this.props.secret) + : this.renderError(); + } + + private renderLoading() { + return ( +
+
One-Time password secret is being generated...
+
+
+ ) + } + + render() { + return !this.props.secret && !this.props.error + ? this.renderLoading() + : this.renderSecret(); + } +} + +export default OneTimePasswordRegistrationView; \ No newline at end of file diff --git a/client/src/views/OneTimePasswordRegistrationView/Secret.ts b/client/src/views/OneTimePasswordRegistrationView/Secret.ts new file mode 100644 index 000000000..61e939434 --- /dev/null +++ b/client/src/views/OneTimePasswordRegistrationView/Secret.ts @@ -0,0 +1,5 @@ + +export interface Secret { + otpauth_url: string; + base32_secret: string; +} \ No newline at end of file diff --git a/client/src/views/ResetPasswordView/ResetPasswordView.tsx b/client/src/views/ResetPasswordView/ResetPasswordView.tsx new file mode 100644 index 000000000..75c229957 --- /dev/null +++ b/client/src/views/ResetPasswordView/ResetPasswordView.tsx @@ -0,0 +1,143 @@ +import React, { Component, KeyboardEvent, FormEvent } from "react"; +import { RouterProps } from "react-router"; +import classnames from 'classnames'; +import QueryString from 'query-string'; + +import Button from "@material/react-button"; +import TextField, { Input } from "@material/react-text-field"; + +import styles from '../../assets/scss/views/ResetPasswordView/ResetPasswordView.module.scss'; +import Notification from "../../components/Notification/Notification"; + +export interface StateProps { + disabled: boolean; +} + +export interface DispatchProps { + onInit: (token: string) => void; + onPasswordResetRequested: (password: string) => void; + onCancelClicked: () => void; +} + +export type Props = StateProps & DispatchProps & RouterProps; + +interface State { + password1: string; + password2: string; + error: string | null, +} + +class ResetPasswordView extends Component { + constructor(props: Props) { + super(props); + this.state = { + password1: '', + password2: '', + error: null, + } + } + + componentWillMount() { + if (!this.props.history.location) { + console.error('There is no location to retrieve query params from...'); + return; + } + const params = QueryString.parse(this.props.history.location.search); + if (!('token' in params)) { + console.error('Token parameter is expected and not provided'); + return; + } + this.props.onInit(params['token'] as string); + } + + private onPasswordResetRequested() { + if (this.state.password1 && this.state.password1 === this.state.password2) { + this.props.onPasswordResetRequested(this.state.password1); + } else { + this.setState({error: 'The passwords are different.'}); + } + } + + private onKeyPressed = (e: KeyboardEvent) => { + if (e.key == 'Enter') { + this.onPasswordResetRequested(); + } + } + + private onResetClicked = () => { + this.onPasswordResetRequested(); + } + + private onPassword1Changed = (e: FormEvent) => { + this.setState({password1: (e.target as HTMLInputElement).value}); + } + + private onPassword2Changed = (e: FormEvent) => { + this.setState({password2: (e.target as HTMLInputElement).value}); + } + + render() { + return ( +
+ + {this.state.error} + +
Enter your new password
+
+ + + + + + +
+
+ +
+
+ +
+
+
+
+ ) + } +} + +export default ResetPasswordView; \ No newline at end of file diff --git a/client/src/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.tsx b/client/src/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.tsx new file mode 100644 index 000000000..acf2cbab3 --- /dev/null +++ b/client/src/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.tsx @@ -0,0 +1,78 @@ +import React, { Component } from "react"; + +import Button from "@material/react-button"; + +import styles from '../../assets/scss/views/SecurityKeyRegistrationView/SecurityKeyRegistrationView.module.scss'; +import { RouteProps, RouterProps } from "react-router"; +import QueryString from 'query-string'; +import Notification from "../../components/Notification/Notification"; +import CircleLoader, { Status } from "../../components/CircleLoader/CircleLoader"; + +export interface Props extends RouteProps, RouterProps { + deviceRegistered: boolean | null; + error: string | null; + onInit: (token: string) => void; + onBackClicked: () => void; +} + +class SecurityKeyRegistrationView extends Component { + componentDidMount() { + if (this.props.deviceRegistered) return; + + if (!this.props.location) { + console.error('There is no location to retrieve query params from...'); + return; + } + const params = QueryString.parse(this.props.location.search); + if (!('token' in params)) { + console.error('Token parameter is expected and not provided'); + return; + } + this.props.onInit(params['token'] as string); + } + + private renderError() { + return ( +
+ + {this.props.error} + +
+ +
+
+ ) + } + + private renderRegistering() { + let status = Status.LOADING; + if (this.props.deviceRegistered === true) { + status = Status.SUCCESSFUL; + } else if (this.props.error) { + status = Status.FAILURE; + } + return ( +
+
Press the gold disk to register your security key
+
+ +
+
+ ) + } + + render() { + if (this.props.error) { + return this.renderError(); + } + + return this.renderRegistering(); + } +} + +export default SecurityKeyRegistrationView; \ No newline at end of file diff --git a/client/test/Notifier.test.ts b/client/test/Notifier.test.ts deleted file mode 100644 index 70bfea146..000000000 --- a/client/test/Notifier.test.ts +++ /dev/null @@ -1,71 +0,0 @@ - -import Assert = require("assert"); -import Sinon = require("sinon"); -import JQueryMock = require("./mocks/jquery"); - -import { Notifier } from "../src/lib/Notifier"; - -describe("test notifier", function() { - const SELECTOR = "dummy-selector"; - const MESSAGE = "This is a message"; - let jqueryMock: { jquery: JQueryMock.JQueryMock, element: JQueryMock.JQueryElementsMock }; - let clock: any; - - beforeEach(function() { - jqueryMock = JQueryMock.JQueryMock(); - clock = Sinon.useFakeTimers(); - }); - - afterEach(function() { - clock.restore(); - }); - - function should_fade_in_and_out_on_notification(notificationType: string): void { - const delayReturn = { - fadeOut: Sinon.stub() - }; - - jqueryMock.element.fadeIn.yields(); - - function onFadedInCallback() { - Assert(jqueryMock.element.fadeIn.calledOnce); - Assert(jqueryMock.element.addClass.calledWith(notificationType)); - Assert(!jqueryMock.element.removeClass.calledWith(notificationType)); - clock.tick(10 * 1000); - } - - function onFadedOutCallback() { - Assert(jqueryMock.element.removeClass.calledWith(notificationType)); - Assert(jqueryMock.element.fadeOut.calledOnce); - } - - const notifier = new Notifier(SELECTOR, jqueryMock.jquery as any); - - // Call the method by its name... Bad but allows code reuse. - (notifier as any)[notificationType](MESSAGE, { - onFadedIn: onFadedInCallback, - onFadedOut: onFadedOutCallback - }); - - clock.tick(510); - - Assert(jqueryMock.element.fadeIn.calledOnce); - } - - - it("should fade in and fade out an error message", function() { - should_fade_in_and_out_on_notification("error"); - }); - - it("should fade in and fade out an info message", function() { - should_fade_in_and_out_on_notification("info"); - }); - - it("should fade in and fade out an warning message", function() { - should_fade_in_and_out_on_notification("warning"); - }); - - it("should fade in and fade out an success message", function() { - should_fade_in_and_out_on_notification("success"); - }); -}); \ No newline at end of file diff --git a/client/test/firstfactor/FirstFactorValidator.test.ts b/client/test/firstfactor/FirstFactorValidator.test.ts deleted file mode 100644 index 027bc71d8..000000000 --- a/client/test/firstfactor/FirstFactorValidator.test.ts +++ /dev/null @@ -1,46 +0,0 @@ - -import FirstFactorValidator = require("../../src/lib/firstfactor/FirstFactorValidator"); -import JQueryMock = require("../mocks/jquery"); -import BluebirdPromise = require("bluebird"); -import Assert = require("assert"); - -describe("test FirstFactorValidator", function () { - it("should validate first factor successfully", () => { - const postPromise = JQueryMock.JQueryDeferredMock(); - postPromise.done.yields({ redirect: "http://redirect" }); - postPromise.done.returns(postPromise); - - const jqueryMock = JQueryMock.JQueryMock(); - jqueryMock.jquery.ajax.returns(postPromise); - - return FirstFactorValidator.validate("username", "password", false, - "http://redirect", jqueryMock.jquery as any); - }); - - function should_fail_first_factor_validation(errorMessage: string) { - const xhr = { - status: 401 - }; - const postPromise = JQueryMock.JQueryDeferredMock(); - postPromise.fail.yields(xhr, errorMessage); - postPromise.done.returns(postPromise); - - const jqueryMock = JQueryMock.JQueryMock(); - jqueryMock.jquery.ajax.returns(postPromise); - - return FirstFactorValidator.validate("username", "password", false, - "http://redirect", jqueryMock.jquery as any) - .then(function () { - return BluebirdPromise.reject(new Error("First factor validation successfully finished while it should have not.")); - }, function (err: Error) { - Assert.equal(errorMessage, err.message); - return BluebirdPromise.resolve(); - }); - } - - describe("should fail first factor validation", () => { - it("should fail with error", () => { - return should_fail_first_factor_validation("Authentication failed. Please check your credentials."); - }); - }); -}); \ No newline at end of file diff --git a/client/test/mocks/NotifierStub.ts b/client/test/mocks/NotifierStub.ts deleted file mode 100644 index 9c268d66d..000000000 --- a/client/test/mocks/NotifierStub.ts +++ /dev/null @@ -1,33 +0,0 @@ - -import Sinon = require("sinon"); -import { INotifier } from "../../src/lib/INotifier"; - -export class NotifierStub implements INotifier { - successStub: Sinon.SinonStub; - errorStub: Sinon.SinonStub; - warnStub: Sinon.SinonStub; - infoStub: Sinon.SinonStub; - - constructor() { - this.successStub = Sinon.stub(); - this.errorStub = Sinon.stub(); - this.warnStub = Sinon.stub(); - this.infoStub = Sinon.stub(); - } - - success(msg: string) { - this.successStub(); - } - - error(msg: string) { - this.errorStub(); - } - - warning(msg: string) { - this.warnStub(); - } - - info(msg: string) { - this.infoStub(); - } -} \ No newline at end of file diff --git a/client/test/mocks/jquery.ts b/client/test/mocks/jquery.ts deleted file mode 100644 index 273f90861..000000000 --- a/client/test/mocks/jquery.ts +++ /dev/null @@ -1,59 +0,0 @@ - -import sinon = require("sinon"); -import jquery = require("jquery"); - - -export interface JQueryMock extends sinon.SinonStub { - get: sinon.SinonStub; - post: sinon.SinonStub; - ajax: sinon.SinonStub; - notify: sinon.SinonStub; -} - -export interface JQueryElementsMock { - ready: sinon.SinonStub; - show: sinon.SinonStub; - hide: sinon.SinonStub; - html: sinon.SinonStub; - addClass: sinon.SinonStub; - removeClass: sinon.SinonStub; - fadeIn: sinon.SinonStub; - fadeOut: sinon.SinonStub; - on: sinon.SinonStub; -} - -export interface JQueryDeferredMock { - done: sinon.SinonStub; - fail: sinon.SinonStub; -} - -export function JQueryMock(): { jquery: JQueryMock, element: JQueryElementsMock } { - const jquery = sinon.stub() as any; - const jqueryInstance: JQueryElementsMock = { - ready: sinon.stub(), - show: sinon.stub(), - hide: sinon.stub(), - html: sinon.stub(), - addClass: sinon.stub(), - removeClass: sinon.stub(), - fadeIn: sinon.stub(), - fadeOut: sinon.stub(), - on: sinon.stub() - }; - jquery.ajax = sinon.stub(); - jquery.get = sinon.stub(); - jquery.post = sinon.stub(); - jquery.notify = sinon.stub(); - jquery.returns(jqueryInstance); - return { - jquery: jquery, - element: jqueryInstance - }; -} - -export function JQueryDeferredMock(): JQueryDeferredMock { - return { - done: sinon.stub(), - fail: sinon.stub() - }; -} diff --git a/client/test/mocks/u2f-api.ts b/client/test/mocks/u2f-api.ts deleted file mode 100644 index d123f6a95..000000000 --- a/client/test/mocks/u2f-api.ts +++ /dev/null @@ -1,14 +0,0 @@ - -import sinon = require("sinon"); - -export interface U2FApiMock { - sign: sinon.SinonStub; - register: sinon.SinonStub; -} - -export function U2FApiMock(): U2FApiMock { - return { - sign: sinon.stub(), - register: sinon.stub() - }; -} \ No newline at end of file diff --git a/client/test/secondfactor/TOTPValidator.test.ts b/client/test/secondfactor/TOTPValidator.test.ts deleted file mode 100644 index 5dd6f15c3..000000000 --- a/client/test/secondfactor/TOTPValidator.test.ts +++ /dev/null @@ -1,37 +0,0 @@ - -import TOTPValidator = require("../../src/lib/secondfactor/TOTPValidator"); -import JQueryMock = require("../mocks/jquery"); -import BluebirdPromise = require("bluebird"); -import Assert = require("assert"); - -describe("test TOTPValidator", function () { - it("should initiate an identity check successfully", () => { - const postPromise = JQueryMock.JQueryDeferredMock(); - postPromise.done.yields({ redirect: "https://home.test.url" }); - postPromise.done.returns(postPromise); - - const jqueryMock = JQueryMock.JQueryMock(); - jqueryMock.jquery.ajax.returns(postPromise); - - return TOTPValidator.validate("totp_token", jqueryMock.jquery as any); - }); - - it("should fail validating TOTP token", () => { - const errorMessage = "Error while validating TOTP token"; - - const postPromise = JQueryMock.JQueryDeferredMock(); - postPromise.fail.yields(undefined, errorMessage); - postPromise.done.returns(postPromise); - - const jqueryMock = JQueryMock.JQueryMock(); - jqueryMock.jquery.ajax.returns(postPromise); - - return TOTPValidator.validate("totp_token", jqueryMock.jquery as any) - .then(function () { - return BluebirdPromise.reject(new Error("Registration successfully finished while it should have not.")); - }, function (err: Error) { - Assert.equal(errorMessage, err.message); - return BluebirdPromise.resolve(); - }); - }); -}); \ No newline at end of file diff --git a/client/test/totp-register/totp-register.test.ts b/client/test/totp-register/totp-register.test.ts deleted file mode 100644 index 86fc455a1..000000000 --- a/client/test/totp-register/totp-register.test.ts +++ /dev/null @@ -1,31 +0,0 @@ - -import sinon = require("sinon"); -import assert = require("assert"); - -import UISelector = require("../../src/lib/totp-register/ui-selector"); -import TOTPRegister = require("../../src/lib/totp-register/totp-register"); - -describe("test totp-register", function() { - let jqueryMock: any; - let windowMock: any; - before(function() { - jqueryMock = sinon.stub(); - windowMock = { - QRCode: sinon.spy() - }; - }); - - it("should create qrcode in page", function() { - const mock = { - text: sinon.stub(), - empty: sinon.stub(), - get: sinon.stub() - }; - jqueryMock.withArgs(UISelector.QRCODE_ID_SELECTOR).returns(mock); - - TOTPRegister.default(windowMock, jqueryMock); - - assert(mock.text.calledOnce); - assert(mock.empty.calledOnce); - }); -}); \ No newline at end of file diff --git a/client/tsconfig.json b/client/tsconfig.json index 0bb4d62ff..c5d6f230f 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -1,24 +1,25 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "moduleResolution": "node", - "noImplicitAny": true, - "sourceMap": true, - "removeComments": true, - "outDir": "../dist", - "baseUrl": ".", - "paths": { - "*": [ - "./types/*", - "../shared/types/*" - ] - } - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "test/**/*" + "compilerOptions": { + "target": "es6", + "allowJs": true, + "skipLibCheck": false, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "lib": [ + "dom", + "dom.iterable", + "esnext" ] + }, + "include": [ + "src" + ] } diff --git a/client/tslint.json b/client/tslint.json deleted file mode 100644 index c2c1b7501..000000000 --- a/client/tslint.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "rules": { - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "indent": [ - true, - "spaces" - ], - "one-line": [ - true, - "check-open-brace", - "check-whitespace" - ], - "no-var-keyword": true, - "quotemark": [ - true, - "double", - "avoid-escape" - ], - "semicolon": [ - true, - "always", - "ignore-bound-class-methods" - ], - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-module", - "check-separator", - "check-type" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, - { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } - ], - "no-internal-module": true, - "no-trailing-whitespace": true, - "no-null-keyword": true, - "prefer-const": true, - "jsdoc-format": true - } -} diff --git a/config.template.yml b/config.template.yml index 30eb7be60..6ffca5165 100644 --- a/config.template.yml +++ b/config.template.yml @@ -3,14 +3,14 @@ ############################################################### # The port to listen on -port: 8080 +port: 9091 # Log level # # Level of verbosity for logs logs_level: debug -# Default redirection URL +# Default redirection URL # # If user tries to authenticate without any referer, Authelia # does not know where to redirect the user to at the end of the @@ -42,7 +42,7 @@ authentication_backend: # production. ldap: # The url of the ldap server - url: ldap://openldap + url: ldap://127.0.0.1 # The base dn for every entries base_dn: dc=example,dc=com @@ -75,15 +75,15 @@ authentication_backend: user: cn=admin,dc=example,dc=com password: password - # File backend configuration. + # File backend configuration. # # With this backend, the users database is stored in a file # which is updated when users reset their passwords. - # Therefore, this backend is meant to be used in a dev environment + # Therefore, this backend is meant to be used in a dev environment # and not in production since it prevents Authelia to be scaled to - # more than one instance. + # more than one instance. # - ## file: + ## file: ## path: ./users_database.yml @@ -93,13 +93,13 @@ authentication_backend: # resource to users or group of users. # # If 'access_control' is not defined, ACL rules are disabled and the `bypass` -# rule is applied, i.e., access is allowed to anyone. Otherwise restrictions follow +# rule is applied, i.e., access is allowed to anyone. Otherwise restrictions follow # the rules defined. # # Note: One can use the wildcard * to match any subdomain. -# It must stand at the beginning of the pattern. (example: *.mydomain.com) +# It must stand at the beginning of the pattern. (example: *.mydomain.com) # -# Note: You must put patterns containing wildcards between simple quotes for the YAML +# Note: You must put patterns containing wildcards between simple quotes for the YAML # to be syntaxically correct. # # Definition: A `rule` is an object with the following keys: `domain`, `subject`, @@ -116,7 +116,7 @@ authentication_backend: # `one_factor`, `two_factor` or `deny`. # # - `resources` is a list of regular expressions that matches a set of resources to -#  apply the policy to. This parameter is optional and matches any resource if not +# apply the policy to. This parameter is optional and matches any resource if not # provided. # # Note: the order of the rules is important. The first policy matching @@ -196,9 +196,9 @@ session: # is restricted to the subdomain of the issuer. domain: example.com - # The redis connection details + # The redis connection details redis: - host: redis + host: 127.0.0.1 port: 6379 password: authelia @@ -212,7 +212,7 @@ regulation: # Set it to 0 to disable regulation. max_retries: 3 - # The time range during which the user can attempt login before being banned. + # The time range during which the user can attempt login before being banned. # The user is banned if the authenticaction failed `max_retries` times in a `find_time` seconds window. find_time: 120 @@ -224,12 +224,12 @@ regulation: # You must use only an available configuration: local, mongo storage: # The directory where the DB files will be saved - ## local: + ## local: ## path: /var/lib/authelia/store # Settings to connect to mongo server mongo: - url: mongodb://mongo + url: mongodb://127.0.0.1 database: authelia auth: username: authelia @@ -258,6 +258,6 @@ notifier: username: test password: password secure: false - host: 'smtp' + host: 127.0.0.1 port: 1025 sender: admin@example.com diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml deleted file mode 100644 index 44e5350c6..000000000 --- a/docker-compose.dev.yml +++ /dev/null @@ -1,27 +0,0 @@ -version: '2' -services: - authelia-dev: - build: - context: . - dockerfile: Dockerfile.dev - restart: always - volumes: - - ./server:/usr/src/server - - ./dist/server/src/public_html:/usr/src/server/src/public_html - - ./client:/usr/src/client - - ./shared:/usr/src/shared - - ./config.template.yml:/etc/authelia/config.yml:ro - environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - depends_on: - - redis - networks: - example-network: - aliases: - - authelia - command: - - "./node_modules/.bin/ts-node" - - "-P" - - "server/tsconfig.json" - - "server/src/index.ts" - - "/etc/authelia/config.yml" diff --git a/docker-compose.minimal.dev.yml b/docker-compose.minimal.dev.yml deleted file mode 100644 index f36479753..000000000 --- a/docker-compose.minimal.dev.yml +++ /dev/null @@ -1,27 +0,0 @@ -version: '2' -services: - authelia: - build: - context: . - dockerfile: Dockerfile.dev - restart: always - volumes: - - ./server:/usr/src/server - - ./dist/server/src/public_html:/usr/src/server/src/public_html - - ./client:/usr/src/client - - ./shared:/usr/src/shared - - ./config.minimal.yml:/etc/authelia/config.yml:ro - - /tmp/authelia:/tmp/authelia - - ./users_database.yml:/etc/authelia/users_database.yml - environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - depends_on: - - redis - networks: - - example-network - command: - - "./node_modules/.bin/ts-node" - - "-P" - - "server/tsconfig.json" - - "server/src/index.ts" - - "/etc/authelia/config.yml" diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml deleted file mode 100644 index bed34efc2..000000000 --- a/docker-compose.minimal.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '2' -services: - authelia: - build: . - restart: always - volumes: - - ./config.minimal.yml:/etc/authelia/config.yml:ro - - ./users_database.test.yml:/etc/authelia/users_database.yml:rw - - /tmp/authelia:/tmp/authelia - environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - networks: - - example-network diff --git a/docker-compose.test.yml b/docker-compose.test.yml deleted file mode 100644 index 07275e4c5..000000000 --- a/docker-compose.test.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '2' -services: - authelia: - build: . - restart: always - volumes: - - ./config.test.yml:/etc/authelia/config.yml:ro - - ./users_database.test.yml:/etc/authelia/users_database.yml:rw - - /tmp/authelia:/tmp/authelia - environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - networks: - - example-network diff --git a/docker-compose.yml b/docker-compose.yml index b80d777c0..6ec0652bc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,9 @@ version: '2' -services: - authelia: - build: . - restart: always - volumes: - - ./config.template.yml:/etc/authelia/config.yml:ro - environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - depends_on: - - redis - - mongo - networks: - - example-network \ No newline at end of file +# services: {} +networks: + authelianet: + driver: bridge + ipam: + config: + - subnet: 192.168.240.0/24 + gateway: 192.168.240.1 diff --git a/docs/authelia-scripts.md b/docs/authelia-scripts.md new file mode 100644 index 000000000..460ccb54d --- /dev/null +++ b/docs/authelia-scripts.md @@ -0,0 +1,20 @@ +# Authelia Scripts + +Authelia comes with a set of dedicated scripts doing a broad range of operations such as +building the distributed version of Authelia, building the Docker image, running suites, +testing the code, etc... + +You can access the scripts usage by running the following command: + + npm run scripts + +For instance, you can build Authelia with: + + npm run scripts build + +Or start the *basic* suite with: + + npm run scripts suites start basic + + +You will find more information in the scripts usage helpers. \ No newline at end of file diff --git a/docs/build.md b/docs/build.md index 9437d1f63..23dbaa81c 100644 --- a/docs/build.md +++ b/docs/build.md @@ -1,73 +1,53 @@ # Build -**Authelia** is written in Typescript and built with [Grunt](https://gruntjs.com/). +**Authelia** is written in Typescript and built with [Authelia scripts](docs/authelia-scripts.md). -In order to build **Authelia**, you need to make sure Node v8 and NPM is +In order to build **Authelia**, you need to make sure Node with version >= 8 and < 10 and NPM is installed on your machine. -Then, run the following command install the node modules: +Then, run the following command to install the node modules: npm install And, this command to build **Authelia** under dist/: - ./node_modules/.bin/grunt build + npm run build + +Then you can also build the Docker image with: + + npm run docker build ## Details ### Build -**Authelia** is made of two components: the client and the server. +**Authelia** is made of two parts: the frontend and the backend. -The client is written in Typescript and uses jQuery. It is built as part of -the global `build` Grunt command. - -The server is written in Typescript. It is also built as part of the global `build` -Grunt command. +The frontend is a [React](https://reactjs.org/) application written in Typescript and +the backend is an express application also written in Typescript. ### Tests -Grunt also handles the commands to run the tests. There are several type of -tests for **Authelia**: unit tests for the server, the client and a shared -library and an integration test suite testing both components together. - -The unit tests are written with Mocha while integration tests are using -Cucumber and Mocha. +There are two kind of tests: unit tests and integration tests. ### Unit tests -To run the client unit tests, run: +To run the unit tests, run: - ./node_modules/.bin/grunt test-client - -To run the server unit tests, run: - - ./node_modules/.bin/grunt test-server - -To run the shared library unit tests, run: - - ./node_modules/.bin/grunt test-shared + npm run unittest ### Integration tests -Integration tests are mainly based on Selenium so they -need a complete environment to be run. +Integration tests run with Mocha and are based on Selenium. They generally +require a complete environment made of several components like redis, mongo and a LDAP +to run. -You can start by making sure **Authelia** is built with: +In order to simplify the creation of such environments, Authelia comes with a concept of +[Suites] that basically act as virtual environments for running either +manual or integration tests. - grunt build +Please read the documentation related to [Suites] in order to discover +how to run related tests. -and the docker image is built with: - ./scripts/example-commit/dc-example.sh build - -Then, start the environment with: - - ./scripts/example-commit/dc-example.sh up -d - -And run the tests with: - - ./node_modules/.bin/grunt test-int - -Note: the Cucumber tests are hard to maintain and will therefore -be refactored to use Mocha instead. +[Suites]: ./suites.md \ No newline at end of file diff --git a/docs/deployment-dev.md b/docs/deployment-dev.md index 194647f49..144588726 100644 --- a/docs/deployment-dev.md +++ b/docs/deployment-dev.md @@ -17,9 +17,9 @@ non resilient to failures.* [Getting Started] documentation. In some cases, like protecting personal websites, it can be fine to use -**Authelia** in a non highly-available manner. Fortunately, we can -achieve to run it along with one reverse proxy meaning the setup is -then reduced to only two components: Authelia and nginx. +**Authelia** in a non highly-available setup. We can +achieve that in order to reduce the number of components to only two: Authelia +and nginx. As for a regular deployment in production, you need to install **Authelia** either by pulling the Docker image or installing the npm package and run @@ -37,7 +37,8 @@ it with a configuration file passed as argument. ## Deploy Nginx -You also need to install nginx and take [example/compose/nginx/minimal/nginx.conf](./example/compose/nginx/minimal/nginx.conf) as an example of configuration. +You also need to install nginx and take [example/compose/nginx/minimal/nginx.conf](./example/compose/nginx/minimal/nginx.conf) +as an example for your configuration. ## Discard components @@ -83,7 +84,7 @@ from running multiple instances of **Authelia** in parallel and is therefore discouraged for production environments. To use a file backend instead of a LDAP server, you should first duplicate -the file [users_database.yml](../users_database.yml) and edit it to add the +the file [users_database.yml](../test/suites/basic/users_database.yml) and edit it to add the users you want. The content of this file is as follows: @@ -99,10 +100,10 @@ The content of this file is as follows: The password is hashed and salted as it is in LDAP servers with salted SHA-512. Here is a one-liner to generate such hashed password: - python3 -c 'import crypt; print("{CRYPT}" + crypt.crypt("mypassword", crypt.mksalt(crypt.METHOD_SHA512, rounds=500000)))' + npm run hash-password mypassword Once the file is created, edit the configuration file with the following -block (as used in [config.minimal.yml](../config.minimal.yml)): +block (as used in [config.yml](../test/suites/basic/config.yml)): authentication_backend: file: @@ -141,9 +142,13 @@ crash or an hardware issue. Moreover, it will also prevent from reliably persisting data and consequently fail access to your platform as the devices registered by your users will be lost. -### Why is this not automated? +### Why aren't all those steps automated? Well, as stated before those instructions are not meant to be applied for a production environment. That being said, in some cases it is just fine and -so writing an Ansible playbook to automate all this process would be great. +writing an Ansible playbook to automate all this process is ok. We would really be more than happy to review such a PR. +In the meantime, you can check the *basic* [suite](./suites.md) to see all this +in real example. + +[Getting Started]: ./getting-started.md diff --git a/docs/deployment-production.md b/docs/deployment-production.md index 835adb934..94c2cded7 100644 --- a/docs/deployment-production.md +++ b/docs/deployment-production.md @@ -36,17 +36,12 @@ the root of the repo. -**Authelia** can also be used on top of [Kubernetes] using [nginx ingress -controller](https://github.com/kubernetes/ingress-nginx). +**Authelia** can also be used on top of [Kubernetes] using +[nginx ingress controller](https://github.com/kubernetes/ingress-nginx). Please refer to the following [documentation](../example/kube/README.md) for more information. -[config.template.yml]: ../config.template.yml -[Getting Started]: ./getting-started.md -[Deployment for Devs]: ./deployment-dev.md -[Kubernetes]: https://kubernetes.io/ - ## FAQ ### Why is this not automated? @@ -55,4 +50,11 @@ Ansible would be a very good candidate to automate the installation of such an infrastructure on bare metal. We would be more than happy to review any PR on that matter. Regarding Kubernetes, the right way to go would be to write a helm recipe. -Again, we would be glad to review any PR implementing this. \ No newline at end of file +Again, we would be glad to review any PR implementing this. + + + +[config.template.yml]: ../config.template.yml +[Getting Started]: ./getting-started.md +[Deployment for Devs]: ./deployment-dev.md +[Kubernetes]: https://kubernetes.io/ diff --git a/docs/getting-started.md b/docs/getting-started.md index 758a3d15e..d6f6882f5 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -26,16 +26,17 @@ Here are the versions used for testing in Travis: Make sure you don't have anything listening on port 8080 and 8085. -The port 8080 will be our frontend load balancer serving both **Authelia**'s portal and the applications we want to protect. +The port 8080 will be our frontend load balancer serving both **Authelia**'s portal and the +applications we want to protect. -The port 8085 is serving a webmail used to receive fake emails sent by **Authelia** +The port 8085 is serving a webmail used to receive emails sent by **Authelia** to validate your identity when registering U2F or TOTP secrets or when resetting your password. ### Subdomain aliases -In order to simulate the behavior of a DNS resolving some test subdomains of **example.com** to your machine, we -need to add the following lines to your **/etc/hosts**. It will alias the +In order to simulate the behavior of a DNS resolving some test subdomains of **example.com** +to your machine, we need to add the following lines to your **/etc/hosts**. It will alias the subdomains so that nginx can redirect requests to the correct virtual host. 127.0.0.1 home.example.com @@ -52,7 +53,10 @@ subdomains so that nginx can redirect requests to the correct virtual host. To deploy **Authelia** using the latest image from [Dockerhub], run the following command: - ./scripts/example-dockerhub/deploy-example.sh + npm run script suites start dockerhub + +A Suites is a virtual environment for running Authelia. If you want more details please +read the related [documentation](./suites.md). ## Test it! @@ -71,8 +75,8 @@ Below is what the login page looks like after you accepted all exceptions:

-You can use one of the users listed in [https://home.example.com:8080/](https://home.example.com:8080/). The rights granted to each user and -group is also provided there. +You can use one of the users listed in [https://home.example.com:8080/](https://home.example.com:8080/). +The rights granted to each user and group is also provided there. At some point, you'll be required to register your second factor, either U2F or TOTP. Since your security is **Authelia**'s priority, it will send @@ -86,8 +90,8 @@ The webmail is accessible from **Note:** If you cannot deploy the fake webmail for any reason. You can configure **Authelia** to use the filesystem notifier (option available in [config.template.yml]) that will send the content of the email in a -file instead of sending an email. It is advised to use this option -for testing only. +file instead of sending an email. It is advised to not use this option +in production. Enjoy! diff --git a/docs/security.md b/docs/security.md index e1298dce0..b2e1e2c02 100644 --- a/docs/security.md +++ b/docs/security.md @@ -21,6 +21,14 @@ that the attacker must also require the certificate to retrieve the cookies. Note that using [HSTS] has consequences. That's why you should read the blog post nginx has written on [HSTS]. +## Content-Security-Policy + +Authelia's portal is protected against XSS using the content +security policy mechanism that is documented +[here](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP). This protection +will reject untrusted payloads threatening your users during the authentication +workflow. + ## More protections measures with Nginx You can also apply the following headers to your nginx configuration for diff --git a/docs/suites.md b/docs/suites.md new file mode 100644 index 000000000..03a528213 --- /dev/null +++ b/docs/suites.md @@ -0,0 +1,55 @@ +# Suites + +Authelia is a single component in interaction with many others. Consequently, testing the features +is not as easy as we might think. Consequently, a suite is kind of a virtual environment for Authelia, +it allows to create an environment made of components such as nginx, redis or mongo in which Authelia can +run and be tested. + +This abstraction allows to prepare an environment for manual testing during development and also to +craft and run integration tests. + +## Start a suite. + +Starting a suite called *simple* is done with the following command: + + npm run scripts suites start simple + +It will start the suite and block until you hit ctrl-c to stop the suite. + +## Run tests of a suite + +### Run tests of running suite + +If you are already running a suite with the previous command, you can simply type: + + npm run scripts test + +and this will run the tests related to the running suite. + +### Run tests of non-running suite + +However, if no suite is running and you still want to test a particular suite like *complete*. +You can do so with the next command: + + npm run scripts test complete + +This command will run the tests for the *complete* suite using the built version of Authelia that +should be located in *dist*. + +WARNING: Authelia must be built before running this command. + +### Run all tests of all suites + +Running all tests is as easy as making sure that there is no running suite and typing: + + npm run scripts test + + +## Create a suite + +Creating a suite is as easy as creating a new directory with at least two files: + +* **environment.ts** - It defines the setup and teardown phases when creating the environment. The *setup* +phase is the phase when the required components will be spawned and Authelia will start while the *teardown* +is executed when the suite is destroyed (ctrl-c hit by the user). +* **test.ts** - It defines a set of tests to run in the virtual environment of the suite. \ No newline at end of file diff --git a/docker-compose.dockerhub.yml b/example/compose/authelia/docker-compose.dockerhub.yml similarity index 69% rename from docker-compose.dockerhub.yml rename to example/compose/authelia/docker-compose.dockerhub.yml index a6086c318..a78db4968 100644 --- a/docker-compose.dockerhub.yml +++ b/example/compose/authelia/docker-compose.dockerhub.yml @@ -4,10 +4,10 @@ services: image: clems4ever/authelia:latest restart: always volumes: - - ./config.template.yml:/etc/authelia/config.yml:ro + - ./test/suites/dockerhub/config.yml:/etc/authelia/config.yml:ro environment: - NODE_TLS_REJECT_UNAUTHORIZED=0 depends_on: - redis networks: - - example-network \ No newline at end of file + - authelianet \ No newline at end of file diff --git a/example/compose/authelia/docker-compose.test.yml b/example/compose/authelia/docker-compose.test.yml deleted file mode 100644 index 2d2899a86..000000000 --- a/example/compose/authelia/docker-compose.test.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: '2' -services: - authelia: - volumes: - - ./config.test.yml:/etc/authelia/config.yml:ro - - ./dist/server:/usr/src/server - - ./dist/shared:/usr/src/shared - networks: - - example-network diff --git a/example/compose/docker-compose.base.yml b/example/compose/docker-compose.base.yml index 7c610d62a..fcc3cbb43 100644 --- a/example/compose/docker-compose.base.yml +++ b/example/compose/docker-compose.base.yml @@ -1,4 +1,4 @@ version: '2' networks: - example-network: - driver: bridge + authelianet: + external: true diff --git a/example/compose/httpbin/docker-compose.yml b/example/compose/httpbin/docker-compose.yml index b21cdc54e..b9859f1bb 100644 --- a/example/compose/httpbin/docker-compose.yml +++ b/example/compose/httpbin/docker-compose.yml @@ -3,4 +3,4 @@ services: httpbin: image: citizenstig/httpbin networks: - - example-network + - authelianet diff --git a/example/compose/ldap/docker-compose.admin.yml b/example/compose/ldap/docker-compose.admin.yml index c73075782..5a0dbe815 100644 --- a/example/compose/ldap/docker-compose.admin.yml +++ b/example/compose/ldap/docker-compose.admin.yml @@ -8,4 +8,4 @@ services: - PHPLDAPADMIN_LDAP_HOSTS=openldap - PHPLDAPADMIN_HTTPS=false networks: - - example-network + - authelianet diff --git a/example/compose/ldap/docker-compose.yml b/example/compose/ldap/docker-compose.yml index 41de32b2d..73da240f5 100644 --- a/example/compose/ldap/docker-compose.yml +++ b/example/compose/ldap/docker-compose.yml @@ -13,6 +13,8 @@ services: volumes: - ./example/compose/ldap/base.ldif:/etc/ldap.dist/prepopulate/base.ldif - ./example/compose/ldap/access.rules:/etc/ldap.dist/prepopulate/access.rules + ports: + - "389:389" networks: - - example-network + - authelianet diff --git a/example/compose/mongo/docker-compose.yml b/example/compose/mongo/docker-compose.yml index 5b95e931b..fd152e99e 100644 --- a/example/compose/mongo/docker-compose.yml +++ b/example/compose/mongo/docker-compose.yml @@ -9,4 +9,4 @@ services: ports: - "27017:27017" networks: - - example-network + - authelianet diff --git a/example/compose/nginx/backend/docker-compose.yml b/example/compose/nginx/backend/docker-compose.yml index 6b5856dcb..cd78b72b0 100644 --- a/example/compose/nginx/backend/docker-compose.yml +++ b/example/compose/nginx/backend/docker-compose.yml @@ -6,4 +6,4 @@ services: - ./example/compose/nginx/backend/html:/usr/share/nginx/html - ./example/compose/nginx/backend/nginx.conf:/etc/nginx/nginx.conf networks: - - example-network + - authelianet diff --git a/example/compose/nginx/minimal/docker-compose.yml b/example/compose/nginx/minimal/docker-compose.yml index b4d2061a9..a79ab6900 100644 --- a/example/compose/nginx/minimal/docker-compose.yml +++ b/example/compose/nginx/minimal/docker-compose.yml @@ -9,4 +9,4 @@ services: ports: - "8080:443" networks: - - example-network + - authelianet diff --git a/example/compose/nginx/minimal/nginx.conf b/example/compose/nginx/minimal/nginx.conf index 4d26938ca..712305768 100644 --- a/example/compose/nginx/minimal/nginx.conf +++ b/example/compose/nginx/minimal/nginx.conf @@ -12,7 +12,6 @@ http { resolver 127.0.0.11 ipv6=off; set $upstream_endpoint http://authelia:8080; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -45,7 +44,6 @@ http { root /usr/share/nginx/html/home; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -62,7 +60,6 @@ http { resolver 127.0.0.11 ipv6=off; set $upstream_verify http://authelia:8080/api/verify; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; diff --git a/example/compose/nginx/portal/.gitignore b/example/compose/nginx/portal/.gitignore new file mode 100644 index 000000000..49dfdc987 --- /dev/null +++ b/example/compose/nginx/portal/.gitignore @@ -0,0 +1,2 @@ + +nginx.conf diff --git a/example/compose/nginx/portal/docker-compose.yml b/example/compose/nginx/portal/docker-compose.yml index d6d4bb64a..d5fa8b3e4 100644 --- a/example/compose/nginx/portal/docker-compose.yml +++ b/example/compose/nginx/portal/docker-compose.yml @@ -8,4 +8,4 @@ services: ports: - "8080:443" networks: - - example-network + - authelianet diff --git a/example/compose/nginx/portal/nginx.conf b/example/compose/nginx/portal/nginx.conf.ejs similarity index 84% rename from example/compose/nginx/portal/nginx.conf rename to example/compose/nginx/portal/nginx.conf.ejs index 06d29d9cb..8ecb9c7f9 100644 --- a/example/compose/nginx/portal/nginx.conf +++ b/example/compose/nginx/portal/nginx.conf.ejs @@ -5,36 +5,87 @@ events { } http { + server { + listen 443 ssl; + server_name _; + + ssl_certificate /etc/ssl/server.crt; + ssl_certificate_key /etc/ssl/server.key; + + return 301 https://home.example.com:8080/; + } + + <% if (production) { %> server { listen 443 ssl; server_name login.example.com; resolver 127.0.0.11 ipv6=off; - set $upstream_endpoint http://authelia:8080; + set $backend_endpoint <%= authelia_backend %>; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options "SAMEORIGIN"; + # Serves the portal application. location / { + proxy_pass $backend_endpoint/index.html; + } + + location /static { + proxy_pass $backend_endpoint; + } + + # Serve the backend API for the portal. + location /api { proxy_set_header Host $http_host; proxy_set_header X-Original-URI $request_uri; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_intercept_errors on; - proxy_pass $upstream_endpoint; - - if ($request_method !~ ^(POST)$){ - error_page 401 = /error/401; - error_page 403 = /error/403; - error_page 404 = /error/404; - } + proxy_pass $backend_endpoint; } } + <% } else { %> + server { + listen 443 ssl; + server_name login.example.com; + + resolver 127.0.0.11 ipv6=off; + set $frontend_endpoint http://192.168.240.1:3000; + set $backend_endpoint <%= authelia_backend %>; + + ssl_certificate /etc/ssl/server.crt; + ssl_certificate_key /etc/ssl/server.key; + + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Frame-Options "SAMEORIGIN"; + + # Serves the portal application. + location / { + # Allow websockets for webpack to auto-reload. + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + + proxy_pass $frontend_endpoint; + } + + # Serve the backend API for the portal. + location /api { + proxy_set_header Host $http_host; + proxy_set_header X-Original-URI $request_uri; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_intercept_errors on; + + proxy_pass $backend_endpoint; + } + } + <% } %> server { listen 443 ssl; @@ -43,7 +94,6 @@ http { resolver 127.0.0.11 ipv6=off; set $upstream_endpoint http://nginx-backend; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -61,11 +111,10 @@ http { server_name public.example.com; resolver 127.0.0.11 ipv6=off; - set $upstream_verify http://authelia:8080/api/verify; + set $upstream_verify <%= authelia_backend %>/api/verify; set $upstream_endpoint http://nginx-backend; set $upstream_headers http://httpbin:8000/headers; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -130,10 +179,9 @@ http { server_name admin.example.com; resolver 127.0.0.11 ipv6=off; - set $upstream_verify http://authelia:8080/api/verify; + set $upstream_verify <%= authelia_backend %>/api/verify; set $upstream_endpoint http://nginx-backend; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -181,10 +229,9 @@ http { server_name dev.example.com; resolver 127.0.0.11 ipv6=off; - set $upstream_verify http://authelia:8080/api/verify; + set $upstream_verify <%= authelia_backend %>/api/verify; set $upstream_endpoint http://nginx-backend; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -232,10 +279,9 @@ http { server_name mx1.mail.example.com mx2.mail.example.com; resolver 127.0.0.11 ipv6=off; - set $upstream_verify http://authelia:8080/api/verify; + set $upstream_verify <%= authelia_backend %>/api/verify; set $upstream_endpoint http://nginx-backend; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -283,11 +329,10 @@ http { server_name single_factor.example.com; resolver 127.0.0.11 ipv6=off; - set $upstream_verify http://authelia:8080/api/verify; + set $upstream_verify <%= authelia_backend %>/api/verify; set $upstream_endpoint http://nginx-backend; set $upstream_headers http://httpbin:8000/headers; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; @@ -355,9 +400,8 @@ http { server_name authelia.example.com; resolver 127.0.0.11 ipv6=off; - set $upstream_endpoint http://authelia:8080; + set $upstream_endpoint <%= authelia_backend %>; - ssl on; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; diff --git a/example/compose/nginx/portal/render.js b/example/compose/nginx/portal/render.js new file mode 100755 index 000000000..607ff70d3 --- /dev/null +++ b/example/compose/nginx/portal/render.js @@ -0,0 +1,40 @@ +#!/usr/bin/env node + +const ejs = require('ejs'); +const fs = require('fs'); +const program = require('commander'); + +let backend; + +program + .version('0.1.0') + .option('-p, --production', 'Render template for production.') + .arguments('[backend]') + .action((backendArg) => backend = backendArg) + .parse(process.argv) + +const options = { + production: false, +} + +if (!backend) { + backend = 'http://192.168.240.1:9091' +} + +if (program.production) { + options['production'] = true; +} + +options['authelia_backend'] = backend; + +const templatePath = __dirname + '/nginx.conf.ejs'; +const outputPath = __dirname + '/nginx.conf'; + +html = ejs.renderFile(templatePath, options, (err, conf) => { + try { + var fd = fs.openSync(outputPath, 'w'); + fs.writeFileSync(fd, conf); + } catch (e) { + fs.writeFileSync(outputPath, conf); + } +}); \ No newline at end of file diff --git a/example/compose/redis/docker-compose.yml b/example/compose/redis/docker-compose.yml index d4aee009f..04bdb3e8f 100644 --- a/example/compose/redis/docker-compose.yml +++ b/example/compose/redis/docker-compose.yml @@ -3,5 +3,7 @@ services: redis: image: redis:4.0-alpine command: redis-server --requirepass authelia + ports: + - "6379:6379" networks: - - example-network + - authelianet diff --git a/example/compose/smtp/docker-compose.yml b/example/compose/smtp/docker-compose.yml index 6fe76e9f3..4fd5e5e56 100644 --- a/example/compose/smtp/docker-compose.yml +++ b/example/compose/smtp/docker-compose.yml @@ -3,6 +3,7 @@ services: smtp: image: schickling/mailcatcher ports: + - "1025:1025" - "8085:1080" networks: - - example-network + - authelianet diff --git a/docker-compose.swarm.minimal.yml b/example/swarm/docker-compose.yml similarity index 100% rename from docker-compose.swarm.minimal.yml rename to example/swarm/docker-compose.yml diff --git a/images/email_confirmation.png b/images/email_confirmation.png index d94426c1b..2e07c2135 100644 Binary files a/images/email_confirmation.png and b/images/email_confirmation.png differ diff --git a/images/first_factor.png b/images/first_factor.png index 3f5036026..1219e70b6 100644 Binary files a/images/first_factor.png and b/images/first_factor.png differ diff --git a/images/reset_password.png b/images/reset_password.png index fc472e7d7..6a3e55d82 100644 Binary files a/images/reset_password.png and b/images/reset_password.png differ diff --git a/images/second_factor.png b/images/second_factor.png index fff40f205..3f717cac8 100644 Binary files a/images/second_factor.png and b/images/second_factor.png differ diff --git a/images/totp.png b/images/totp.png index 37be1e104..2716b2d1b 100644 Binary files a/images/totp.png and b/images/totp.png differ diff --git a/images/u2f.png b/images/u2f.png index 0a5551d3b..20186f2b4 100644 Binary files a/images/u2f.png and b/images/u2f.png differ diff --git a/package-lock.json b/package-lock.json index 7c9d2d1aa..ad8042343 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,20 +10,20 @@ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "7.0.0" } }, "@babel/generator": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.6.tgz", - "integrity": "sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.3.tgz", + "integrity": "sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A==", "dev": true, "requires": { - "@babel/types": "^7.1.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "@babel/types": "7.3.3", + "jsesc": "2.5.2", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" } }, "@babel/helper-function-name": { @@ -32,9 +32,9 @@ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "7.0.0", + "@babel/template": "7.2.2", + "@babel/types": "7.3.3" } }, "@babel/helper-get-function-arity": { @@ -43,7 +43,7 @@ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.3" } }, "@babel/helper-split-export-declaration": { @@ -52,7 +52,7 @@ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.3" } }, "@babel/highlight": { @@ -61,9 +61,9 @@ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "dev": true, "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "chalk": "2.4.2", + "esutils": "2.0.2", + "js-tokens": "4.0.0" }, "dependencies": { "ansi-styles": { @@ -72,18 +72,18 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, "has-flag": { @@ -104,52 +104,52 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } }, "@babel/parser": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.6.tgz", - "integrity": "sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.3.tgz", + "integrity": "sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg==", "dev": true }, "@babel/template": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", - "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.1.2", - "@babel/types": "^7.1.2" + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.3.3", + "@babel/types": "7.3.3" } }, "@babel/traverse": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz", - "integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", + "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.1.6", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.1.6", - "@babel/types": "^7.1.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" + "@babel/code-frame": "7.0.0", + "@babel/generator": "7.3.3", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/parser": "7.3.3", + "@babel/types": "7.3.3", + "debug": "4.1.1", + "globals": "11.11.0", + "lodash": "4.17.11" }, "dependencies": { "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -161,22 +161,23 @@ } }, "@babel/types": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.6.tgz", - "integrity": "sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.3.tgz", + "integrity": "sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "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=", - "dev": true - } + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + } + }, + "@sinonjs/commons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", + "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" } }, "@sinonjs/formatio": { @@ -188,17 +189,15 @@ "samsam": "1.3.0" } }, - "@types/babel-types": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.1.tgz", - "integrity": "sha512-EkcOk09rjhivbovP8WreGRbXW20YRfe/qdgXOGq3it3u3aAOWDRNsQhL/XPAWFF7zhZZ+uR+nT+3b+TCkIap1w==" - }, - "@types/babylon": { - "version": "6.16.2", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz", - "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==", + "@sinonjs/samsam": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.1.1.tgz", + "integrity": "sha512-ILlwvQUwAiaVBzr3qz8oT1moM7AIUHqUc2UmEjQcH9lLe+E+BZPwUMuc9FFojMswRK4r96x5zDTTrowMLw/vuA==", + "dev": true, "requires": { - "@types/babel-types": "*" + "@sinonjs/commons": "1.3.0", + "array-from": "2.1.1", + "lodash": "4.17.11" } }, "@types/bluebird": { @@ -213,18 +212,8 @@ "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "dev": true, "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bootstrap": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-4.1.0.tgz", - "integrity": "sha512-ruk0jxeN8rPUOJ2ja7QptXHUDgVMXpIdxHKoGgRUuNWiItuSqqFELmCwFO5t1IPaF1x3D4/qP0+eqa11+KR7GQ==", - "dev": true, - "requires": { - "@types/jquery": "*", - "popper.js": "^1.14.1" + "@types/connect": "3.4.32", + "@types/node": "10.0.3" } }, "@types/bson": { @@ -233,7 +222,7 @@ "integrity": "sha512-PMa4nkRhLaqwsXQDDTzGbTyCIpej0ERznyAP9fyuGnlsmUbcC4Y25mdqjibYjkOPNyK/BWWUKneruaKHcS3Q8g==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.0.3" } }, "@types/caseless": { @@ -242,13 +231,32 @@ "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==", "dev": true }, + "@types/chokidar": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@types/chokidar/-/chokidar-1.7.5.tgz", + "integrity": "sha512-PDkSRY7KltW3M60hSBlerxI8SFPXsO3AL/aRVsO4Kh9IHRW74Ih75gUuTd/aE4LSSFqypb10UIX3QzOJwBQMGQ==", + "dev": true, + "requires": { + "@types/events": "1.2.0", + "@types/node": "10.0.3" + } + }, + "@types/commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==", + "dev": true, + "requires": { + "commander": "2.19.0" + } + }, "@types/connect": { "version": "3.4.32", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.0.3" } }, "@types/connect-redis": { @@ -257,26 +265,11 @@ "integrity": "sha512-ui1DPnJxqgBhqPj0XTVyPkzffEX9DIGkb2nT2mzZ0OlsKn/u9BvRvKmjpi4Vydf2uw3z/D4UmMH4KMkilySqvw==", "dev": true, "requires": { - "@types/express": "*", - "@types/express-session": "*", - "@types/redis": "*" + "@types/express": "4.11.1", + "@types/express-session": "1.15.8", + "@types/redis": "2.8.6" } }, - "@types/cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", - "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/cucumber": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/cucumber/-/cucumber-4.0.4.tgz", - "integrity": "sha512-oryqKjsoVkcQDFXLkUy+/xBWtnv87XD8ec3m47zgBIikSZKPOzqbVNGkDeIKosUxngR0IfwMjDtlAB5xlKlIIA==", - "dev": true - }, "@types/ejs": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-2.5.1.tgz", @@ -285,7 +278,7 @@ }, "@types/events": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", "dev": true }, @@ -295,9 +288,9 @@ "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==", "dev": true, "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "@types/body-parser": "1.17.0", + "@types/express-serve-static-core": "4.11.1", + "@types/serve-static": "1.13.2" } }, "@types/express-serve-static-core": { @@ -306,19 +299,19 @@ "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*" + "@types/events": "1.2.0", + "@types/node": "10.0.3" } }, "@types/express-session": { "version": "1.15.8", - "resolved": "http://registry.npmjs.org/@types/express-session/-/express-session-1.15.8.tgz", + "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.15.8.tgz", "integrity": "sha512-Be5N9zul4C/IH1UjRDaVJ46wkG1jsBgJlihBdWlqJWfCaiqvaVmxcyqcLey7omSFGCTIUDgdHqf0vwNjEZOSVA==", "dev": true, "requires": { - "@types/events": "*", - "@types/express": "*", - "@types/node": "*" + "@types/events": "1.2.0", + "@types/express": "4.11.1", + "@types/node": "10.0.3" } }, "@types/form-data": { @@ -327,7 +320,7 @@ "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.0.3" } }, "@types/helmet": { @@ -336,34 +329,17 @@ "integrity": "sha512-E45vdnx+7+HIN5jsywhzfd+hUI/2yBFr6RT7tsMVrwp+uTvyVANBf4dyVUNW/+ZqAvcx23t2YtGTndQJR3tXIA==", "dev": true, "requires": { - "@types/express": "*" - } - }, - "@types/jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-N3h+rzN518yl2xKrW0o6KKdNmWZ+OwG6SoM5TBEQFF0tTv5wXPEsoOuYQ2Kt3/89XbcSZUJLdjiT/2c3BR/ApQ==", - "dev": true - }, - "@types/jsdom": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-11.0.4.tgz", - "integrity": "sha512-lthMj4kw7Fzs3LjBhQ0+1faAfDrN9GFJZO5Nf/xO7fppFfxqnnQdNR28n0xMGXsx8fTHOPliE1NTkAW1bVLpYw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^3.0.2" + "@types/express": "4.11.1" } }, "@types/ldapjs": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.3.tgz", "integrity": "sha512-FSj24s1WsFEfOy8taIKp2DokSZfFkjWYZb88AS5eDj3WTocZ+4DnHjhzrXEs048WQ5mfOLJXMOAnc0kSnHh5Lw==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*" + "@types/events": "1.2.0", + "@types/node": "10.0.3" } }, "@types/mime": { @@ -373,14 +349,14 @@ "dev": true }, "@types/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-YeDiSEzznwZwwp766SJ6QlrTyBYUGPSIwmREHVTmktUYiT/WADdWtpt9iH0KuUSf8lZLdI4lP0X6PBzPo5//JQ==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz", + "integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==", "dev": true }, "@types/mockdate": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/@types/mockdate/-/mockdate-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/@types/mockdate/-/mockdate-2.0.0.tgz", "integrity": "sha1-qvOIoerTsPXtbcFhGVbqe0ClfTw=", "dev": true }, @@ -390,9 +366,9 @@ "integrity": "sha512-G2cE4c+6+zvbWos+VbEiOdlr6sqbyrvuRmUHGAQGSkLvs+P/omIBV8FvfFTnAQW8/Op1kqXJUnK8mXSm3Dnnjg==", "dev": true, "requires": { - "@types/bson": "*", - "@types/events": "*", - "@types/node": "*" + "@types/bson": "1.0.8", + "@types/events": "1.2.0", + "@types/node": "10.0.3" } }, "@types/nedb": { @@ -407,14 +383,23 @@ "integrity": "sha512-J7nx6JzxmtT4zyvfLipYL7jNaxvlCWpyG7JhhCQ4fQyG+AGfovAHoYR55TFx+X8akfkUJYpt5JG6GPeFMjZaCQ==", "dev": true }, + "@types/node-fetch": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.1.4.tgz", + "integrity": "sha512-tR1ekaXUGpmzOcDXWU9BW73YfA2/VW1DF1FH+wlJ82BbCSnWTbdX+JkqWQXWKIGsFPnPsYadbXfNgz28g+ccWg==", + "dev": true, + "requires": { + "@types/node": "10.0.3" + } + }, "@types/nodemailer": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-4.6.0.tgz", "integrity": "sha512-DWG172izmWXfShUm2Lm6nVght5TxDI1cx2cKiGPeu2f66yTnn0QY7WhC9OSybdPoxGu7UbRXNuIkIzB+NE648A==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*" + "@types/events": "1.2.0", + "@types/node": "10.0.3" } }, "@types/nodemailer-direct-transport": { @@ -423,7 +408,7 @@ "integrity": "sha512-LDFL7X58v4som2QnodajLgltFpCbF4JAqlg/Iy4SNbrnfBraJVU/ySh7gvd22Wc6V6CSpuG3SjZolJfNf7Z3bA==", "dev": true, "requires": { - "@types/nodemailer": "^3" + "@types/nodemailer": "3.1.5" }, "dependencies": { "@types/nodemailer": { @@ -432,11 +417,11 @@ "integrity": "sha512-d8GSTD/5kEf7fsghVEyU9vqRVGu+Hpmf/z+x+7+vXGvbK7kQoorulvuOX4ozPmGsJCq7oBIdHw5gFIRDvSvdag==", "dev": true, "requires": { - "@types/node": "*", - "@types/nodemailer-direct-transport": "*", - "@types/nodemailer-ses-transport": "*", - "@types/nodemailer-smtp-transport": "*", - "aws-sdk": "^2.37.0" + "@types/node": "10.0.3", + "@types/nodemailer-direct-transport": "1.0.31", + "@types/nodemailer-ses-transport": "3.1.4", + "@types/nodemailer-smtp-transport": "2.7.4", + "aws-sdk": "2.230.1" } } } @@ -447,8 +432,8 @@ "integrity": "sha512-gWoykP57qYQ60YDD0vFPGDYN/Waq+aKI4k2UBrf5nc87+wlg71eAbb4HwDdZeANLR/wdWkAWdUjz1XgGcpUZNA==", "dev": true, "requires": { - "@types/nodemailer": "^3", - "aws-sdk": "^2.37.0" + "@types/nodemailer": "3.1.5", + "aws-sdk": "2.230.1" }, "dependencies": { "@types/nodemailer": { @@ -457,11 +442,11 @@ "integrity": "sha512-d8GSTD/5kEf7fsghVEyU9vqRVGu+Hpmf/z+x+7+vXGvbK7kQoorulvuOX4ozPmGsJCq7oBIdHw5gFIRDvSvdag==", "dev": true, "requires": { - "@types/node": "*", - "@types/nodemailer-direct-transport": "*", - "@types/nodemailer-ses-transport": "*", - "@types/nodemailer-smtp-transport": "*", - "aws-sdk": "^2.37.0" + "@types/node": "10.0.3", + "@types/nodemailer-direct-transport": "1.0.31", + "@types/nodemailer-ses-transport": "3.1.4", + "@types/nodemailer-smtp-transport": "2.7.4", + "aws-sdk": "2.230.1" } } } @@ -472,8 +457,8 @@ "integrity": "sha512-AXsNWM1gKm3ieD+Ff7FK4mmpkPnpOGVzLSM67T0l8cQGz0G7mFbcq48FhxfbrOtm92gG00k9Cv81+flXhDBuxg==", "dev": true, "requires": { - "@types/node": "*", - "@types/nodemailer": "^3" + "@types/node": "10.0.3", + "@types/nodemailer": "3.1.5" }, "dependencies": { "@types/nodemailer": { @@ -482,11 +467,11 @@ "integrity": "sha512-d8GSTD/5kEf7fsghVEyU9vqRVGu+Hpmf/z+x+7+vXGvbK7kQoorulvuOX4ozPmGsJCq7oBIdHw5gFIRDvSvdag==", "dev": true, "requires": { - "@types/node": "*", - "@types/nodemailer-direct-transport": "*", - "@types/nodemailer-ses-transport": "*", - "@types/nodemailer-smtp-transport": "*", - "aws-sdk": "^2.37.0" + "@types/node": "10.0.3", + "@types/nodemailer-direct-transport": "1.0.31", + "@types/nodemailer-ses-transport": "3.1.4", + "@types/nodemailer-smtp-transport": "2.7.4", + "aws-sdk": "2.230.1" } } } @@ -497,12 +482,6 @@ "integrity": "sha512-txsii9cwD2OUOPukfPu3Jpoi3CnznBAwRX3JF26EC4p5T6IA8AaL6PBilACyY2fJkk+ydDNo4BJrJOo/OmNaZw==", "dev": true }, - "@types/proxyquire": { - "version": "1.3.28", - "resolved": "https://registry.npmjs.org/@types/proxyquire/-/proxyquire-1.3.28.tgz", - "integrity": "sha512-SQaNzWQ2YZSr7FqAyPPiA3FYpux2Lqh3HWMZQk47x3xbMCqgC/w0dY3dw9rGqlweDDkrySQBcaScXWeR+Yb11Q==", - "dev": true - }, "@types/query-string": { "version": "5.1.0", "resolved": "http://registry.npmjs.org/@types/query-string/-/query-string-5.1.0.tgz", @@ -521,8 +500,8 @@ "integrity": "sha512-kaSI4XQwCfJtPiuyCXvLxCaw2N0fMZesdob3Jh01W20vNFct+3lfvJ/4yCJxbSopXOBOzpg+pGxkW6uWZrPZHA==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*" + "@types/events": "1.2.0", + "@types/node": "10.0.3" } }, "@types/request": { @@ -531,10 +510,10 @@ "integrity": "sha512-/KXM5oev+nNCLIgBjkwbk8VqxmzI56woD4VUxn95O+YeQ8hJzcSmIZ1IN3WexiqBb6srzDo2bdMbsXxgXNkz5Q==", "dev": true, "requires": { - "@types/caseless": "*", - "@types/form-data": "*", - "@types/node": "*", - "@types/tough-cookie": "*" + "@types/caseless": "0.12.1", + "@types/form-data": "2.2.1", + "@types/node": "10.0.3", + "@types/tough-cookie": "2.3.2" } }, "@types/request-promise": { @@ -543,8 +522,8 @@ "integrity": "sha512-qlx6COxSTdSFHY9oX9v2zL1I05hgz5lwqYiXa2SFL2nDxAiG5KK8rnllLBH7k6OqzS3Ck0bWbxlGVdrZhS6oNw==", "dev": true, "requires": { - "@types/bluebird": "*", - "@types/request": "*" + "@types/bluebird": "3.5.20", + "@types/request": "2.47.0" } }, "@types/selenium-webdriver": { @@ -559,8 +538,8 @@ "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", "dev": true, "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@types/express-serve-static-core": "4.11.1", + "@types/mime": "2.0.0" } }, "@types/sinon": { @@ -587,37 +566,26 @@ "integrity": "sha512-vOVmaruQG5EatOU/jM6yU2uCp3Lz6mK1P5Ztu4iJjfM4SVHU9XYktPUQtKlIXuahqXHdEyUarMrBEwg5Cwu+bA==", "dev": true }, + "@types/url-parse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/url-parse/-/url-parse-1.4.2.tgz", + "integrity": "sha512-Z25Ef2iI0lkiBAoe8qATRHQWy+BWFWuWasD6HB5prsWx2QjLmB/ngXv8v9dePw2jDwdSvET4/6J5HxmeqhslmQ==" + }, "@types/winston": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz", "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.0.3" } }, "@types/yamljs": { "version": "0.2.30", - "resolved": "http://registry.npmjs.org/@types/yamljs/-/yamljs-0.2.30.tgz", + "resolved": "https://registry.npmjs.org/@types/yamljs/-/yamljs-0.2.30.tgz", "integrity": "sha1-0DTh0ynkbo0Pc3yajbl/aPgbU4I=", "dev": true }, - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -629,79 +597,41 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.18", "negotiator": "0.6.1" } }, - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - }, - "acorn-es7-plugin": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz", - "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=", - "dev": true - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "requires": { - "acorn": "^4.0.4" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } - } - }, - "acorn-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", - "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", - "dev": true, - "requires": { - "acorn": "^5.4.1", - "xtend": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - } - } - }, "ajv": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "requires": { - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^3.0.2" - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" } }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, "ansi-regex": { @@ -716,20 +646,14 @@ "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", "dev": true }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "apidoc": { @@ -738,12 +662,12 @@ "integrity": "sha1-TuisYQ3t3csQBsPij6fdY0tKXOY=", "dev": true, "requires": { - "apidoc-core": "~0.8.2", - "fs-extra": "~3.0.1", - "lodash": "~4.17.4", - "markdown-it": "^8.3.1", - "nomnom": "~1.8.1", - "winston": "~2.3.1" + "apidoc-core": "0.8.3", + "fs-extra": "3.0.1", + "lodash": "4.17.11", + "markdown-it": "8.4.1", + "nomnom": "1.8.1", + "winston": "2.3.1" }, "dependencies": { "async": { @@ -758,12 +682,12 @@ "integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=", "dev": true, "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" } } } @@ -774,12 +698,12 @@ "integrity": "sha1-2dY1RYKd8lDSzKBJaDqH53U2S5Y=", "dev": true, "requires": { - "fs-extra": "^3.0.1", - "glob": "^7.1.1", - "iconv-lite": "^0.4.17", - "klaw-sync": "^2.1.0", - "lodash": "~4.17.4", - "semver": "~5.3.0" + "fs-extra": "3.0.1", + "glob": "7.1.2", + "iconv-lite": "0.4.19", + "klaw-sync": "2.1.0", + "lodash": "4.17.11", + "semver": "5.3.0" }, "dependencies": { "glob": { @@ -788,12 +712,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "semver": { @@ -809,17 +733,14 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -827,16 +748,10 @@ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, - "array-equal": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-find-index": { @@ -850,16 +765,10 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", "dev": true }, "array-union": { @@ -868,7 +777,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.2" } }, "array-uniq": { @@ -877,9 +786,9 @@ "integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0=" }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "arrify": { @@ -888,68 +797,21 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, - "assertion-error-formatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz", - "integrity": "sha512-cjC3jUCh9spkroKue5PDSKH5RFQ/KNuZJhk3GwHYmB/8qqETxLOmMdLH+ohi/VukNzxDlMvIe7zScvLoOdhb6Q==", - "dev": true, - "requires": { - "diff": "^3.0.0", - "pad-right": "^0.2.2", - "repeat-string": "^1.6.1" - } - }, - "astw": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dev": true, - "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "async": { "version": "0.2.10", @@ -962,18 +824,18 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, "aws-sdk": { "version": "2.230.1", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.230.1.tgz", @@ -1018,9 +880,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" }, "dependencies": { "ansi-styles": { @@ -1031,15 +893,15 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "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" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "strip-ansi": { @@ -1048,42 +910,17 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, "backoff": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", "requires": { - "precond": "0.2" + "precond": "0.2.3" } }, "balanced-match": { @@ -1091,6 +928,73 @@ "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==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "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=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "base32.js": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.0.1.tgz", @@ -1108,15 +1012,9 @@ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, - "becke-ch--regex--s0-0-v1--base--pl--lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=", - "dev": true - }, "binary-extensions": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", @@ -1128,7 +1026,7 @@ "resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz", "integrity": "sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=", "requires": { - "underscore": "~1.4.4" + "underscore": "1.4.4" } }, "bluebird": { @@ -1136,131 +1034,116 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "dev": true, - "requires": { - "continuable-cache": "^0.3.1", - "error": "^7.0.0", - "raw-body": "~1.1.0", - "safe-json-parse": "~1.0.1" - }, - "dependencies": { - "bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", - "dev": true - }, - "raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "dev": true, - "requires": { - "bytes": "1", - "string_decoder": "0.10" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, "body-parser": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "~1.6.15" + "type-is": "1.6.16" } }, - "bootstrap": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz", - "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w==", - "dev": true + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.4.2", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.1" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } }, "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", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dev": true, - "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-process-hrtime": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", - "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", - "dev": true - }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" + "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.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } } } }, @@ -1270,237 +1153,6 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "browserify": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.0.tgz", - "integrity": "sha512-yotdAkp/ZbgDesHQBYU37zjc29JDH4iXT8hjzM1fdUVWogjARX0S1cKeX24Ci6zZ+jG+ADmCTRt6xvtmJnI+BQ==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^1.11.0", - "browserify-zlib": "~0.2.0", - "buffer": "^5.0.2", - "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": "^0.5.0", - "module-deps": "^6.0.0", - "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": "^2.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": { - "buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "events": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", - "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "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" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "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=", - "dev": true - } - } - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "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-cache-api": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/browserify-cache-api/-/browserify-cache-api-3.0.1.tgz", - "integrity": "sha1-liR+hT8Gj9bg1FzHPwuyzZd47wI=", - "dev": true, - "requires": { - "async": "^1.5.2", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "browserify-incremental": { - "version": "3.1.1", - "resolved": "http://registry.npmjs.org/browserify-incremental/-/browserify-incremental-3.1.1.tgz", - "integrity": "sha1-BxPLdYckemMqnwjPG9FpuHi2Koo=", - "dev": true, - "requires": { - "JSONStream": "^0.10.0", - "browserify-cache-api": "^3.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "JSONStream": { - "version": "0.10.0", - "resolved": "http://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz", - "integrity": "sha1-dDSdDYlSK3HzDwoD/5vSDKbxKsA=", - "dev": true, - "requires": { - "jsonparse": "0.0.5", - "through": ">=2.2.7 <3" - } - }, - "jsonparse": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", - "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=", - "dev": true - } - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, "bson": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", @@ -1508,13 +1160,13 @@ }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.0", + "ieee754": "1.1.8", + "isarray": "1.0.0" } }, "buffer-from": { @@ -1523,33 +1175,21 @@ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "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=", - "dev": true - }, "bunyan": { "version": "1.8.12", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" + "dtrace-provider": "0.8.6", + "moment": "2.22.1", + "mv": "2.1.1", + "safe-json-stringify": "1.1.0" } }, "bytes": { @@ -1557,31 +1197,45 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "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==", - "dev": true - }, - "call-signature": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz", - "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=", - "dev": true + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "2.1.1", + "map-obj": "1.0.1" }, "dependencies": { "camelcase": { @@ -1597,55 +1251,48 @@ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", "dev": true, "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", - "requires": { - "is-regex": "^1.0.3" + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" } }, "chromedriver": { @@ -1654,48 +1301,80 @@ "integrity": "sha512-gh77kozqCPTtr74RZpnSgBCoClpNznsg2NEKwi8t54UyzrcpMRkG9nH1qhwI+ojLQpsdpsSjGiASSdMsFZT/mw==", "dev": true, "requires": { - "del": "^3.0.0", - "extract-zip": "^1.6.6", - "kew": "^0.7.0", - "mkdirp": "^0.5.1", - "request": "^2.85.0" + "del": "3.0.0", + "extract-zip": "1.6.6", + "kew": "0.7.0", + "mkdirp": "0.5.1", + "request": "2.88.0" } }, - "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==", + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "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==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "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=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", - "requires": { - "source-map": "0.5.x" - } - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, - "requires": { - "colors": "1.0.3" - } + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "co": { @@ -1716,13 +1395,23 @@ "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", "dev": true }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, "color-convert": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -1736,31 +1425,25 @@ "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, - "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=", - "dev": true, - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "concat-map": { @@ -1768,16 +1451,297 @@ "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==", + "concurrently": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.1.0.tgz", + "integrity": "sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "chalk": "2.4.2", + "date-fns": "1.30.1", + "lodash": "4.17.11", + "read-pkg": "4.0.1", + "rxjs": "6.3.3", + "spawn-command": "0.0.2-1", + "supports-color": "4.5.0", + "tree-kill": "1.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.5.0", + "shebang-command": "1.2.0", + "which": "1.2.14" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.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==", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "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==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "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==", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "dev": true, + "requires": { + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.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==", + "dev": true, + "requires": { + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "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==", + "dev": true, + "requires": { + "p-limit": "2.1.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "2.4.0", + "parse-json": "4.0.0", + "pify": "3.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + } + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.2", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "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==", + "dev": true, + "requires": { + "camelcase": "5.0.0", + "decamelize": "1.2.0" + } + } + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.3.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" } }, "connect-redis": { @@ -1785,8 +1749,8 @@ "resolved": "https://registry.npmjs.org/connect-redis/-/connect-redis-3.3.3.tgz", "integrity": "sha512-rpWsW2uk1uOe/ccY/JvW+RiLrhZm7auIx8z4yR+KXemFTIhJyD58jXiJbI0E/fZCnybawpdSqOZ+6/ah6aBeyg==", "requires": { - "debug": "^3.1.0", - "redis": "^2.1.0" + "debug": "3.1.0", + "redis": "2.8.0" }, "dependencies": { "debug": { @@ -1799,32 +1763,6 @@ } } }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "constantinople": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", - "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", - "requires": { - "@types/babel-types": "^7.0.0", - "@types/babylon": "^6.16.2", - "babel-types": "^6.26.0", - "babylon": "^6.18.0" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -1840,18 +1778,6 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", - "dev": true - }, - "convert-source-map": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -1862,10 +1788,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "core-js": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", - "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -1877,41 +1804,13 @@ "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" }, - "create-ecdh": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", - "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "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": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "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" + "capture-stack-trace": "1.0.1" } }, "cross-spawn": { @@ -1920,9 +1819,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.2.14" } }, "crypt3": { @@ -1930,115 +1829,14 @@ "resolved": "https://registry.npmjs.org/crypt3/-/crypt3-1.0.0.tgz", "integrity": "sha1-imWPHRaZm1UFrclszNe8aDIUvv4=", "requires": { - "nan": "^2.1.0", - "q": "^1.0.1" + "nan": "2.10.0", + "q": "1.5.1" } }, - "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==", - "dev": true, - "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" - } - }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", - "dev": true - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "cucumber": { - "version": "4.2.1", - "resolved": "http://registry.npmjs.org/cucumber/-/cucumber-4.2.1.tgz", - "integrity": "sha512-3gQ0Vv4kSHsvXEFC6b1c+TfLRDzWD1/kU7e5vm8Kh8j35b95k6favan9/4ixcBNqd7UsU1T6FYcawC87+DlNKw==", - "dev": true, - "requires": { - "assertion-error-formatter": "^2.0.1", - "babel-runtime": "^6.11.6", - "bluebird": "^3.4.1", - "cli-table": "^0.3.1", - "colors": "^1.1.2", - "commander": "^2.9.0", - "cucumber-expressions": "^5.0.13", - "cucumber-tag-expressions": "^1.1.1", - "duration": "^0.2.0", - "escape-string-regexp": "^1.0.5", - "figures": "2.0.0", - "gherkin": "^5.0.0", - "glob": "^7.0.0", - "indent-string": "^3.1.0", - "is-generator": "^1.0.2", - "is-stream": "^1.1.0", - "knuth-shuffle-seeded": "^1.0.6", - "lodash": "^4.17.4", - "mz": "^2.4.0", - "progress": "^2.0.0", - "resolve": "^1.3.3", - "serialize-error": "^2.1.0", - "stack-chain": "^2.0.0", - "stacktrace-js": "^2.0.0", - "string-argv": "0.0.2", - "title-case": "^2.1.1", - "util-arity": "^1.0.2", - "verror": "^1.9.0" - }, - "dependencies": { - "colors": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.3.tgz", - "integrity": "sha512-qTfM2pNFeMZcLvf/RbrVAzDEVttZjFhaApfx9dplNjvHSX88Ui66zBRb/4YGob/xUWxDceirgoC1lT676asfCQ==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "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" - } - } - } - }, - "cucumber-expressions": { - "version": "5.0.17", - "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-5.0.17.tgz", - "integrity": "sha1-GS9p/JlKYFEnql33JFGbXLfftwg=", - "dev": true, - "requires": { - "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.2.0" - } - }, - "cucumber-tag-expressions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz", - "integrity": "sha1-f1x7cACbwrZmWRv+ZIVFeL7e6Fo=", + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, "currently-unhandled": { @@ -2047,7 +1845,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "array-find-index": "1.0.2" } }, "cycle": { @@ -2055,21 +1853,12 @@ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, - "d": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, "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" + "assert-plus": "1.0.0" } }, "dasherize": { @@ -2077,21 +1866,10 @@ "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, - "data-urls": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", - "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", - "dev": true, - "requires": { - "abab": "^1.0.4", - "whatwg-mimetype": "^2.0.0", - "whatwg-url": "^6.4.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, "dateformat": { @@ -2100,8 +1878,8 @@ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" + "get-stdin": "4.0.1", + "meow": "3.7.0" } }, "debug": { @@ -2115,7 +1893,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -2123,6 +1902,12 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2130,20 +1915,66 @@ "dev": true }, "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" + "object-keys": "1.1.0" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } }, "del": { "version": "3.0.0", @@ -2151,12 +1982,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.4.5" } }, "delayed-stream": { @@ -2170,51 +2001,16 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detective": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", - "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==", - "dev": true, - "requires": { - "acorn-node": "^1.3.0", - "defined": "^1.0.0", - "minimist": "^1.1.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true }, "diff": { "version": "3.5.0", @@ -2222,53 +2018,25 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "diff-match-patch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.0.tgz", - "integrity": "sha1-HMPIOkkNZ/ldkeOfatHy4Ia2MEg=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, "dns-prefetch-control": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" }, - "doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" - }, - "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==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, "dont-sniff-mimetype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, "double-ended-queue": { "version": "2.1.0-0", "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", @@ -2280,38 +2048,13 @@ "integrity": "sha1-QooiOv4DQl0s1tY0f99AxmkDVj0=", "optional": true, "requires": { - "nan": "^2.3.3" + "nan": "2.10.0" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { + "duplexer3": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "duration": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.0.tgz", - "integrity": "sha1-X5xN+q//ZV3phhEu/iXFl43YUUY=", - "dev": true, - "requires": { - "d": "~0.1.1", - "es5-ext": "~0.10.2" - } - }, - "eastasianwidth": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.1.1.tgz", - "integrity": "sha1-RNZW3p2kFWlEZzNTZfsxR7hXK3w=", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, "ecc-jsbn": { @@ -2320,8 +2063,8 @@ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "ee-first": { @@ -2334,111 +2077,58 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "empower": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/empower/-/empower-1.2.3.tgz", - "integrity": "sha1-bw2nNEf07dg4/sXGAxOoi6XLhSs=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "empower-core": "^0.6.2" - } - }, - "empower-core": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-0.6.2.tgz", - "integrity": "sha1-Wt71ZgiOMfuoC6CjbfR9cJQWkUQ=", - "dev": true, - "requires": { - "call-signature": "0.0.2", - "core-js": "^2.0.0" - } - }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", "dev": true }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" - } - }, "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==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, - "error-stack-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", - "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "dev": true, "requires": { - "stackframe": "^1.0.3" + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.0" } }, - "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - } + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" } }, "es6-promise": { @@ -2447,27 +2137,6 @@ "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", "dev": true }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - } - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2485,11 +2154,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" }, "dependencies": { "source-map": { @@ -2499,7 +2168,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -2510,15 +2179,6 @@ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, - "espurify": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz", - "integrity": "sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY=", - "dev": true, - "requires": { - "core-js": "^2.0.0" - } - }, "estraverse": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", @@ -2528,7 +2188,8 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "etag": { "version": "1.8.1", @@ -2543,33 +2204,23 @@ }, "events": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, - "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==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.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" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "exit": { @@ -2579,21 +2230,47 @@ "dev": true }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "fill-range": "^2.1.0" + "homedir-polyfill": "1.0.3" } }, "expect-ct": { @@ -2606,36 +2283,36 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", + "proxy-addr": "2.0.3", "qs": "6.5.1", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "statuses": { @@ -2650,7 +2327,7 @@ "resolved": "https://registry.npmjs.org/express-request-id/-/express-request-id-1.4.0.tgz", "integrity": "sha1-J3ssCUmAPmgQTJ1Fw+aJNPlr9aI=", "requires": { - "uuid": "^3.0.1" + "uuid": "3.2.1" } }, "express-session": { @@ -2662,10 +2339,10 @@ "cookie-signature": "1.0.6", "crc": "3.4.4", "debug": "2.6.9", - "depd": "~1.1.1", - "on-headers": "~1.0.1", - "parseurl": "~1.3.2", - "uid-safe": "~2.1.5", + "depd": "1.1.2", + "on-headers": "1.0.1", + "parseurl": "1.3.2", + "uid-safe": "2.1.5", "utils-merge": "1.0.1" } }, @@ -2675,13 +2352,96 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "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==", + "dev": true, + "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==", + "dev": true, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "extract-zip": { @@ -2702,9 +2462,9 @@ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "mkdirp": { @@ -2744,31 +2504,13 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, "fd-slicer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "dev": true, "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "pend": "1.2.0" } }, "file-sync-cmp": { @@ -2777,47 +2519,41 @@ "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", "dev": true }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", - "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", - "dev": true, - "requires": { - "is-object": "~1.0.1", - "merge-descriptors": "~1.0.0" - } - }, "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, "finalhandler": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" }, "dependencies": { "statuses": { @@ -2833,8 +2569,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "findup-sync": { @@ -2843,7 +2579,7 @@ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", "dev": true, "requires": { - "glob": "~5.0.0" + "glob": "5.0.15" }, "dependencies": { "glob": { @@ -2852,36 +2588,38 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + } + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2894,9 +2632,9 @@ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.18" } }, "forwarded": { @@ -2904,6 +2642,15 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, "frameguard": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", @@ -2920,9 +2667,9 @@ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.1" } }, "fs.realpath": { @@ -2937,8 +2684,8 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { @@ -2950,8 +2697,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2965,23 +2711,21 @@ "dev": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -2994,20 +2738,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -3048,7 +2789,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { @@ -3063,14 +2804,14 @@ "dev": true, "optional": true, "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" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" } }, "glob": { @@ -3079,12 +2820,12 @@ "dev": true, "optional": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -3099,7 +2840,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": "2.1.2" } }, "ignore-walk": { @@ -3108,7 +2849,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -3117,15 +2858,14 @@ "dev": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -3137,9 +2877,8 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -3152,25 +2891,22 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "minizlib": { @@ -3179,14 +2915,13 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -3203,9 +2938,9 @@ "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" } }, "node-pre-gyp": { @@ -3214,16 +2949,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" } }, "nopt": { @@ -3232,8 +2967,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -3248,8 +2983,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npmlog": { @@ -3258,17 +2993,16 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3280,9 +3014,8 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -3303,8 +3036,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -3325,10 +3058,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -3345,13 +3078,13 @@ "dev": true, "optional": true, "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" + "core-util-is": "1.0.2", + "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.2" } }, "rimraf": { @@ -3360,14 +3093,13 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3403,11 +3135,10 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -3416,16 +3147,15 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -3440,13 +3170,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "util-deprecate": { @@ -3461,36 +3191,26 @@ "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "get-caller-file": { "version": "1.0.2", @@ -3506,10 +3226,16 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, "getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", @@ -3522,50 +3248,79 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, - "gherkin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.0.0.tgz", - "integrity": "sha1-lt70EZjsOQgli1Ea909lWidk0qE=", - "dev": true - }, "glob": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "1.3.5" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.3", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.2.14" } }, "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, "globby": { @@ -3574,11 +3329,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { "glob": { @@ -3587,12 +3342,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "pify": { @@ -3603,31 +3358,23 @@ } } }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "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" - } - } + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.1", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" } }, "graceful-fs": { @@ -3637,9 +3384,9 @@ "dev": true }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "grunt": { @@ -3648,23 +3395,23 @@ "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", "dev": true, "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~2.0.0", - "grunt-legacy-util": "~1.1.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", - "minimatch": "~3.0.2", - "mkdirp": "~0.5.1", - "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.6.2" + "coffeescript": "1.10.0", + "dateformat": "1.0.12", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.3.0", + "glob": "7.0.6", + "grunt-cli": "1.2.0", + "grunt-known-options": "1.1.1", + "grunt-legacy-log": "2.0.0", + "grunt-legacy-util": "1.1.1", + "iconv-lite": "0.4.19", + "js-yaml": "3.5.5", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" }, "dependencies": { "glob": { @@ -3673,12 +3420,12 @@ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "grunt-cli": { @@ -3687,10 +3434,10 @@ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", "dev": true, "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" + "findup-sync": "0.3.0", + "grunt-known-options": "1.1.1", + "nopt": "3.0.6", + "resolve": "1.1.7" } }, "resolve": { @@ -3705,47 +3452,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.0.5" - } - } - } - }, - "grunt-browserify": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/grunt-browserify/-/grunt-browserify-5.3.0.tgz", - "integrity": "sha1-R/2M+LrFj+LeaDr9xX9/OoDKeS0=", - "dev": true, - "requires": { - "async": "^2.5.0", - "browserify": "^16.0.0", - "browserify-incremental": "^3.1.1", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "resolve": "^1.1.6", - "watchify": "^3.6.1" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "^4.14.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "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": "7.0.6" } } } @@ -3756,8 +3463,8 @@ "integrity": "sha512-g5ZD3ORk6gMa5ugZosLDQl3dZO7cI3R14U75hTM+dVLVxdMNJCPVmwf9OUt4v4eWgpKKWWoVK9DZc1amJp4nQw==", "dev": true, "requires": { - "async": "^2.6.1", - "rimraf": "^2.6.2" + "async": "2.6.1", + "rimraf": "2.6.2" }, "dependencies": { "async": { @@ -3766,7 +3473,7 @@ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.11" } }, "glob": { @@ -3775,12 +3482,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "rimraf": { @@ -3789,47 +3496,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.0.5" - } - } - } - }, - "grunt-contrib-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", - "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "source-map": "^0.5.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" + "glob": "7.1.3" } } } @@ -3840,8 +3507,8 @@ "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", "dev": true, "requires": { - "chalk": "^1.1.1", - "file-sync-cmp": "^0.1.0" + "chalk": "1.1.3", + "file-sync-cmp": "0.1.1" }, "dependencies": { "ansi-styles": { @@ -3856,11 +3523,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "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" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "strip-ansi": { @@ -3869,93 +3536,11 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } }, - "grunt-contrib-cssmin": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-2.2.1.tgz", - "integrity": "sha512-IXNomhQ5ekVZbDbj/ik5YccoD9khU6LT2fDXqO1+/Txjq8cp0tQKjVS8i8EAbHOrSDkL7/UD6A7b+xj98gqh9w==", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "clean-css": "~4.1.1", - "maxmin": "^2.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "grunt-contrib-watch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", - "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", - "dev": true, - "requires": { - "async": "^2.6.0", - "gaze": "^1.1.0", - "lodash": "^4.17.10", - "tiny-lr": "^1.1.1" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - } - } - }, - "grunt-env": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/grunt-env/-/grunt-env-0.4.4.tgz", - "integrity": "sha1-OziEOo1zcXfdyfiTh5+2nOGgvC8=", - "dev": true, - "requires": { - "ini": "~1.3.0", - "lodash": "~2.4.1" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, "grunt-known-options": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", @@ -3968,10 +3553,10 @@ "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", "dev": true, "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" + "colors": "1.1.2", + "grunt-legacy-log-utils": "2.0.1", + "hooker": "0.2.3", + "lodash": "4.17.11" }, "dependencies": { "colors": { @@ -3988,8 +3573,8 @@ "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", "dev": true, "requires": { - "chalk": "~2.4.1", - "lodash": "~4.17.10" + "chalk": "2.4.1", + "lodash": "4.17.11" }, "dependencies": { "ansi-styles": { @@ -3998,7 +3583,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -4007,9 +3592,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, "has-flag": { @@ -4024,7 +3609,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -4035,13 +3620,13 @@ "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", "dev": true, "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.10", - "underscore.string": "~3.3.4", - "which": "~1.3.0" + "async": "1.5.2", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "4.17.11", + "underscore.string": "3.3.5", + "which": "1.3.1" }, "dependencies": { "async": { @@ -4056,7 +3641,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } } } @@ -4067,7 +3652,7 @@ "integrity": "sha512-yW2uTYBGvkDUK6+lWfXObE5gm8Kbjs7RrUh4NFqR0pOZ+YU/fR7rZPgTIn1f6hYpKXc/pCJSgGCtZIipLXVedw==", "dev": true, "requires": { - "strip-ansi": "^3.0.0" + "strip-ansi": "3.0.1" }, "dependencies": { "strip-ansi": { @@ -4076,45 +3661,54 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } }, - "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", - "dev": true, - "requires": { - "duplexer": "^0.1.1" - } - }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "async": "2.6.2", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.4.9" }, "dependencies": { "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "lodash": "4.17.11" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "dev": true, + "optional": true, + "requires": { + "commander": "2.17.1", + "source-map": "0.6.1" } } } @@ -4131,8 +3725,8 @@ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "dev": true, "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" }, "dependencies": { "ajv": { @@ -4141,20 +3735,21 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } } } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { - "function-bind": "^1.0.2" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -4163,7 +3758,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-color": { @@ -4178,30 +3773,76 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "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=", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "helmet": { @@ -4240,15 +3881,13 @@ "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "parse-passwd": "1.0.0" } }, "hooker": { @@ -4273,47 +3912,26 @@ "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.5.0" } }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.15.1" } }, "httpntlm": { @@ -4321,8 +3939,8 @@ "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", "requires": { - "httpreq": ">=0.4.22", - "underscore": "~1.7.0" + "httpreq": "0.4.24", + "underscore": "1.7.0" }, "dependencies": { "underscore": { @@ -4337,12 +3955,6 @@ "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" }, - "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=", - "dev": true - }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", @@ -4359,21 +3971,27 @@ "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { @@ -4381,8 +3999,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -4396,32 +4014,6 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "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=", - "dev": true, - "requires": { - "source-map": "~0.5.3" - } - }, - "insert-module-globals": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.6.tgz", - "integrity": "sha512-R3sidKJr3SsggqQQ5cEwQb3pWG8RNx0UnpyeiOSR6jorRIeAOzH2gkTWnNdMnyRiVbjrG047K7UCtlMkQ1Mo9w==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "lexical-scope": "^1.2.0", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -4433,6 +4025,15 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" }, + "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=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4445,51 +4046,70 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.11.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==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-builtin-module": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "is-primitive": "^2.0.0" + "ci-info": "1.6.0" } }, - "is-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "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=", + "dev": true, "requires": { - "acorn": "~4.0.2", - "object-assign": "^4.0.1" + "kind-of": "3.2.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "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==", + "dev": true } } }, @@ -4500,9 +4120,9 @@ "dev": true }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-finite": { @@ -4511,7 +4131,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -4520,34 +4140,44 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "is-generator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", - "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, - "is-object": { + "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, "is-path-cwd": { @@ -4562,7 +4192,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { @@ -4571,40 +4201,62 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "1.0.2" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "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==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, "requires": { - "has": "^1.0.1" + "has": "1.0.3" } }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -4617,6 +4269,12 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "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==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4630,13 +4288,10 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -4649,20 +4304,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.1.0", + "js-yaml": "3.5.5", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.2.14", + "wordwrap": "1.0.0" }, "dependencies": { "abbrev": { @@ -4683,11 +4338,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "resolve": { @@ -4702,7 +4357,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } }, "wordwrap": { @@ -4714,24 +4369,24 @@ } }, "istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", "dev": true }, "istanbul-lib-instrument": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz", - "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", + "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", "dev": true, "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.1", - "semver": "^5.5.0" + "@babel/generator": "7.3.3", + "@babel/parser": "7.3.3", + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.3.3", + "istanbul-lib-coverage": "2.0.3", + "semver": "5.5.0" } }, "jmespath": { @@ -4746,17 +4401,6 @@ "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==", "dev": true }, - "js-logger": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.4.1.tgz", - "integrity": "sha1-8CMNxehOEg8hPW5aa3Z6kT0pAzU=", - "dev": true - }, - "js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -4769,8 +4413,8 @@ "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", "dev": true, "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" + "argparse": "1.0.10", + "esprima": "2.7.3" } }, "jsbn": { @@ -4779,107 +4423,18 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, - "jsdom": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz", - "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", - "dev": true, - "requires": { - "abab": "^1.0.4", - "acorn": "^5.3.0", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.2.37 < 0.3.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.0", - "escodegen": "^1.9.0", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.2.0", - "nwmatcher": "^1.4.3", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.83.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.0", - "ws": "^4.0.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - }, - "acorn-globals": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", - "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } - }, - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "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==", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -4891,15 +4446,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "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=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4912,7 +4458,7 @@ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } }, "jsonify": { @@ -4921,12 +4467,6 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -4947,26 +4487,17 @@ } } }, - "jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", - "requires": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, "jszip": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", - "pako": "~1.0.2", - "readable-stream": "~2.0.6" + "core-js": "2.3.0", + "es6-promise": "3.0.2", + "lie": "3.1.1", + "pako": "1.0.6", + "readable-stream": "2.0.6" }, "dependencies": { "core-js": { @@ -4987,12 +4518,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -5003,12 +4534,6 @@ } } }, - "just-extend": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz", - "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", - "dev": true - }, "kew": { "version": "0.7.0", "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz", @@ -5019,8 +4544,9 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "klaw-sync": { @@ -5029,49 +4555,25 @@ "integrity": "sha1-PTvNhgDnv971MjHHOf8FOu1WDkQ=", "dev": true, "requires": { - "graceful-fs": "^4.1.11" + "graceful-fs": "4.1.11" } }, - "knuth-shuffle-seeded": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", - "integrity": "sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE=", + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "seed-random": "~2.2.0" + "package-json": "4.0.1" } }, - "labeled-stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", - "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "isarray": "^2.0.4", - "stream-splicer": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", - "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", - "dev": true - } - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "1.0.0" } }, "ldap-filter": { @@ -5095,40 +4597,25 @@ "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=", "requires": { "asn1": "0.2.3", - "assert-plus": "^1.0.0", - "backoff": "^2.5.0", - "bunyan": "^1.8.3", - "dashdash": "^1.14.0", - "dtrace-provider": "~0.8", + "assert-plus": "1.0.0", + "backoff": "2.5.0", + "bunyan": "1.8.12", + "dashdash": "1.14.1", + "dtrace-provider": "0.8.6", "ldap-filter": "0.2.2", - "once": "^1.4.0", - "vasync": "^1.6.4", - "verror": "^1.8.1" + "once": "1.4.0", + "vasync": "1.6.4", + "verror": "1.10.0" } }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "^2.0.0" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "lie": { @@ -5136,7 +4623,7 @@ "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "requires": { - "immediate": "~3.0.5" + "immediate": "3.0.6" } }, "linkify-it": { @@ -5145,26 +4632,20 @@ "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", "dev": true, "requires": { - "uc.micro": "^1.0.1" + "uc.micro": "1.0.5" } }, - "livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", - "dev": true - }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "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" + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" }, "dependencies": { "pify": { @@ -5189,8 +4670,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" }, "dependencies": { "path-exists": { @@ -5204,7 +4685,14 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true }, "lodash.get": { "version": "4.4.2", @@ -5212,22 +4700,56 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, "lodash.reduce": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.4.2" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } }, "lolex": { "version": "2.3.2", @@ -5235,25 +4757,20 @@ "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==", "dev": true }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lru-cache": { @@ -5262,8 +4779,17 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "3.0.0" } }, "make-error": { @@ -5272,23 +4798,47 @@ "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", "dev": true }, + "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==", + "dev": true, + "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=", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, "markdown-it": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.1.tgz", "integrity": "sha512-CzzqSSNkFRUf9vlWvhK1awpJreMRqdCrBvZ8DIoDWTOkESMIF741UPAhuAmbyWmdiFPA6WARNhnu2M6Nrhwa+A==", "dev": true, "requires": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "argparse": "1.0.10", + "entities": "1.1.1", + "linkify-it": "2.0.3", + "mdurl": "1.0.1", + "uc.micro": "1.0.5" } }, "math-random": { @@ -5296,68 +4846,6 @@ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" }, - "maxmin": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", - "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "figures": "^1.0.1", - "gzip-size": "^3.0.0", - "pretty-bytes": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", @@ -5366,7 +4854,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { @@ -5375,25 +4863,25 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "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" + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" }, "dependencies": { "minimist": { @@ -5415,34 +4903,32 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.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==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "mime": { @@ -5460,7 +4946,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.33.0" } }, "mimic-fn": { @@ -5469,24 +4955,12 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, - "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==", - "dev": true - }, - "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=", - "dev": true - }, "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" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -5494,75 +4968,164 @@ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" } }, "mocha": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", - "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.0.2.tgz", + "integrity": "sha512-RtTJsmmToGyeTznSOMoM6TPEk1A84FQaHIciKrRqARZx+B5ccJ5tXlmJzEKGBxZdqk9UjpRsesZTUkZmR5YnuQ==", "dev": true, "requires": { + "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", - "commander": "2.11.0", - "debug": "3.1.0", + "debug": "3.2.6", "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", + "findup-sync": "2.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.12.0", + "log-symbols": "2.2.0", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "ms": "2.1.1", + "node-environment-flags": "1.0.4", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "12.0.5", + "yargs-parser": "11.1.1", + "yargs-unparser": "1.5.0" }, "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "1.0.0", + "is-glob": "3.1.0", + "micromatch": "3.1.10", + "resolve-dir": "1.0.1" } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "5.0.0", + "decamelize": "1.2.0" } } } @@ -5573,35 +5136,6 @@ "integrity": "sha1-WuDA6vj+I+AJzQH5iJtCxPY0rxI=", "dev": true }, - "module-deps": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.2.tgz", - "integrity": "sha512-KWBI3009iRnHjRlxRhe8nJ6kdeBTg4sMi5N6AZgg5f1/v5S7EBCRBOY854I4P5Anl4kx6AJH+4bBBC2Gi3nkvg==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.0", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.0.2", - "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" - } - }, - "module-not-found-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", - "dev": true - }, "moment": { "version": "2.22.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", @@ -5621,8 +5155,8 @@ "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz", "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==", "requires": { - "bson": "~1.0.4", - "require_optional": "^1.0.1" + "bson": "1.0.6", + "require_optional": "1.0.1" } }, "ms": { @@ -5636,20 +5170,9 @@ "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", "optional": true, "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - } - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "mkdirp": "0.5.1", + "ncp": "2.0.0", + "rimraf": "2.4.5" } }, "nan": { @@ -5657,9 +5180,48 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "ncp": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "optional": true }, @@ -5670,9 +5232,9 @@ "requires": { "async": "0.2.10", "binary-search-tree": "0.2.5", - "localforage": "^1.3.0", - "mkdirp": "~0.5.1", - "underscore": "~1.4.4" + "localforage": "1.7.1", + "mkdirp": "0.5.1", + "underscore": "1.4.4" } }, "negotiator": { @@ -5680,31 +5242,46 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "next-tick": { - "version": "1.0.0", - "resolved": "http://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==", "dev": true }, "nise": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", - "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.8.tgz", + "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==", "dev": true, "requires": { - "@sinonjs/formatio": "^2.0.0", - "just-extend": "^1.1.27", - "lolex": "^2.3.2", - "path-to-regexp": "^1.7.0", - "text-encoding": "^0.6.4" + "@sinonjs/formatio": "3.1.0", + "just-extend": "4.0.2", + "lolex": "2.3.2", + "path-to-regexp": "1.7.0", + "text-encoding": "0.6.4" }, "dependencies": { + "@sinonjs/formatio": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", + "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", + "dev": true, + "requires": { + "@sinonjs/samsam": "3.1.1" + } + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, + "just-extend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "dev": true + }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -5716,20 +5293,26 @@ } } }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, "nocache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" }, + "node-environment-flags": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz", + "integrity": "sha512-M9rwCnWVLW7PX+NUWe3ejEdiLYinRpsEre9hMkU/6NS4h+EEulYaDH1gCEZ2gyXsmw+RXYDaV2JkkTNcsPDJ0Q==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "2.0.3" + } + }, + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", + "dev": true + }, "nodemailer": { "version": "4.6.4", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.6.4.tgz", @@ -5772,14 +5355,416 @@ "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" }, + "nodemon": { + "version": "1.18.9", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.9.tgz", + "integrity": "sha512-oj/eEVTEI47pzYAjGkpcNw0xYwTl4XSTUQv2NPQI6PpN3b75PhpuYk3Vb3U80xHCyM2Jm+1j68ULHXl4OR3Afw==", + "dev": true, + "requires": { + "chokidar": "2.0.4", + "debug": "3.2.6", + "ignore-by-default": "1.0.1", + "minimatch": "3.0.4", + "pstree.remy": "1.1.6", + "semver": "5.5.0", + "supports-color": "5.5.0", + "touch": "3.1.0", + "undefsafe": "2.0.2", + "update-notifier": "2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.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=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "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==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "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.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.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==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, "nomnom": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", "dev": true, "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" + "chalk": "0.4.0", + "underscore": "1.6.0" }, "dependencies": { "underscore": { @@ -5796,7 +5781,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "1.1.1" } }, "normalize-package-data": { @@ -5805,10 +5790,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.4" } }, "normalize-path": { @@ -5817,7 +5802,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "npm-run-path": { @@ -5826,7 +5811,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -5835,60 +5820,38 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", - "dev": true - }, "nyc": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.1.0.tgz", - "integrity": "sha512-3GyY6TpQ58z9Frpv4GMExE1SV2tAgYqC7HSy2omEhNiCT3mhT9NyiOvIE8zkbuJVFzmvvNTnE4h/7/wQae7xLg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz", + "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", "dev": true, "requires": { - "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^2.0.0", - "convert-source-map": "^1.6.0", - "debug-log": "^1.0.1", - "find-cache-dir": "^2.0.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.1", - "istanbul-lib-hook": "^2.0.1", - "istanbul-lib-instrument": "^3.0.0", - "istanbul-lib-report": "^2.0.2", - "istanbul-lib-source-maps": "^2.0.1", - "istanbul-reports": "^2.0.1", - "make-dir": "^1.3.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.0.0", - "uuid": "^3.3.2", - "yargs": "11.1.0", - "yargs-parser": "^9.0.2" + "archy": "1.0.0", + "arrify": "1.0.1", + "caching-transform": "3.0.1", + "convert-source-map": "1.6.0", + "find-cache-dir": "2.0.0", + "find-up": "3.0.0", + "foreground-child": "1.5.6", + "glob": "7.1.3", + "istanbul-lib-coverage": "2.0.3", + "istanbul-lib-hook": "2.0.3", + "istanbul-lib-instrument": "3.1.0", + "istanbul-lib-report": "2.0.4", + "istanbul-lib-source-maps": "3.0.2", + "istanbul-reports": "2.1.1", + "make-dir": "1.3.0", + "merge-source-map": "1.1.0", + "resolve-from": "4.0.0", + "rimraf": "2.6.3", + "signal-exit": "3.0.2", + "spawn-wrap": "1.4.2", + "test-exclude": "5.1.0", + "uuid": "3.3.2", + "yargs": "12.0.5", + "yargs-parser": "11.1.1" }, "dependencies": { - "align-text": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, "ansi-regex": { "version": "3.0.0", "bundled": true, @@ -5899,7 +5862,7 @@ "bundled": true, "dev": true, "requires": { - "default-require-extensions": "^2.0.0" + "default-require-extensions": "2.0.0" } }, "archy": { @@ -5913,9 +5876,12 @@ "dev": true }, "async": { - "version": "1.5.2", + "version": "2.6.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.11" + } }, "balanced-match": { "version": "1.0.0", @@ -5927,59 +5893,34 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, "caching-transform": { - "version": "2.0.0", + "version": "3.0.1", "bundled": true, "dev": true, "requires": { - "make-dir": "^1.0.0", - "md5-hex": "^2.0.0", - "package-hash": "^2.0.0", - "write-file-atomic": "^2.0.0" + "hasha": "3.0.0", + "make-dir": "1.3.0", + "package-hash": "3.0.0", + "write-file-atomic": "2.4.2" } }, "camelcase": { - "version": "1.2.1", + "version": "5.0.0", "bundled": true, - "dev": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } + "dev": true }, "cliui": { - "version": "2.1.0", + "version": "4.1.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "bundled": true, - "dev": true, - "optional": true - } + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "code-point-at": { @@ -5987,6 +5928,12 @@ "bundled": true, "dev": true }, + "commander": { + "version": "2.17.1", + "bundled": true, + "dev": true, + "optional": true + }, "commondir": { "version": "1.0.1", "bundled": true, @@ -6002,7 +5949,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.2" } }, "cross-spawn": { @@ -6010,23 +5957,18 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "lru-cache": "4.1.5", + "which": "1.3.1" } }, "debug": { - "version": "3.1.0", + "version": "4.1.1", "bundled": true, "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.1" } }, - "debug-log": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, "decamelize": { "version": "1.2.0", "bundled": true, @@ -6037,7 +5979,15 @@ "bundled": true, "dev": true, "requires": { - "strip-bom": "^3.0.0" + "strip-bom": "3.0.0" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0" } }, "error-ex": { @@ -6045,7 +5995,7 @@ "bundled": true, "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es6-error": { @@ -6054,27 +6004,29 @@ "dev": true }, "execa": { - "version": "0.7.0", + "version": "1.0.0", "bundled": true, "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.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" + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" }, "dependencies": { "cross-spawn": { - "version": "5.1.0", + "version": "6.0.5", "bundled": true, "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } } } @@ -6084,9 +6036,9 @@ "bundled": true, "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "3.0.0" } }, "find-up": { @@ -6094,7 +6046,7 @@ "bundled": true, "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "foreground-child": { @@ -6102,8 +6054,8 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" } }, "fs.realpath": { @@ -6117,46 +6069,46 @@ "dev": true }, "get-stream": { - "version": "3.0.0", + "version": "4.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pump": "3.0.0" + } }, "glob": { "version": "7.1.3", "bundled": true, "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "graceful-fs": { - "version": "4.1.11", + "version": "4.1.15", "bundled": true, "dev": true }, "handlebars": { - "version": "4.0.11", + "version": "4.1.0", "bundled": true, "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "async": "2.6.2", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.4.9" }, "dependencies": { "source-map": { - "version": "0.4.4", + "version": "0.6.1", "bundled": true, - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } + "dev": true } } }, @@ -6165,6 +6117,14 @@ "bundled": true, "dev": true }, + "hasha": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-stream": "1.1.0" + } + }, "hosted-git-info": { "version": "2.7.1", "bundled": true, @@ -6180,8 +6140,8 @@ "bundled": true, "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -6190,7 +6150,7 @@ "dev": true }, "invert-kv": { - "version": "1.0.0", + "version": "2.0.0", "bundled": true, "dev": true }, @@ -6199,19 +6159,6 @@ "bundled": true, "dev": true }, - "is-buffer": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "2.0.0", "bundled": true, @@ -6228,38 +6175,48 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.1", + "version": "2.0.3", "bundled": true, "dev": true }, "istanbul-lib-hook": { - "version": "2.0.1", + "version": "2.0.3", "bundled": true, "dev": true, "requires": { - "append-transform": "^1.0.0" + "append-transform": "1.0.0" } }, "istanbul-lib-report": { - "version": "2.0.2", + "version": "2.0.4", "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.1", - "make-dir": "^1.3.0", - "supports-color": "^5.4.0" + "istanbul-lib-coverage": "2.0.3", + "make-dir": "1.3.0", + "supports-color": "6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } } }, "istanbul-lib-source-maps": { - "version": "2.0.1", + "version": "3.0.2", "bundled": true, "dev": true, "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^2.0.1", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", - "source-map": "^0.6.1" + "debug": "4.1.1", + "istanbul-lib-coverage": "2.0.3", + "make-dir": "1.3.0", + "rimraf": "2.6.3", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -6270,11 +6227,11 @@ } }, "istanbul-reports": { - "version": "2.0.1", + "version": "2.1.1", "bundled": true, "dev": true, "requires": { - "handlebars": "^4.0.11" + "handlebars": "4.1.0" } }, "json-parse-better-errors": { @@ -6282,26 +6239,12 @@ "bundled": true, "dev": true }, - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "optional": true - }, "lcid": { - "version": "1.0.0", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "2.0.0" } }, "load-json-file": { @@ -6309,10 +6252,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "4.1.15", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" } }, "locate-path": { @@ -6320,27 +6263,27 @@ "bundled": true, "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, + "lodash": { + "version": "4.17.11", + "bundled": true, + "dev": true + }, "lodash.flattendeep": { "version": "4.4.0", "bundled": true, "dev": true }, - "longest": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, "lru-cache": { - "version": "4.1.3", + "version": "4.1.5", "bundled": true, "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "make-dir": { @@ -6348,28 +6291,25 @@ "bundled": true, "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, - "md5-hex": { - "version": "2.0.0", + "map-age-cleaner": { + "version": "0.1.3", "bundled": true, "dev": true, "requires": { - "md5-o-matic": "^0.1.1" + "p-defer": "1.0.0" } }, - "md5-o-matic": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, "mem": { - "version": "1.1.0", + "version": "4.1.0", "bundled": true, "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "2.0.0" } }, "merge-source-map": { @@ -6377,7 +6317,7 @@ "bundled": true, "dev": true, "requires": { - "source-map": "^0.6.1" + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -6397,7 +6337,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -6421,19 +6361,24 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "nice-try": { + "version": "1.0.5", "bundled": true, "dev": true }, "normalize-package-data": { - "version": "2.4.0", + "version": "2.5.0", "bundled": true, "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "resolve": "1.10.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" } }, "npm-run-path": { @@ -6441,7 +6386,7 @@ "bundled": true, "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -6454,7 +6399,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "optimist": { @@ -6462,8 +6407,8 @@ "bundled": true, "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.10", + "wordwrap": "0.0.3" } }, "os-homedir": { @@ -6472,26 +6417,36 @@ "dev": true }, "os-locale": { - "version": "2.1.0", + "version": "3.1.0", "bundled": true, "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.1.0" } }, + "p-defer": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, "p-finally": { "version": "1.0.0", "bundled": true, "dev": true }, - "p-limit": { + "p-is-promise": { "version": "2.0.0", "bundled": true, + "dev": true + }, + "p-limit": { + "version": "2.1.0", + "bundled": true, "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -6499,7 +6454,7 @@ "bundled": true, "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -6508,14 +6463,14 @@ "dev": true }, "package-hash": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "lodash.flattendeep": "^4.4.0", - "md5-hex": "^2.0.0", - "release-zalgo": "^1.0.0" + "graceful-fs": "4.1.15", + "hasha": "3.0.0", + "lodash.flattendeep": "4.4.0", + "release-zalgo": "1.0.0" } }, "parse-json": { @@ -6523,8 +6478,8 @@ "bundled": true, "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" } }, "path-exists": { @@ -6542,12 +6497,17 @@ "bundled": true, "dev": true }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, "path-type": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "pify": { @@ -6560,7 +6520,7 @@ "bundled": true, "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } }, "pseudomap": { @@ -6568,14 +6528,23 @@ "bundled": true, "dev": true }, + "pump": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, "read-pkg": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "load-json-file": "4.0.0", + "normalize-package-data": "2.5.0", + "path-type": "3.0.0" } }, "read-pkg-up": { @@ -6583,8 +6552,8 @@ "bundled": true, "dev": true, "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" + "find-up": "3.0.0", + "read-pkg": "3.0.0" } }, "release-zalgo": { @@ -6592,14 +6561,9 @@ "bundled": true, "dev": true, "requires": { - "es6-error": "^4.0.1" + "es6-error": "4.1.1" } }, - "repeat-string": { - "version": "1.6.1", - "bundled": true, - "dev": true - }, "require-directory": { "version": "2.1.1", "bundled": true, @@ -6610,26 +6574,25 @@ "bundled": true, "dev": true }, + "resolve": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + }, "resolve-from": { "version": "4.0.0", "bundled": true, "dev": true }, - "right-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { - "version": "2.6.2", + "version": "2.6.3", "bundled": true, "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.3" } }, "safe-buffer": { @@ -6638,7 +6601,7 @@ "dev": true }, "semver": { - "version": "5.5.0", + "version": "5.6.0", "bundled": true, "dev": true }, @@ -6652,7 +6615,7 @@ "bundled": true, "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -6665,36 +6628,30 @@ "bundled": true, "dev": true }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true, - "optional": true - }, "spawn-wrap": { "version": "1.4.2", "bundled": true, "dev": true, "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" + "foreground-child": "1.5.6", + "mkdirp": "0.5.1", + "os-homedir": "1.0.2", + "rimraf": "2.6.3", + "signal-exit": "3.0.2", + "which": "1.3.1" } }, "spdx-correct": { - "version": "3.0.0", + "version": "3.1.0", "bundled": true, "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.3" } }, "spdx-exceptions": { - "version": "2.1.0", + "version": "2.2.0", "bundled": true, "dev": true }, @@ -6703,12 +6660,12 @@ "bundled": true, "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.3" } }, "spdx-license-ids": { - "version": "3.0.0", + "version": "3.0.3", "bundled": true, "dev": true }, @@ -6717,8 +6674,8 @@ "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -6726,7 +6683,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, "strip-bom": { @@ -6739,68 +6696,47 @@ "bundled": true, "dev": true }, - "supports-color": { - "version": "5.4.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "test-exclude": { - "version": "5.0.0", + "version": "5.1.0", "bundled": true, "dev": true, "requires": { - "arrify": "^1.0.1", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" + "arrify": "1.0.1", + "minimatch": "3.0.4", + "read-pkg-up": "4.0.0", + "require-main-filename": "1.0.1" } }, "uglify-js": { - "version": "2.8.29", + "version": "3.4.9", "bundled": true, "dev": true, "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "commander": "2.17.1", + "source-map": "0.6.1" }, "dependencies": { - "yargs": { - "version": "3.10.0", + "source-map": { + "version": "0.6.1", "bundled": true, "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } + "optional": true } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, "uuid": { "version": "3.3.2", "bundled": true, "dev": true }, "validate-npm-package-license": { - "version": "3.0.3", + "version": "3.0.4", "bundled": true, "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.1.0", + "spdx-expression-parse": "3.0.0" } }, "which": { @@ -6808,7 +6744,7 @@ "bundled": true, "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -6816,12 +6752,6 @@ "bundled": true, "dev": true }, - "window-size": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "optional": true - }, "wordwrap": { "version": "0.0.3", "bundled": true, @@ -6832,8 +6762,8 @@ "bundled": true, "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -6846,7 +6776,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -6854,9 +6784,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -6864,7 +6794,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -6875,17 +6805,17 @@ "dev": true }, "write-file-atomic": { - "version": "2.3.0", + "version": "2.4.2", "bundled": true, "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "graceful-fs": "4.1.15", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" } }, "y18n": { - "version": "3.2.1", + "version": "4.0.0", "bundled": true, "dev": true }, @@ -6895,87 +6825,31 @@ "dev": true }, "yargs": { - "version": "11.1.0", + "version": "12.0.5", "bundled": true, "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.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", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true, - "dev": true - } + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "11.1.1" } }, "yargs-parser": { - "version": "9.0.2", + "version": "11.1.1", "bundled": true, "dev": true, "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - } + "camelcase": "5.0.0", + "decamelize": "1.2.0" } } } @@ -6989,12 +6863,35 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "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=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", "dev": true }, "object-path": { @@ -7002,14 +6899,60 @@ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.1.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "on-finished": { @@ -7030,7 +6973,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "optimist": { @@ -7039,8 +6982,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.8", + "wordwrap": "0.0.2" } }, "optionator": { @@ -7049,12 +6992,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" }, "dependencies": { "wordwrap": { @@ -7065,37 +7008,28 @@ } } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "outpipe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", - "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", - "dev": true, - "requires": { - "shell-quote": "^1.4.2" - } + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true }, "p-finally": { "version": "1.0.0", @@ -7103,13 +7037,19 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, "p-limit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -7118,7 +7058,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.2.0" } }, "p-map": { @@ -7133,13 +7073,16 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "pad-right": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", - "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { - "repeat-string": "^1.5.2" + "got": "6.7.1", + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0", + "semver": "5.5.0" } }, "pako": { @@ -7148,67 +7091,36 @@ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, "path-exists": { @@ -7217,12 +7129,12 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { @@ -7240,12 +7152,7 @@ "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, "path-to-regexp": { @@ -7259,9 +7166,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { "pify": { @@ -7272,19 +7179,6 @@ } } }, - "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", - "dev": true, - "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" - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -7315,7 +7209,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "platform": { @@ -7323,160 +7217,12 @@ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "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=", "dev": true }, - "popper.js": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.3.tgz", - "integrity": "sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU=", - "dev": true - }, - "power-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.5.0.tgz", - "integrity": "sha512-WaWSw+Ts283o6dzxW1BxIxoaHok7aSSGx4SaR6dW62Pk31ynv9DERDieuZpPYv5XaJ+H+zdcOaJQ+PvlasAOVw==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "empower": "^1.2.3", - "power-assert-formatter": "^1.3.1", - "universal-deep-strict-equal": "^1.2.1", - "xtend": "^4.0.0" - } - }, - "power-assert-context-formatter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz", - "integrity": "sha1-7bo1LT7YpgMRTWZyZazOYNaJzN8=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "power-assert-context-traversal": "^1.1.1" - } - }, - "power-assert-context-reducer-ast": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.1.2.tgz", - "integrity": "sha1-SEqZ4m9Jc/+IMuXFzHVnAuYJQXQ=", - "dev": true, - "requires": { - "acorn": "^4.0.0", - "acorn-es7-plugin": "^1.0.12", - "core-js": "^2.0.0", - "espurify": "^1.6.0", - "estraverse": "^4.2.0" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } - } - }, - "power-assert-context-traversal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz", - "integrity": "sha1-iMq8oNE7Y1nwfT0+ivppkmRXftk=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "estraverse": "^4.1.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } - } - }, - "power-assert-formatter": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz", - "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "power-assert-context-formatter": "^1.0.7", - "power-assert-context-reducer-ast": "^1.0.7", - "power-assert-renderer-assertion": "^1.0.7", - "power-assert-renderer-comparison": "^1.0.7", - "power-assert-renderer-diagram": "^1.0.7", - "power-assert-renderer-file": "^1.0.7" - } - }, - "power-assert-renderer-assertion": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz", - "integrity": "sha1-y/wOd+AIao+Wrz8djme57n4ozpg=", - "dev": true, - "requires": { - "power-assert-renderer-base": "^1.1.1", - "power-assert-util-string-width": "^1.1.1" - } - }, - "power-assert-renderer-base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz", - "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=", - "dev": true - }, - "power-assert-renderer-comparison": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.1.1.tgz", - "integrity": "sha1-10Odl9hRVr5OMKAPL7WnJRTOPAg=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "diff-match-patch": "^1.0.0", - "power-assert-renderer-base": "^1.1.1", - "stringifier": "^1.3.0", - "type-name": "^2.0.1" - } - }, - "power-assert-renderer-diagram": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.2.tgz", - "integrity": "sha1-ZV+PcRk1qbbVQbhjJ2VHF8Y3qYY=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "power-assert-renderer-base": "^1.1.1", - "power-assert-util-string-width": "^1.1.1", - "stringifier": "^1.3.0" - } - }, - "power-assert-renderer-file": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.1.1.tgz", - "integrity": "sha1-o34rvReMys0E5427eckv40kzxec=", - "dev": true, - "requires": { - "power-assert-renderer-base": "^1.1.1" - } - }, - "power-assert-util-string-width": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz", - "integrity": "sha1-vmWet5N/3S5smncmjar2S9W3xZI=", - "dev": true, - "requires": { - "eastasianwidth": "^0.1.1" - } - }, "precond": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", @@ -7488,25 +7234,10 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "process-nextick-args": { @@ -7515,51 +7246,15 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, "proxy-addr": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.6.0" } }, - "proxyquire": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.0.1.tgz", - "integrity": "sha512-fQr3VQrbdzHrdaDn3XuisVoJlJNDJizHAvUXw9IuXRR8BpV2x0N7LsCxrpJkeKfPbNjiNU/V5vc008cI0TmzzQ==", - "dev": true, - "requires": { - "fill-keys": "^1.0.2", - "module-not-found-error": "^1.0.0", - "resolve": "~1.5.0" - }, - "dependencies": { - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - } - } - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -7572,133 +7267,22 @@ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", "dev": true }, - "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "pstree.remy": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz", + "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "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" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, - "pug": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", - "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", - "requires": { - "pug-code-gen": "^2.0.1", - "pug-filters": "^3.1.0", - "pug-lexer": "^4.0.0", - "pug-linker": "^3.0.5", - "pug-load": "^2.0.11", - "pug-parser": "^5.0.0", - "pug-runtime": "^2.0.4", - "pug-strip-comments": "^1.0.3" - } - }, - "pug-attrs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", - "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", - "requires": { - "constantinople": "^3.0.1", - "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.4" - } - }, - "pug-code-gen": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", - "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", - "requires": { - "constantinople": "^3.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.3", - "pug-error": "^1.3.2", - "pug-runtime": "^2.0.4", - "void-elements": "^2.0.1", - "with": "^5.0.0" - } - }, - "pug-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", - "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" - }, - "pug-filters": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", - "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", - "requires": { - "clean-css": "^4.1.11", - "constantinople": "^3.0.1", - "jstransformer": "1.0.0", - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7", - "resolve": "^1.1.6", - "uglify-js": "^2.6.1" - } - }, - "pug-lexer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", - "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", - "requires": { - "character-parser": "^2.1.1", - "is-expression": "^3.0.0", - "pug-error": "^1.3.2" - } - }, - "pug-linker": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", - "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", - "requires": { - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7" - } - }, - "pug-load": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", - "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", - "requires": { - "object-assign": "^4.1.0", - "pug-walk": "^1.1.7" - } - }, - "pug-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", - "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", - "requires": { - "pug-error": "^1.3.2", - "token-stream": "0.0.1" - } - }, - "pug-runtime": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", - "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" - }, - "pug-strip-comments": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", - "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", - "requires": { - "pug-error": "^1.3.2" - } - }, - "pug-walk": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", - "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" - }, "punycode": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", @@ -7721,8 +7305,8 @@ "integrity": "sha512-pNB/Gr8SA8ff8KpUFM36o/WFAlthgaThka5bV19AD9PNTH20Pwq5Zxodif2YyHwrctp6SkL4GqlOot0qR/wGaw==", "dev": true, "requires": { - "decode-uri-component": "^0.2.0", - "strict-uri-encode": "^2.0.0" + "decode-uri-component": "0.2.0", + "strict-uri-encode": "2.0.0" } }, "querystring": { @@ -7731,11 +7315,10 @@ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true + "querystringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", + "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" }, "random-bytes": { "version": "1.0.0", @@ -7747,9 +7330,9 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { "is-number": { @@ -7764,25 +7347,6 @@ } } }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "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==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "randomstring": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.1.5.tgz", @@ -7820,7 +7384,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "statuses": "1.5.0" } }, "setprototypeof": { @@ -7830,13 +7394,24 @@ } } }, - "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=", + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "read-pkg": { @@ -7845,9 +7420,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" } }, "read-pkg-up": { @@ -7856,23 +7431,23 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" } }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "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" + "core-util-is": "1.0.2", + "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.2" } }, "readdirp": { @@ -7881,10 +7456,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" } }, "redent": { @@ -7893,8 +7468,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "2.1.0", + "strip-indent": "1.0.1" }, "dependencies": { "indent-string": { @@ -7903,7 +7478,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } } } @@ -7913,9 +7488,9 @@ "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", "requires": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" + "double-ended-queue": "2.1.0-0", + "redis-commands": "1.3.5", + "redis-parser": "2.6.0" } }, "redis-commands": { @@ -7933,18 +7508,33 @@ "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "is-equal-shallow": "^0.1.3" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "1.2.8", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "1.2.8" } }, "remove-trailing-separator": { @@ -7962,7 +7552,8 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "repeating": { "version": "2.0.1", @@ -7970,7 +7561,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "request": { @@ -7979,26 +7570,26 @@ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.0", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.21", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" }, "dependencies": { "mime-db": { @@ -8013,7 +7604,7 @@ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.37.0" } }, "punycode": { @@ -8040,8 +7631,8 @@ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.29", + "punycode": "1.4.1" } }, "uuid": { @@ -8058,10 +7649,10 @@ "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", "dev": true, "requires": { - "bluebird": "^3.5.0", + "bluebird": "3.5.0", "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.4" } }, "request-promise-core": { @@ -8070,18 +7661,7 @@ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", "dev": true, "requires": { - "lodash": "^4.13.1" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "dev": true, - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "lodash": "4.17.11" } }, "require-directory": { @@ -8101,16 +7681,32 @@ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" + "resolve-from": "2.0.0", + "semver": "5.5.0" } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, "resolve": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "1.0.5" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" } }, "resolve-from": { @@ -8118,30 +7714,33 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "requires": { - "align-text": "^0.1.1" - } + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, "rimraf": { "version": "2.4.5", "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "requires": { - "glob": "^6.0.1" + "glob": "6.0.4" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "tslib": "1.9.0" } }, "safe-buffer": { @@ -8149,18 +7748,21 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true - }, "safe-json-stringify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.1.0.tgz", "integrity": "sha512-EzBtUaFH9bHYPc69wqjp0efJI/DPNHdFbGE3uIMn4sVbO0zx8vZ8cG4WKxQfOpUOKsQyGBiT2mTqnCw+6nLswA==", "optional": true }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8179,22 +7781,16 @@ "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", "dev": true }, - "seed-random": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=", - "dev": true - }, "selenium-webdriver": { "version": "4.0.0-alpha.1", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.1.tgz", "integrity": "sha512-z88rdjHAv3jmTZ7KSGUkTvo4rGzcDGMq0oXWHNIDK96Gs31JKVdu9+FMtT4KBrVoibg8dUicJDok6GnqqttO5Q==", "dev": true, "requires": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", + "jszip": "3.1.5", + "rimraf": "2.6.2", "tmp": "0.0.30", - "xml2js": "^0.4.17" + "xml2js": "0.4.17" }, "dependencies": { "glob": { @@ -8203,12 +7799,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "rimraf": { @@ -8217,7 +7813,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "tmp": { @@ -8226,7 +7822,7 @@ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "os-tmpdir": "1.0.2" } } } @@ -8236,24 +7832,33 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "5.5.0" + } + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" }, "dependencies": { "statuses": { @@ -8263,20 +7868,14 @@ } } }, - "serialize-error": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=", - "dev": true - }, "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -8292,38 +7891,41 @@ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.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=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -8332,29 +7934,17 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, "should": { "version": "13.2.1", "resolved": "https://registry.npmjs.org/should/-/should-13.2.1.tgz", "integrity": "sha512-l+/NwEMO+DcstsHEwPHRHzC9j4UOE3VQwJGcMWSsD/vqpqHbnQ+1iSHy64Ihmmjx1uiRPD9pFadTSc3MJtXAgw==", "dev": true, "requires": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" + "should-equal": "2.0.0", + "should-format": "3.0.3", + "should-type": "1.4.0", + "should-type-adaptors": "1.1.0", + "should-util": "1.0.0" } }, "should-equal": { @@ -8363,7 +7953,7 @@ "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, "requires": { - "should-type": "^1.4.0" + "should-type": "1.4.0" } }, "should-format": { @@ -8372,8 +7962,8 @@ "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", "dev": true, "requires": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" + "should-type": "1.4.0", + "should-type-adaptors": "1.1.0" } }, "should-type": { @@ -8388,8 +7978,8 @@ "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, "requires": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" + "should-type": "1.4.0", + "should-util": "1.0.0" } }, "should-util": { @@ -8410,13 +8000,13 @@ "integrity": "sha512-GvNLrwpvLZ8jIMZBUhHGUZDq5wlUdceJWyHvZDmqBxnjazpxY1L0FNbGBX6VpcOEoQ8Q4XMWFzm2myJMvx+VjA==", "dev": true, "requires": { - "@sinonjs/formatio": "^2.0.0", - "diff": "^3.1.0", - "lodash.get": "^4.4.2", - "lolex": "^2.2.0", - "nise": "^1.2.0", - "supports-color": "^5.1.0", - "type-detect": "^4.0.5" + "@sinonjs/formatio": "2.0.0", + "diff": "3.5.0", + "lodash.get": "4.4.2", + "lolex": "2.3.2", + "nise": "1.4.8", + "supports-color": "5.4.0", + "type-detect": "4.0.8" }, "dependencies": { "has-flag": { @@ -8431,7 +8021,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -8445,10 +8035,132 @@ "nodemailer-shared": "1.1.0" } }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.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=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "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=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "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-support": { "version": "0.5.5", @@ -8456,8 +8168,8 @@ "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.0.0", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -8468,14 +8180,26 @@ } } }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, "spdx-correct": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.2" } }, "spdx-exceptions": { @@ -8490,8 +8214,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.2" } }, "spdx-license-ids": { @@ -8508,6 +8232,15 @@ "base32.js": "0.0.1" } }, + "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==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -8519,30 +8252,15 @@ "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==", "dev": true, "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-chain": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", - "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", - "dev": true - }, - "stack-generator": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.2.tgz", - "integrity": "sha512-Qj3X+vY7qQ0OOLQomEihHk5SSnSPCI3z4RfB8kDk9lnzwznBODlkWODitEo8sHpp0a2VdSy3yuJkabNsQN5RGA==", - "dev": true, - "requires": { - "stackframe": "^1.0.4" + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "stack-trace": { @@ -8550,41 +8268,27 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", - "dev": true - }, - "stacktrace-gps": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", - "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "source-map": "0.5.6", - "stackframe": "^1.0.4" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } } } }, - "stacktrace-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.0.tgz", - "integrity": "sha1-d2ymRqlbxsayuQd2U2p/xyxt21g=", - "dev": true, - "requires": { - "error-stack-parser": "^2.0.1", - "stack-generator": "^2.0.1", - "stacktrace-gps": "^3.0.1" - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -8596,75 +8300,20 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "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=", - "dev": true, - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", - "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.3", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, "strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", "dev": true }, - "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", - "dev": true - }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" }, "dependencies": { "ansi-regex": { @@ -8679,7 +8328,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -8690,18 +8339,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringifier": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/stringifier/-/stringifier-1.3.0.tgz", - "integrity": "sha1-3vGDQvaTPbDy2/yaoCF1tEjBeVk=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "traverse": "^0.6.6", - "type-name": "^2.0.1" + "safe-buffer": "5.1.1" } }, "strip-ansi": { @@ -8716,12 +8354,12 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -8731,25 +8369,14 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "^4.0.1" + "get-stdin": "4.0.1" } }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "^1.1.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "supports-color": { "version": "2.0.0", @@ -8757,19 +8384,13 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "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==", + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "acorn-node": "^1.2.0" + "execa": "0.7.0" } }, "text-encoding": { @@ -8778,114 +8399,88 @@ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", "dev": true }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "requires": { - "process": "~0.11.0" - } - }, - "tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", - "dev": true, - "requires": { - "body": "^5.1.0", - "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", - "object-assign": "^4.1.0", - "qs": "^6.4.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "os-tmpdir": "1.0.2" } }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "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=", "dev": true }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + "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=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, - "token-stream": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } }, "tough-cookie": { "version": "2.3.4", @@ -8893,7 +8488,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" }, "dependencies": { "punycode": { @@ -8904,19 +8499,10 @@ } } }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "tree-kill": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", "dev": true }, "trim-newlines": { @@ -8937,14 +8523,14 @@ "integrity": "sha512-H/KWK27B3JJAc5WFOBBUxN638DukbV8PptdQgiHWPO2SGDVJzuVOl8Ye0XJ5+FiZIdFtgUuGOJRV4c/XBQ5dBg==", "dev": true, "requires": { - "arrify": "^1.0.0", - "chalk": "^2.3.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", - "yn": "^2.0.0" + "arrify": "1.0.1", + "chalk": "2.4.1", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.5", + "yn": "2.0.0" }, "dependencies": { "ansi-styles": { @@ -8953,7 +8539,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -8962,9 +8548,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -8985,7 +8571,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -9002,18 +8588,18 @@ "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.12.1" + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.4.1", + "commander": "2.19.0", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.11.0", + "minimatch": "3.0.4", + "resolve": "1.7.1", + "semver": "5.5.0", + "tslib": "1.9.0", + "tsutils": "2.26.2" }, "dependencies": { "ansi-styles": { @@ -9022,7 +8608,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -9031,9 +8617,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "esprima": { @@ -9048,12 +8634,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-flag": { @@ -9068,8 +8654,8 @@ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.0" } }, "supports-color": { @@ -9078,7 +8664,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -9089,22 +8675,16 @@ "integrity": "sha512-uzwnhmrSbyinPCiwfzGsOY3IulBTwoky7r83HmZdz9QNCjhSCzavkh47KLWuU0zF2F2WbpmmzoJUIEiYyd+jEQ==", "dev": true, "requires": { - "tslib": "^1.8.1" + "tslib": "1.9.0" } }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.1" } }, "tweetnacl": { @@ -9119,7 +8699,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-detect": { @@ -9134,15 +8714,9 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.18" } }, - "type-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", - "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=", - "dev": true - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -9150,9 +8724,9 @@ "dev": true }, "typescript": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", - "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "typescript-json-schema": { @@ -9161,10 +8735,10 @@ "integrity": "sha512-1C7u4Dw0bYgt6+cdke7scazf/y7qOSRlPblqZxRjWByqGvIw8KYNfnLHOj8RCRarwCM7VZCj+uO6F8VngvMVMw==", "dev": true, "requires": { - "glob": "~7.1.2", - "json-stable-stringify": "^1.0.1", - "typescript": "~2.8.3", - "yargs": "^11.0.0" + "glob": "7.1.2", + "json-stable-stringify": "1.0.1", + "typescript": "2.8.4", + "yargs": "11.0.0" }, "dependencies": { "ansi-regex": { @@ -9179,9 +8753,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "find-up": { @@ -9190,7 +8764,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "glob": { @@ -9199,12 +8773,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "json-stable-stringify": { @@ -9213,7 +8787,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "~0.0.0" + "jsonify": "0.0.0" } }, "strip-ansi": { @@ -9222,27 +8796,33 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, + "typescript": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.4.tgz", + "integrity": "sha512-IIU5cN1mR5J3z9jjdESJbnxikTrEz3lzAw/D0Tf45jHpBp55nY31UkUvmVHoffCfKHTqJs3fCLPDxknQTTFegQ==", + "dev": true + }, "yargs": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.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", - "yargs-parser": "^9.0.2" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" } } } @@ -9263,59 +8843,22 @@ "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==", "dev": true }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, "uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "requires": { - "random-bytes": "~1.0.0" + "random-bytes": "1.0.0" } }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true + "undefsafe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "dev": true, + "requires": { + "debug": "2.6.9" + } }, "underscore": { "version": "1.4.4", @@ -9328,29 +8871,54 @@ "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", "dev": true, "requires": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" + "sprintf-js": "1.0.3", + "util-deprecate": "1.0.2" } }, - "universal-deep-strict-equal": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz", - "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=", + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "array-filter": "^1.0.0", - "indexof": "0.0.1", - "object-keys": "^1.0.0" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } } } }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + }, "universalify": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", @@ -9362,20 +8930,133 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "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=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "1.3.0", + "chalk": "2.4.2", + "configstore": "3.1.2", + "import-lazy": "2.1.0", + "is-ci": "1.2.1", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, "uri-js": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", "requires": { - "punycode": "^2.1.0" + "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=", + "dev": true + }, "url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", @@ -9394,27 +9075,28 @@ } } }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "querystringify": "2.1.0", + "requires-port": "1.0.0" } }, - "util-arity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", - "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=", + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, "util-deprecate": { @@ -9439,8 +9121,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.2", + "spdx-expression-parse": "3.0.0" } }, "vary": { @@ -9471,92 +9153,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.0.1.tgz", - "integrity": "sha512-EqzLchIMYLBjRPoqVsEkZOa/4Vr2RfOWbd58F+I/Gj79AYTrsseMunxbbSkbYfrqZaXSuPBBXNSOhtJgg0PpmA==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "watchify": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.0.tgz", - "integrity": "sha512-7jWG0c3cKKm2hKScnSAMUEUjRJKXUShwMPk0ASVhICycQhwND3IMAdhJYmc1mxxKzBUJTSF5HZizfrKrS6BzkA==", - "dev": true, - "requires": { - "anymatch": "^1.3.0", - "browserify": "^16.1.0", - "chokidar": "^1.0.0", - "defined": "^1.0.0", - "outpipe": "^1.1.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.19" - } - }, - "whatwg-mimetype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", - "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", - "dev": true - }, - "whatwg-url": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", - "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "extsprintf": "1.2.0" } }, "which": { @@ -9565,7 +9164,7 @@ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -9574,53 +9173,58 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "2.1.1" + } }, "winston": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" }, "dependencies": { "async": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" } } }, - "with": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", - "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", - "requires": { - "acorn": "^3.1.0", - "acorn-globals": "^3.0.0" - } - }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -9629,7 +9233,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -9638,9 +9242,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -9649,7 +9253,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -9659,14 +9263,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" } }, "x-xss-protection": { @@ -9674,10 +9279,10 @@ "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz", "integrity": "sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg==" }, - "xml-name-validator": { + "xdg-basedir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, "xml2js": { @@ -9686,8 +9291,8 @@ "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", "dev": true, "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "^4.1.0" + "sax": "1.2.1", + "xmlbuilder": "4.2.1" } }, "xmlbuilder": { @@ -9696,15 +9301,9 @@ "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", "dev": true, "requires": { - "lodash": "^4.0.0" + "lodash": "4.17.11" } }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -9722,8 +9321,8 @@ "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" + "argparse": "1.0.10", + "glob": "7.1.2" }, "dependencies": { "glob": { @@ -9731,25 +9330,175 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } }, "yargs": { - "version": "3.10.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.2", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "11.1.1" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.5.0", + "shebang-command": "1.2.0", + "which": "1.2.14" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.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==", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "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==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "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==", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "mem": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "dev": true, + "requires": { + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "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==", + "dev": true, + "requires": { + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.1.0" + } + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "p-limit": "2.2.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "5.0.0", + "decamelize": "1.2.0" + } + } } }, "yargs-parser": { @@ -9758,7 +9507,7 @@ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" }, "dependencies": { "camelcase": { @@ -9769,13 +9518,24 @@ } } }, + "yargs-unparser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", + "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "dev": true, + "requires": { + "flat": "4.1.0", + "lodash": "4.17.11", + "yargs": "12.0.5" + } + }, "yauzl": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "dev": true, "requires": { - "fd-slicer": "~1.0.1" + "fd-slicer": "1.0.1" } }, "yn": { diff --git a/package.json b/package.json index 3432e3545..d11dcf9f2 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,18 @@ "bin": { "authelia": "./dist/server/src/index.js" }, + "engines": { + "node": ">=8.0.0 <10.0.0" + }, "scripts": { - "test": "./node_modules/.bin/grunt test-unit", + "start": "./scripts/authelia-scripts suites start", + "build": "./scripts/authelia-scripts build", + "unittest": "./scripts/authelia-scripts unittest", + "test": "./scripts/authelia-scripts suites test", + "travis": "./scripts/authelia-scripts travis", "cover": "NODE_ENV=test nyc npm t", - "serve": "node dist/server/index.js" + "scripts": "./scripts/authelia-scripts", + "hash-password": "./scripts/authelia-scripts hash-password" }, "repository": { "type": "git", @@ -23,6 +31,7 @@ "title": "Authelia API documentation" }, "dependencies": { + "@types/url-parse": "^1.4.2", "ajv": "^6.3.0", "bluebird": "^3.5.0", "body-parser": "^1.15.2", @@ -40,39 +49,36 @@ "nodemailer-direct-transport": "^3.3.2", "nodemailer-smtp-transport": "^2.7.4", "object-path": "^0.11.3", - "pug": "^2.0.0-rc.2", "randomatic": "^3.1.0", "randomstring": "^1.1.5", "redis": "^2.8.0", "speakeasy": "^2.0.0", "u2f": "^0.1.2", "u2f-api": "^1.0.7", + "url-parse": "^1.4.4", "winston": "^2.3.1", "yamljs": "^0.3.0" }, "devDependencies": { "@types/bluebird": "^3.5.4", "@types/body-parser": "^1.16.3", - "@types/bootstrap": "^4.0.1", + "@types/chokidar": "^1.7.5", + "@types/commander": "^2.12.2", "@types/connect-redis": "0.0.7", - "@types/cors": "^2.8.1", - "@types/cucumber": "^4.0.1", "@types/ejs": "^2.3.33", "@types/express": "^4.0.35", "@types/express-session": "1.15.8", "@types/helmet": "0.0.37", - "@types/jquery": "^3.3.1", - "@types/jsdom": "^11.0.4", "@types/ldapjs": "^1.0.3", - "@types/mocha": "^5.0.0", + "@types/mocha": "^5.2.6", "@types/mockdate": "^2.0.0", "@types/mongodb": "^3.0.9", "@types/nedb": "^1.8.3", + "@types/node-fetch": "^2.1.4", "@types/nodemailer": "^4.6.0", "@types/nodemailer-direct-transport": "^1.0.31", "@types/nodemailer-smtp-transport": "^2.7.4", "@types/object-path": "^0.9.28", - "@types/proxyquire": "^1.3.27", "@types/query-string": "^5.1.0", "@types/randomstring": "^1.1.5", "@types/redis": "^2.6.0", @@ -85,28 +91,21 @@ "@types/winston": "^2.3.2", "@types/yamljs": "^0.2.30", "apidoc": "^0.17.6", - "bootstrap": "^4.1.3", - "browserify": "^16.1.1", + "chokidar": "^2.0.4", "chromedriver": "^2.37.0", - "cucumber": "^4.0.0", + "commander": "^2.19.0", + "concurrently": "^4.1.0", "grunt": "^1.0.3", - "grunt-browserify": "^5.0.0", "grunt-contrib-clean": "^2.0.0", - "grunt-contrib-concat": "^1.0.1", "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-cssmin": "^2.2.0", - "grunt-contrib-watch": "^1.1.0", - "grunt-env": "^0.4.4", "grunt-run": "^0.8.0", "istanbul": "^0.4.5", "jquery": "^3.2.1", - "js-logger": "^1.3.0", - "jsdom": "^11.0.0", - "mocha": "^5.0.5", + "mocha": "^6.0.2", "mockdate": "^2.0.1", - "nyc": "^13.1.0", - "power-assert": "^1.4.4", - "proxyquire": "^2.0.1", + "node-fetch": "^2.3.0", + "nodemon": "^1.18.9", + "nyc": "^13.3.0", "query-string": "^6.0.0", "readable-stream": "^2.3.3", "request": "^2.88.0", @@ -115,11 +114,11 @@ "should": "^13.2.1", "sinon": "^5.0.7", "tmp": "0.0.33", + "tree-kill": "^1.2.1", "ts-node": "^6.0.1", "tslint": "^5.2.0", - "typescript": "^2.3.2", - "typescript-json-schema": "^0.23.0", - "uglify-es": "^3.0.15" + "typescript": "^2.9.2", + "typescript-json-schema": "^0.23.0" }, "nyc": { "include": [ diff --git a/scripts/authelia-scripts b/scripts/authelia-scripts new file mode 100755 index 000000000..3f81c58ab --- /dev/null +++ b/scripts/authelia-scripts @@ -0,0 +1,17 @@ +#!/usr/bin/env node + +var program = require('commander'); + +program + .version('0.0.1') + + .command('suites', 'Run Authelia in specific environments.') + .command('serve', 'Run Authelia with a customized configuration.') + .command('build', 'Build production version of Authelia from source.') + .command('clean', 'Clean the production version of Authelia.') + .command('unittest', 'Run Authelia integration tests.') + + .command('travis', 'Build and test Authelia on Travis.') + .command('hash-password ', 'Hash a password with SSHA512.') + .command('docker', 'Docker related commands.') + .parse(process.argv); \ No newline at end of file diff --git a/scripts/authelia-scripts-build b/scripts/authelia-scripts-build new file mode 100755 index 000000000..336aaed50 --- /dev/null +++ b/scripts/authelia-scripts-build @@ -0,0 +1,29 @@ +#!/bin/bash + +set -x +set -e + +DIST_DIR=dist + +rm -rf $DIST_DIR + +# Build the server +./node_modules/.bin/tslint -c server/tslint.json -p server/tsconfig.json +./node_modules/.bin/tsc -p server/tsconfig.json + +mkdir -p $DIST_DIR/server/src/resources +cp server/src/resources/** $DIST_DIR/server/src/resources/ + +./node_modules/.bin/typescript-json-schema -o server/src/lib/configuration/Configuration.schema.json --strictNullChecks --required server/tsconfig.json Configuration + +# Copy in dist +cp server/src/lib/configuration/Configuration.schema.json $DIST_DIR/server/src/lib/configuration + + +# Build the client +pushd client +npm run build +popd + +mv client/build $DIST_DIR/server/src/public_html + diff --git a/scripts/authelia-scripts-clean b/scripts/authelia-scripts-clean new file mode 100755 index 000000000..ce010bffd --- /dev/null +++ b/scripts/authelia-scripts-clean @@ -0,0 +1,3 @@ +#!/bin/bash + +rm -rf dist diff --git a/scripts/authelia-scripts-docker b/scripts/authelia-scripts-docker new file mode 100755 index 000000000..e7d71573b --- /dev/null +++ b/scripts/authelia-scripts-docker @@ -0,0 +1,8 @@ +#!/usr/bin/env node + +var program = require('commander'); + +program + .command('build', 'Build docker image clems4ever/authelia.') + .command('publish', 'Publish image clems4ever/authelia to Dockerhub.') + .parse(process.argv); diff --git a/scripts/authelia-scripts-docker-build b/scripts/authelia-scripts-docker-build new file mode 100755 index 000000000..a221c6863 --- /dev/null +++ b/scripts/authelia-scripts-docker-build @@ -0,0 +1,6 @@ +#!/usr/bin/env node + +var { exec } = require('./utils/exec'); +var { IMAGE_NAME } = require('./utils/docker'); + +exec(`docker build -t ${IMAGE_NAME} .`); \ No newline at end of file diff --git a/scripts/docker-publish.sh b/scripts/authelia-scripts-docker-publish similarity index 97% rename from scripts/docker-publish.sh rename to scripts/authelia-scripts-docker-publish index 0e6bb76b6..81c144191 100755 --- a/scripts/docker-publish.sh +++ b/scripts/authelia-scripts-docker-publish @@ -21,7 +21,6 @@ function deploy_on_dockerhub { echo "===========================================================" echo "Docker image $IMAGE_WITH_TAG will be deployed on Dockerhub." echo "===========================================================" - docker build -t $IMAGE_NAME . docker tag $IMAGE_NAME $IMAGE_WITH_TAG; docker push $IMAGE_WITH_TAG; echo "Docker image deployed successfully." diff --git a/scripts/authelia-scripts-hash-password b/scripts/authelia-scripts-hash-password new file mode 100755 index 000000000..e8e25d5c3 --- /dev/null +++ b/scripts/authelia-scripts-hash-password @@ -0,0 +1,28 @@ +#!/usr/bin/env node + +var program = require('commander'); +var RandomString = require("randomstring"); +var Util = require("util"); +var crypt = require("crypt3"); + +function ssha512(password, saltSize, rounds) { + // $6 means SHA512 + const _salt = Util.format("$6$rounds=%d$%s", rounds, + RandomString.generate(saltSize)); + + const hash = crypt(password, _salt); + return Util.format("{CRYPT}%s", hash); +} + +let password; + +program + .option('-s, --salt ', 'The size of the salt to generate.') + .option('-r, --rounds ', 'The number of rounds.') + .arguments('') + .action(function (_password) { + password = _password; + }) + .parse(process.argv); + +console.log(ssha512(password, program.salt || 16, program.rounds || 500000)); diff --git a/scripts/authelia-scripts-serve b/scripts/authelia-scripts-serve new file mode 100755 index 000000000..13c290ea3 --- /dev/null +++ b/scripts/authelia-scripts-serve @@ -0,0 +1,27 @@ +#!/usr/bin/env node + +var program = require('commander'); +var spawn = require('child_process').spawn; +var fs = require('fs'); + +let config; + +program + .description('Run Authelia server with a custom configuration file. This is an alternative to suites in the case the environment is already set up.') + .arguments('[config_file]', 'Configuration file to run Authelia with.') + .action((configArg) => config = configArg) + .parse(process.argv); + + +if (!config) { + config = 'config.yml'; // set default config file.; +} + +const server = spawn('/usr/bin/env', ['node', 'dist/server/src/index.js', config]); + +server.stdout.pipe(process.stdout); +server.stderr.pipe(process.stderr); + +server.on('exit', function(statusCode) { + process.exit(statusCode); +}); \ No newline at end of file diff --git a/scripts/authelia-scripts-suites b/scripts/authelia-scripts-suites new file mode 100755 index 000000000..7d1c333fc --- /dev/null +++ b/scripts/authelia-scripts-suites @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +var program = require('commander'); + +program + .command('start', 'Start a suite.') + .command('list', 'List the available suites') + .command('test', 'Test a suite.') + .command('clean', 'Clean remaining environment artifacts (like docker-compose env).') + .parse(process.argv); diff --git a/scripts/authelia-scripts-suites-clean b/scripts/authelia-scripts-suites-clean new file mode 100755 index 000000000..d6775472b --- /dev/null +++ b/scripts/authelia-scripts-suites-clean @@ -0,0 +1,18 @@ +#!/usr/bin/env node + +var program = require('commander'); +var spawn = require('child_process').spawn; + +program + .description(`Clean environment artifacts from previous suites.`) + .parse(process.argv) + +runEnvProcess = spawn('./node_modules/.bin/ts-node -P test/tsconfig.json -- ./scripts/clean-environment.ts', { + shell: true +}); +runEnvProcess.stdout.pipe(process.stdout); +runEnvProcess.stderr.pipe(process.stderr); + +runEnvProcess.on('exit', function(statusCode) { + process.exit(statusCode); +}); \ No newline at end of file diff --git a/scripts/authelia-scripts-suites-list b/scripts/authelia-scripts-suites-list new file mode 100755 index 000000000..4891f6382 --- /dev/null +++ b/scripts/authelia-scripts-suites-list @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +var program = require('commander'); +var ListSuites = require('./utils/ListSuites'); + +program + .description(`List the available suites.`) + .parse(process.argv) + +console.log(ListSuites().join("\n")); \ No newline at end of file diff --git a/scripts/authelia-scripts-suites-start b/scripts/authelia-scripts-suites-start new file mode 100755 index 000000000..1fdc85a97 --- /dev/null +++ b/scripts/authelia-scripts-suites-start @@ -0,0 +1,59 @@ +#!/usr/bin/env node + +var program = require('commander'); +var spawn = require('child_process').spawn; +var fs = require('fs'); +var ListSuites = require('./utils/ListSuites'); + +let suite; + +program + .description(`Start the suite provided as argument. You can list the suites with the 'list' command.`) + .arguments('') + .action((suiteArg) => suite = suiteArg) + .parse(process.argv) + +if (!suite) { + program.help(); +} + +if (ListSuites().indexOf(suite) == -1) { + console.log("[WARNING] This suite does not exist. Use 'list' command to check the existing suites."); + process.exit(1); +} + +const ENVIRONMENT_FILENAME = '.suite'; + +let runEnvProcess; + +// Sometime SIGINT is received twice, we make sure with this variable that we cleanup +// only once. +var alreadyCleaningUp = false; + +// Properly cleanup server and client if ctrl-c is hit +process.on('SIGINT', function() { + if (alreadyCleaningUp) return; + alreadyCleaningUp = true; + console.log('Cleanup procedure is running...'); +}); + +async function main() { + fs.writeFileSync(ENVIRONMENT_FILENAME, suite); + + // Start the environment from ts-node process. + runEnvProcess = spawn('./node_modules/.bin/ts-node -P test/tsconfig.json -- ./scripts/run-environment.ts ' + suite, { + shell: true + }); + runEnvProcess.stdout.pipe(process.stdout); + runEnvProcess.stderr.pipe(process.stderr); + + runEnvProcess.on('exit', function(statusCode) { + fs.unlinkSync(ENVIRONMENT_FILENAME); + process.exit(statusCode); + }); +} + +main().catch((err) => { + console.error(err); + process.exit(1) +}); \ No newline at end of file diff --git a/scripts/authelia-scripts-suites-test b/scripts/authelia-scripts-suites-test new file mode 100755 index 000000000..11946260a --- /dev/null +++ b/scripts/authelia-scripts-suites-test @@ -0,0 +1,61 @@ +#!/usr/bin/env node + +var program = require('commander'); +var spawn = require('child_process').spawn; +var fs = require('fs'); + +let suite; + +program + .description('Run the tests for the current suite or the provided one.') + .arguments('[suite]') + .option('--headless', 'Run in headless mode.') + .action((suiteArg) => suite = suiteArg) + .parse(process.argv); + +let args = []; +const ENVIRONMENT_FILENAME = '.suite'; // This file is created by the start command. + +if (suite) { + if (fs.existsSync(ENVIRONMENT_FILENAME) && suite != fs.readFileSync(ENVIRONMENT_FILENAME)) { + console.error('You cannot test a suite while another one is running. If you want to test the current suite, ' + + 'do not provide the suite argument. Otherwise, stop the current suite and run the command again.'); + process.exit(1); + } + console.log('Suite %s provided. Running test related to this suite against built version of Authelia.', suite); + args.push('test/suites/' + suite + '/test.ts'); +} +else if (fs.existsSync(ENVIRONMENT_FILENAME)) { + suite = fs.readFileSync(ENVIRONMENT_FILENAME); + console.log('Suite %s detected from dev env. Running test related to this suite.', suite); + args.push('test/suites/' + suite + '/test.ts'); +} +else { + console.log('No suite provided therefore all suites will be tested.'); + args.push('test/suites/**/test.ts'); +} + +mocha = spawn('./node_modules/.bin/mocha', ['--forbid-only', '--forbid-pending', '--exit', '--colors', '--require', 'ts-node/register', ...args], { + env: { + ...process.env, + TS_NODE_PROJECT: 'test/tsconfig.json', + HEADLESS: (program.headless) ? 'y' : 'n', + } +}); + +mocha.stdout.pipe(process.stdout); +mocha.stderr.pipe(process.stderr); + +mocha.on('exit', function(statusCode) { + if (statusCode != 0) { + console.error("The tests failed... Mocha exited with status code " + statusCode); + fs.readFile('/tmp/authelia-server.log', function(err, data) { + if (err) { + console.error(err); + return; + } + console.log(data.toString('utf-8')); + }); + } + process.exit(statusCode); +}) diff --git a/scripts/authelia-scripts-travis b/scripts/authelia-scripts-travis new file mode 100755 index 000000000..11e6ce615 --- /dev/null +++ b/scripts/authelia-scripts-travis @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +export PATH=./scripts:$PATH + +docker --version +docker-compose --version +echo "node `node -v`" +echo "npm `npm -v`" + +docker-compose -f docker-compose.yml \ + -f example/compose/mongo/docker-compose.yml \ + -f example/compose/redis/docker-compose.yml \ + -f example/compose/nginx/backend/docker-compose.yml \ + -f example/compose/nginx/portal/docker-compose.yml \ + -f example/compose/smtp/docker-compose.yml \ + -f example/compose/httpbin/docker-compose.yml \ + -f example/compose/ldap/docker-compose.admin.yml \ + -f example/compose/ldap/docker-compose.yml \ + pull + +# Build +authelia-scripts build + +# Run unit tests +authelia-scripts unittest + +# Build the docker image +authelia-scripts docker build + +# Run integration tests +authelia-scripts suites test --headless + +# Test npm deployment before actual deployment +# ./scripts/npm-deployment-test.sh diff --git a/scripts/authelia-scripts-unittest b/scripts/authelia-scripts-unittest new file mode 100755 index 000000000..8e7c113c9 --- /dev/null +++ b/scripts/authelia-scripts-unittest @@ -0,0 +1,40 @@ +#!/usr/bin/env node + +var program = require('commander'); +var spawn = require('child_process').spawn; + +program + .parse(process.argv); + +async function runTests(pattern) { + return new Promise((resolve, reject) => { + mocha = spawn('./node_modules/.bin/mocha', ['--colors', '--require', 'ts-node/register', pattern], { + env: { + ...process.env, + 'TS_NODE_PROJECT': './server/tsconfig.json' + } + }); + + mocha.stdout.pipe(process.stdout); + mocha.stderr.pipe(process.stderr); + mocha.on('exit', (status) => { + if (status == 0) { + resolve(); + } + reject(new Error('Status code ' + status)); + }); + }); +} + +async function test() { + await runTests('server/src/**/*.spec.ts'); + await runTests('shared/**/*.spec.ts'); +} + +test() + .then(() => { + process.exit(0); + }, (err) => { + process.exit(1); + }); + diff --git a/scripts/clean-environment.ts b/scripts/clean-environment.ts new file mode 100644 index 000000000..0a874ebf5 --- /dev/null +++ b/scripts/clean-environment.ts @@ -0,0 +1,8 @@ +var ListSuites = require('./utils/ListSuites'); + +const suites = ListSuites(); + +suites.forEach(async (suite: string) => { + var { teardown } = require(`../test/suites/${suite}/environment`);; + teardown().catch((err: Error) => console.error(err)); +}); \ No newline at end of file diff --git a/scripts/dc-dev.sh b/scripts/dc-dev.sh deleted file mode 100755 index 191b704ca..000000000 --- a/scripts/dc-dev.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -e - -docker-compose \ - -f docker-compose.dev.yml \ - -f example/compose/docker-compose.base.yml \ - -f example/compose/mongo/docker-compose.yml \ - -f example/compose/redis/docker-compose.yml \ - -f example/compose/nginx/backend/docker-compose.yml \ - -f example/compose/nginx/portal/docker-compose.yml \ - -f example/compose/smtp/docker-compose.yml \ - -f example/compose/httpbin/docker-compose.yml \ - -f example/compose/ldap/docker-compose.admin.yml \ - -f example/compose/ldap/docker-compose.yml $* diff --git a/scripts/example-commit/dc-example.sh b/scripts/example-commit/dc-example.sh deleted file mode 100755 index 0f9e38403..000000000 --- a/scripts/example-commit/dc-example.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -set -e - -docker-compose \ - -f docker-compose.yml \ - -f example/compose/docker-compose.base.yml \ - -f example/compose/mongo/docker-compose.yml \ - -f example/compose/redis/docker-compose.yml \ - -f example/compose/nginx/backend/docker-compose.yml \ - -f example/compose/nginx/portal/docker-compose.yml \ - -f example/compose/smtp/docker-compose.yml \ - -f example/compose/httpbin/docker-compose.yml \ - -f example/compose/ldap/docker-compose.yml $* diff --git a/scripts/example-commit/deploy-example.sh b/scripts/example-commit/deploy-example.sh deleted file mode 100755 index 4bd228ff0..000000000 --- a/scripts/example-commit/deploy-example.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -DC_SCRIPT=./scripts/example-commit/dc-example.sh - -$DC_SCRIPT build -$DC_SCRIPT up -d httpbin mongo redis openldap authelia smtp nginx-portal nginx-backend diff --git a/scripts/example-commit/undeploy-example.sh b/scripts/example-commit/undeploy-example.sh deleted file mode 100755 index 3ef607fe1..000000000 --- a/scripts/example-commit/undeploy-example.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -DC_SCRIPT=./scripts/example-commit/dc-example.sh - -$DC_SCRIPT down diff --git a/scripts/example-dockerhub/dc-example.sh b/scripts/example-dockerhub/dc-example.sh deleted file mode 100755 index a60b0f49c..000000000 --- a/scripts/example-dockerhub/dc-example.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -set -e - -docker-compose \ - -f docker-compose.dockerhub.yml \ - -f example/compose/docker-compose.base.yml \ - -f example/compose/mongo/docker-compose.yml \ - -f example/compose/redis/docker-compose.yml \ - -f example/compose/nginx/backend/docker-compose.yml \ - -f example/compose/nginx/portal/docker-compose.yml \ - -f example/compose/smtp/docker-compose.yml \ - -f example/compose/httpbin/docker-compose.yml \ - -f example/compose/ldap/docker-compose.yml $* diff --git a/scripts/example-dockerhub/deploy-example.sh b/scripts/example-dockerhub/deploy-example.sh deleted file mode 100755 index 844920653..000000000 --- a/scripts/example-dockerhub/deploy-example.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -DC_SCRIPT=./scripts/example-dockerhub/dc-example.sh - -#$DC_SCRIPT build -$DC_SCRIPT up -d httpbin mongo redis openldap authelia smtp nginx-portal nginx-backend diff --git a/scripts/example-dockerhub/undeploy-example.sh b/scripts/example-dockerhub/undeploy-example.sh deleted file mode 100755 index 1b943f396..000000000 --- a/scripts/example-dockerhub/undeploy-example.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -DC_SCRIPT=./scripts/example-dockerhub/dc-example.sh - -$DC_SCRIPT down diff --git a/scripts/integration-tests.sh b/scripts/integration-tests.sh deleted file mode 100755 index f84f969d1..000000000 --- a/scripts/integration-tests.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -DC_SCRIPT=./scripts/example-commit/dc-example.sh -EXPECTED_SERVICES_COUNT=8 - -build_services() { - $DC_SCRIPT build authelia -} - -expect_services_count() { - EXPECTED_COUNT=$1 - service_count=`docker ps -a | grep "Up " | wc -l` - - if [ "${service_count}" -eq "$EXPECTED_COUNT" ] - then - echo "Services are up and running." - else - echo "Some services exited..." - docker ps -a - exit 1 - fi -} - -run_integration_tests() { - ./node_modules/.bin/grunt test-int -} - -run_other_tests() { - echo "Test dev environment deployment (commands in README)" - ./scripts/example-commit/deploy-example.sh - expect_services_count $EXPECTED_SERVICES_COUNT - ./scripts/example-commit/undeploy-example.sh -} - -run_other_tests_docker() { - echo "Test dev docker deployment (commands in README)" - ./scripts/example-dockerhub/deploy-example.sh - expect_services_count $EXPECTED_SERVICES_COUNT - ./scripts/example-dockerhub/undeploy-example.sh -} - -set -e - -# Build the container -build_services - -# Pull all images -$DC_SCRIPT pull - -# Prepare & test example from end user perspective -run_integration_tests - -# Other tests like executing the deployment script -run_other_tests - -# Test example with precompiled container -run_other_tests_docker diff --git a/scripts/run-cucumber.sh b/scripts/run-cucumber.sh deleted file mode 100755 index cfd0ed9f0..000000000 --- a/scripts/run-cucumber.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -REQ=`for f in test/features/step_definitions/*.ts; do echo "--require $f"; done;` - -./node_modules/.bin/cucumber-js --format-options '{"colorsEnabled": true}' --require-module ts-node/register --require test/features/support/world.ts $REQ $* diff --git a/scripts/run-environment.ts b/scripts/run-environment.ts new file mode 100644 index 000000000..ed1655e94 --- /dev/null +++ b/scripts/run-environment.ts @@ -0,0 +1,40 @@ + +const userSuite = process.argv[2]; + +var { setup, teardown } = require(`../test/suites/${userSuite}/environment`); + +function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +let teardownInProgress = false; + +process.on('SIGINT', function() { + if (teardownInProgress) return; + teardownInProgress = true; + console.log('Tearing down environment...'); + return teardown() + .then(() => { + process.exit(0) + }) + .catch((err: Error) => { + console.error(err); + process.exit(1); + }); +}); + +function main() { + console.log('Setting up environment...'); + return setup() + .then(async () => { + while (true) { + await sleep(10000); + } + }) + .catch((err: Error) => { + console.error(err); + process.exit(1); + }); +} + +main(); \ No newline at end of file diff --git a/scripts/travis.sh b/scripts/travis.sh deleted file mode 100755 index 664242d2a..000000000 --- a/scripts/travis.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -set -e - -docker --version -docker-compose --version -echo "node `node -v`" -echo "npm `npm -v`" - -# Generate configuration schema -grunt schema - -# Run unit tests -grunt test-unit - -# Build the app from Typescript and package -grunt build-dist - -# Run integration/example tests -./scripts/integration-tests.sh - -# Test npm deployment before actual deployment -# ./scripts/npm-deployment-test.sh diff --git a/scripts/utils/ListSuites.js b/scripts/utils/ListSuites.js new file mode 100644 index 000000000..546d05f8e --- /dev/null +++ b/scripts/utils/ListSuites.js @@ -0,0 +1,13 @@ +const { lstatSync, readdirSync } = require('fs') +const { join } = require('path') + +const isDirectory = source => lstatSync(source).isDirectory() +const getDirectories = source => + readdirSync(source) + .map(name => join(source, name)) + .filter(isDirectory) + .map(x => x.split('/').slice(-1)[0]) + +module.exports = function() { + return getDirectories('test/suites/'); +} \ No newline at end of file diff --git a/scripts/utils/docker.js b/scripts/utils/docker.js new file mode 100644 index 000000000..5d78bbe3f --- /dev/null +++ b/scripts/utils/docker.js @@ -0,0 +1,5 @@ + + +module.exports = { + IMAGE_NAME: 'clems4ever/authelia' +} \ No newline at end of file diff --git a/scripts/utils/exec.js b/scripts/utils/exec.js new file mode 100644 index 000000000..82cdec729 --- /dev/null +++ b/scripts/utils/exec.js @@ -0,0 +1,21 @@ +var spawn = require('child_process').spawn; + +function exec(cmd) { + return new Promise((resolve, reject) => { + const command = spawn(cmd, { + shell: true + }); + command.stdout.pipe(process.stdout); + command.stderr.pipe(process.stderr); + + command.on('exit', function(statusCode) { + if (statusCode != 0) { + reject(new Error('Exited with status ' + statusCode)); + return; + } + resolve(); + }) + }) +} + +module.exports = { exec } \ No newline at end of file diff --git a/server/src/lib/AuthenticationSessionHandler.ts b/server/src/lib/AuthenticationSessionHandler.ts index 57361bf8a..1e54054ff 100644 --- a/server/src/lib/AuthenticationSessionHandler.ts +++ b/server/src/lib/AuthenticationSessionHandler.ts @@ -1,8 +1,6 @@ import express = require("express"); -import U2f = require("u2f"); -import BluebirdPromise = require("bluebird"); import { AuthenticationSession } from "../../types/AuthenticationSession"; import { IRequestLogger } from "./logging/IRequestLogger"; import { Level } from "./authentication/Level"; @@ -36,7 +34,8 @@ export class AuthenticationSessionHandler { } if (!req.session.auth) { - logger.debug(req, "Authentication session %s was undefined. Resetting.", req.sessionID); + logger.debug(req, "Authentication session %s was undefined. Resetting..." + + " If it's unexpected, make sure you are visiting the expected domain.", req.sessionID); AuthenticationSessionHandler.reset(req); } diff --git a/server/src/lib/ErrorReplies.ts b/server/src/lib/ErrorReplies.ts index f1c5f4fd1..93bc89841 100644 --- a/server/src/lib/ErrorReplies.ts +++ b/server/src/lib/ErrorReplies.ts @@ -1,5 +1,4 @@ import express = require("express"); -import BluebirdPromise = require("bluebird"); import { IRequestLogger } from "./logging/IRequestLogger"; function replyWithError(req: express.Request, res: express.Response, diff --git a/server/src/lib/FirstFactorValidator.ts b/server/src/lib/FirstFactorValidator.ts index 231060002..e098b7e92 100644 --- a/server/src/lib/FirstFactorValidator.ts +++ b/server/src/lib/FirstFactorValidator.ts @@ -1,7 +1,6 @@ import BluebirdPromise = require("bluebird"); import express = require("express"); -import objectPath = require("object-path"); import Exceptions = require("./Exceptions"); import { AuthenticationSessionHandler } from "./AuthenticationSessionHandler"; import { IRequestLogger } from "./logging/IRequestLogger"; diff --git a/server/src/lib/IdentityCheckMiddleware.spec.ts b/server/src/lib/IdentityCheckMiddleware.spec.ts index 842ed6bcb..db32e4e08 100644 --- a/server/src/lib/IdentityCheckMiddleware.spec.ts +++ b/server/src/lib/IdentityCheckMiddleware.spec.ts @@ -1,24 +1,16 @@ import sinon = require("sinon"); -import IdentityValidator = require("./IdentityCheckMiddleware"); -import { AuthenticationSessionHandler } - from "./AuthenticationSessionHandler"; -import { AuthenticationSession } from "../../types/AuthenticationSession"; -import { UserDataStore } from "./storage/UserDataStore"; +import * as IdentityCheckMiddleware from "./IdentityCheckMiddleware"; import exceptions = require("./Exceptions"); import { ServerVariables } from "./ServerVariables"; import Assert = require("assert"); import express = require("express"); import BluebirdPromise = require("bluebird"); import ExpressMock = require("./stubs/express.spec"); -import NotifierMock = require("./notifiers/NotifierStub.spec"); import { IdentityValidableStub } from "./IdentityValidableStub.spec"; -import { RequestLoggerStub } from "./logging/RequestLoggerStub.spec"; import { ServerVariablesMock, ServerVariablesMockBuilder } from "./ServerVariablesMockBuilder.spec"; -import { PRE_VALIDATION_TEMPLATE } - from "./IdentityCheckPreValidationTemplate"; - +import { OPERATION_FAILED } from "../../../shared/UserMessages"; describe("IdentityCheckMiddleware", function () { let req: ExpressMock.RequestMock; @@ -69,8 +61,8 @@ throws a first factor error", function () { identityValidable.preValidationInitStub.returns(BluebirdPromise.reject( new exceptions.FirstFactorValidationError( "Error during prevalidation"))); - const callback = IdentityValidator.get_start_validation( - identityValidable, "/endpoint", vars); + const callback = IdentityCheckMiddleware.post_start_validation( + identityValidable, vars); return callback(req as any, res as any, undefined) .then(() => { @@ -84,8 +76,8 @@ throws a first factor error", function () { identityValidable.preValidationInitStub .returns(BluebirdPromise.resolve(identity)); - const callback = IdentityValidator - .get_start_validation(identityValidable, "/endpoint", vars); + const callback = IdentityCheckMiddleware + .post_start_validation(identityValidable, vars); return callback(req as any, res as any, undefined) .then(function () { @@ -96,13 +88,12 @@ throws a first factor error", function () { // In that case we answer with 200 to avoid user enumeration. it("should send 200 if userid is missing in provided identity", function () { - const endpoint = "/protected"; const identity = { email: "abc@example.com" }; identityValidable.preValidationInitStub .returns(BluebirdPromise.resolve(identity)); - const callback = IdentityValidator - .get_start_validation(identityValidable, "/endpoint", vars); + const callback = IdentityCheckMiddleware + .post_start_validation(identityValidable, vars); return callback(req as any, res as any, undefined) .then(function () { @@ -110,52 +101,49 @@ throws a first factor error", function () { }); }); - it("should issue a token, send an email and return 204", function () { - const endpoint = "/protected"; + it("should issue a token, send an email and return 204", async function () { const identity = { userid: "user", email: "abc@example.com" }; req.get = sinon.stub().withArgs("Host").returns("localhost"); identityValidable.preValidationInitStub .returns(BluebirdPromise.resolve(identity)); - const callback = IdentityValidator - .get_start_validation(identityValidable, "/finish_endpoint", vars); + const callback = IdentityCheckMiddleware + .post_start_validation(identityValidable, vars); - return callback(req as any, res as any, undefined) - .then(function () { - Assert(mocks.notifier.notifyStub.calledOnce); - Assert(mocks.userDataStore.produceIdentityValidationTokenStub - .calledOnce); - Assert.equal(mocks.userDataStore.produceIdentityValidationTokenStub - .getCall(0).args[0], "user"); - Assert.equal(mocks.userDataStore.produceIdentityValidationTokenStub - .getCall(0).args[3], 240000); - }); + await callback(req as any, res as any, undefined) + Assert(mocks.notifier.notifyStub.calledOnce); + Assert(mocks.userDataStore.produceIdentityValidationTokenStub + .calledOnce); + Assert.equal(mocks.userDataStore.produceIdentityValidationTokenStub + .getCall(0).args[0], "user"); + Assert.equal(mocks.userDataStore.produceIdentityValidationTokenStub + .getCall(0).args[3], 240000); }); }); describe("test finish GET", function () { - it("should send 401 if no identity_token is provided", () => { - const callback = IdentityValidator - .get_finish_validation(identityValidable, vars); + it("should return an error if no identity_token is provided", () => { + const callback = IdentityCheckMiddleware + .post_finish_validation(identityValidable, vars); return callback(req as any, res as any, undefined) .then(function () { - Assert(res.redirect.calledWith("/error/401")); + Assert(res.status.calledWith(200)); + Assert(res.send.calledWith({'error': OPERATION_FAILED})); }); }); it("should call postValidation if identity_token is provided and still \ valid", function () { req.query.identity_token = "token"; - - const callback = IdentityValidator - .get_finish_validation(identityValidable, vars); + const callback = IdentityCheckMiddleware + .post_finish_validation(identityValidable, vars); return callback(req as any, res as any, undefined); }); - it("should return 401 if identity_token is provided but invalid", + it("should return an error if identity_token is provided but invalid", function () { req.query.identity_token = "token"; @@ -165,11 +153,12 @@ valid", function () { mocks.userDataStore.consumeIdentityValidationTokenStub .returns(BluebirdPromise.reject(new Error("Invalid token"))); - const callback = IdentityValidator - .get_finish_validation(identityValidable, vars); + const callback = IdentityCheckMiddleware + .post_finish_validation(identityValidable, vars); return callback(req as any, res as any, undefined) .then(() => { - Assert(res.redirect.calledWith("/error/401")); + Assert(res.status.calledWith(200)); + Assert(res.send.calledWith({'error': OPERATION_FAILED})); }); }); }); diff --git a/server/src/lib/IdentityCheckMiddleware.ts b/server/src/lib/IdentityCheckMiddleware.ts index e72ea4db1..ff2fadea5 100644 --- a/server/src/lib/IdentityCheckMiddleware.ts +++ b/server/src/lib/IdentityCheckMiddleware.ts @@ -3,8 +3,6 @@ import randomstring = require("randomstring"); import BluebirdPromise = require("bluebird"); import util = require("util"); import Exceptions = require("./Exceptions"); -import fs = require("fs"); -import ejs = require("ejs"); import { IUserDataStore } from "./storage/IUserDataStore"; import Express = require("express"); import ErrorReplies = require("./ErrorReplies"); @@ -16,16 +14,13 @@ import { IdentityValidable } from "./IdentityValidable"; import Identity = require("../../types/Identity"); import { IdentityValidationDocument } from "./storage/IdentityValidationDocument"; - -const filePath = __dirname + "/../resources/email-template.ejs"; -const email_template = fs.readFileSync(filePath, "utf8"); +import { OPERATION_FAILED } from "../../../shared/UserMessages"; function createAndSaveToken(userid: string, challenge: string, userDataStore: IUserDataStore): BluebirdPromise { const five_minutes = 4 * 60 * 1000; const token = randomstring.generate({ length: 64 }); - const that = this; return userDataStore.produceIdentityValidationToken(userid, token, challenge, five_minutes) @@ -46,10 +41,10 @@ export function register(app: Express.Application, handler: IdentityValidable, vars: ServerVariables) { - app.get(pre_validation_endpoint, - get_start_validation(handler, post_validation_endpoint, vars)); - app.get(post_validation_endpoint, - get_finish_validation(handler, vars)); + app.post(pre_validation_endpoint, + post_start_validation(handler, vars)); + app.post(post_validation_endpoint, + post_finish_validation(handler, vars)); } function checkIdentityToken(req: Express.Request, identityToken: string) @@ -60,7 +55,7 @@ function checkIdentityToken(req: Express.Request, identityToken: string) return BluebirdPromise.resolve(); } -export function get_finish_validation(handler: IdentityValidable, +export function post_finish_validation(handler: IdentityValidable, vars: ServerVariables) : Express.RequestHandler { @@ -69,7 +64,7 @@ export function get_finish_validation(handler: IdentityValidable, let authSession: AuthenticationSession; const identityToken = objectPath.get( - req, "query.identity_token"); + req, "query.token"); vars.logger.debug(req, "Identity token provided is %s", identityToken); return checkIdentityToken(req, identityToken) @@ -89,12 +84,11 @@ export function get_finish_validation(handler: IdentityValidable, handler.postValidationResponse(req, res); return BluebirdPromise.resolve(); }) - .catch(ErrorReplies.replyWithError401(req, res, vars.logger)); + .catch(ErrorReplies.replyWithError200(req, res, vars.logger, OPERATION_FAILED)); }; } -export function get_start_validation(handler: IdentityValidable, - postValidationEndpoint: string, +export function post_start_validation(handler: IdentityValidable, vars: ServerVariables) : Express.RequestHandler { return function (req: Express.Request, res: Express.Response) @@ -116,10 +110,10 @@ export function get_start_validation(handler: IdentityValidable, return createAndSaveToken(userid, handler.challenge(), vars.userDataStore); }) - .then((token) => { + .then((token: string) => { const host = req.get("Host"); - const link_url = util.format("https://%s%s?identity_token=%s", host, - postValidationEndpoint, token); + const link_url = util.format("https://%s%s?token=%s", host, + handler.destinationPath(), token); vars.logger.info(req, "Notification sent to user \"%s\"", identity.userid); return vars.notifier.notify(identity.email, handler.mailSubject(), @@ -130,6 +124,7 @@ export function get_start_validation(handler: IdentityValidable, return BluebirdPromise.resolve(); }) .catch(Exceptions.IdentityError, (err: Error) => { + vars.logger.error(req, err.message); handler.preValidationResponse(req, res); return BluebirdPromise.resolve(); }) diff --git a/server/src/lib/IdentityCheckPreValidationTemplate.ts b/server/src/lib/IdentityCheckPreValidationTemplate.ts deleted file mode 100644 index 0161ce406..000000000 --- a/server/src/lib/IdentityCheckPreValidationTemplate.ts +++ /dev/null @@ -1,3 +0,0 @@ - - -export const PRE_VALIDATION_TEMPLATE = "need-identity-validation"; \ No newline at end of file diff --git a/server/src/lib/IdentityValidable.ts b/server/src/lib/IdentityValidable.ts index 075580c9e..85a9a45c2 100644 --- a/server/src/lib/IdentityValidable.ts +++ b/server/src/lib/IdentityValidable.ts @@ -16,4 +16,5 @@ export interface IdentityValidable { // Serves the page if identity validated postValidationResponse(req: Express.Request, res: Express.Response): void; mailSubject(): string; + destinationPath(): string; } \ No newline at end of file diff --git a/server/src/lib/IdentityValidableStub.spec.ts b/server/src/lib/IdentityValidableStub.spec.ts index 20a977140..e378c095b 100644 --- a/server/src/lib/IdentityValidableStub.spec.ts +++ b/server/src/lib/IdentityValidableStub.spec.ts @@ -1,7 +1,6 @@ import Sinon = require("sinon"); import { IdentityValidable } from "./IdentityValidable"; -import express = require("express"); import Bluebird = require("bluebird"); import { Identity } from "../../types/Identity"; @@ -13,6 +12,7 @@ export class IdentityValidableStub implements IdentityValidable { preValidationResponseStub: Sinon.SinonStub; postValidationResponseStub: Sinon.SinonStub; mailSubjectStub: Sinon.SinonStub; + destinationPathStub: Sinon.SinonStub; constructor() { this.challengeStub = Sinon.stub(); @@ -24,6 +24,7 @@ export class IdentityValidableStub implements IdentityValidable { this.postValidationResponseStub = Sinon.stub(); this.mailSubjectStub = Sinon.stub(); + this.destinationPathStub = Sinon.stub(); } challenge(): string { @@ -49,4 +50,8 @@ export class IdentityValidableStub implements IdentityValidable { mailSubject(): string { return this.mailSubjectStub(); } + + destinationPath(): string { + return this.destinationPathStub(); + } } \ No newline at end of file diff --git a/server/src/lib/Server.ts b/server/src/lib/Server.ts index 4090f6294..1a5105789 100644 --- a/server/src/lib/Server.ts +++ b/server/src/lib/Server.ts @@ -1,11 +1,8 @@ import BluebirdPromise = require("bluebird"); -import ObjectPath = require("object-path"); import { Configuration } from "./configuration/schema/Configuration"; import { GlobalDependencies } from "../../types/Dependencies"; -import { UserDataStore } from "./storage/UserDataStore"; import { ConfigurationParser } from "./configuration/ConfigurationParser"; -import { SessionConfigurationBuilder } from "./configuration/SessionConfigurationBuilder"; import { GlobalLogger } from "./logging/GlobalLogger"; import { RequestLogger } from "./logging/RequestLogger"; import { ServerVariables } from "./ServerVariables"; @@ -13,7 +10,6 @@ import { ServerVariablesInitializer } from "./ServerVariablesInitializer"; import { Configurator } from "./web_server/Configurator"; import * as Express from "express"; -import * as Path from "path"; import * as http from "http"; function clone(obj: any) { diff --git a/server/src/lib/ServerVariablesInitializer.ts b/server/src/lib/ServerVariablesInitializer.ts index df79238cc..fcf146d08 100644 --- a/server/src/lib/ServerVariablesInitializer.ts +++ b/server/src/lib/ServerVariablesInitializer.ts @@ -1,29 +1,19 @@ -import winston = require("winston"); import BluebirdPromise = require("bluebird"); -import U2F = require("u2f"); import Nodemailer = require("nodemailer"); import { IRequestLogger } from "./logging/IRequestLogger"; -import { RequestLogger } from "./logging/RequestLogger"; import { TotpHandler } from "./authentication/totp/TotpHandler"; -import { ITotpHandler } from "./authentication/totp/ITotpHandler"; import { NotifierFactory } from "./notifiers/NotifierFactory"; import { MailSenderBuilder } from "./notifiers/MailSenderBuilder"; import { LdapUsersDatabase } from "./authentication/backends/ldap/LdapUsersDatabase"; import { ConnectorFactory } from "./authentication/backends/ldap/connector/ConnectorFactory"; -import { IUserDataStore } from "./storage/IUserDataStore"; import { UserDataStore } from "./storage/UserDataStore"; -import { INotifier } from "./notifiers/INotifier"; import { Regulator } from "./regulation/Regulator"; -import { IRegulator } from "./regulation/IRegulator"; import Configuration = require("./configuration/schema/Configuration"); import { CollectionFactoryFactory } from "./storage/CollectionFactoryFactory"; -import { ICollectionFactory } from "./storage/ICollectionFactory"; -import { MongoCollectionFactory } from "./storage/mongo/MongoCollectionFactory"; -import { IMongoClient } from "./connectors/mongo/IMongoClient"; import { GlobalDependencies } from "../../types/Dependencies"; import { ServerVariables } from "./ServerVariables"; diff --git a/server/src/lib/authentication/AuthenticationError.ts b/server/src/lib/authentication/AuthenticationError.ts new file mode 100644 index 000000000..9285ac49c --- /dev/null +++ b/server/src/lib/authentication/AuthenticationError.ts @@ -0,0 +1,11 @@ + + +// Error thrown when the authentication failed when checking +// user/password. +class AuthenticationError extends Error { + constructor(msg: string) { + super(msg); + } +} + +export default AuthenticationError; \ No newline at end of file diff --git a/server/src/lib/authentication/Level.ts b/server/src/lib/authentication/Level.ts index 57b6a2346..dad5c5d5a 100644 --- a/server/src/lib/authentication/Level.ts +++ b/server/src/lib/authentication/Level.ts @@ -1,5 +1,3 @@ -export enum Level { - NOT_AUTHENTICATED = 0, - ONE_FACTOR = 1, - TWO_FACTOR = 2 -} \ No newline at end of file +import { default as Level } from "../../../../shared/AuthenticationLevel"; + +export { Level }; diff --git a/server/src/lib/authentication/backends/file/FileUsersDatabase.ts b/server/src/lib/authentication/backends/file/FileUsersDatabase.ts index cf822540c..32bbff856 100644 --- a/server/src/lib/authentication/backends/file/FileUsersDatabase.ts +++ b/server/src/lib/authentication/backends/file/FileUsersDatabase.ts @@ -8,6 +8,7 @@ import { GroupsAndEmails } from "../GroupsAndEmails"; import { IUsersDatabase } from "../IUsersDatabase"; import { HashGenerator } from "../../../utils/HashGenerator"; import { ReadWriteQueue } from "./ReadWriteQueue"; +import AuthenticationError from "../../AuthenticationError"; const loadAsync = Bluebird.promisify(Yaml.load); @@ -80,7 +81,7 @@ export class FileUsersDatabase implements IUsersDatabase { return HashGenerator.ssha512(password, rounds, salt) .then((hash: string) => { if (hash !== storedHash) { - return Bluebird.reject(new Error("Wrong username/password.")); + return Bluebird.reject(new AuthenticationError("Wrong username/password.")); } return Bluebird.resolve(); }); diff --git a/server/src/lib/authentication/backends/ldap/LdapUsersDatabase.ts b/server/src/lib/authentication/backends/ldap/LdapUsersDatabase.ts index edda62ec6..d41743279 100644 --- a/server/src/lib/authentication/backends/ldap/LdapUsersDatabase.ts +++ b/server/src/lib/authentication/backends/ldap/LdapUsersDatabase.ts @@ -5,6 +5,7 @@ import { LdapConfiguration } from "../../../configuration/schema/LdapConfigurati import { ISession } from "./ISession"; import { GroupsAndEmails } from "../GroupsAndEmails"; import Exceptions = require("../../../Exceptions"); +import AuthenticationError from "../../AuthenticationError"; type SessionCallback = (session: ISession) => Bluebird; @@ -58,7 +59,7 @@ export class LdapUsersDatabase implements IUsersDatabase { .then(() => getInfo(session)); }) .catch((err) => - Bluebird.reject(new Exceptions.LdapError(err.message))); + Bluebird.reject(new AuthenticationError(err.message))); } getEmails(username: string): Bluebird { diff --git a/server/src/lib/authentication/backends/ldap/Session.ts b/server/src/lib/authentication/backends/ldap/Session.ts index 3f37b226f..d6312cca0 100644 --- a/server/src/lib/authentication/backends/ldap/Session.ts +++ b/server/src/lib/authentication/backends/ldap/Session.ts @@ -1,6 +1,5 @@ import BluebirdPromise = require("bluebird"); import exceptions = require("../../../Exceptions"); -import { EventEmitter } from "events"; import { ISession } from "./ISession"; import { LdapConfiguration } from "../../../configuration/schema/LdapConfiguration"; import { Winston } from "../../../../../types/Dependencies"; diff --git a/server/src/lib/authorization/Authorizer.ts b/server/src/lib/authorization/Authorizer.ts index 889b7ec20..1d3995626 100644 --- a/server/src/lib/authorization/Authorizer.ts +++ b/server/src/lib/authorization/Authorizer.ts @@ -1,5 +1,5 @@ -import { ACLConfiguration, ACLPolicy, ACLRule } from "../configuration/schema/AclConfiguration"; +import { ACLConfiguration, ACLRule } from "../configuration/schema/AclConfiguration"; import { IAuthorizer } from "./IAuthorizer"; import { Winston } from "../../../types/Dependencies"; import { MultipleDomainMatcher } from "./MultipleDomainMatcher"; diff --git a/server/src/lib/notifiers/AbstractEmailNotifier.ts b/server/src/lib/notifiers/AbstractEmailNotifier.ts index 198e4e5db..626f2b6ae 100644 --- a/server/src/lib/notifiers/AbstractEmailNotifier.ts +++ b/server/src/lib/notifiers/AbstractEmailNotifier.ts @@ -1,6 +1,5 @@ import { INotifier } from "../notifiers/INotifier"; -import { Identity } from "../../../types/Identity"; import Fs = require("fs"); import Path = require("path"); diff --git a/server/src/lib/notifiers/EmailNotifier.ts b/server/src/lib/notifiers/EmailNotifier.ts index 4df7c861e..4ffd385d0 100644 --- a/server/src/lib/notifiers/EmailNotifier.ts +++ b/server/src/lib/notifiers/EmailNotifier.ts @@ -1,6 +1,3 @@ - -import * as BluebirdPromise from "bluebird"; - import { AbstractEmailNotifier } from "../notifiers/AbstractEmailNotifier"; import { EmailNotifierConfiguration } from "../configuration/schema/NotifierConfiguration"; import { IMailSender } from "./IMailSender"; diff --git a/server/src/lib/routes/error/401/get.spec.ts b/server/src/lib/routes/error/401/get.spec.ts deleted file mode 100644 index 9fdac9c3c..000000000 --- a/server/src/lib/routes/error/401/get.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -import Sinon = require("sinon"); -import Express = require("express"); -import Assert = require("assert"); -import Get401 from "./get"; -import { ServerVariables } from "../../../ServerVariables"; -import { ServerVariablesMockBuilder, ServerVariablesMock } - from "../../../ServerVariablesMockBuilder.spec"; - -describe("routes/error/401/get", function () { - let vars: ServerVariables; - let mocks: ServerVariablesMock; - let req: any; - let res: any; - let renderSpy: Sinon.SinonSpy; - - beforeEach(function () { - const s = ServerVariablesMockBuilder.build(); - vars = s.variables; - mocks = s.mocks; - - renderSpy = Sinon.spy(); - req = { - headers: {} - }; - res = { - render: renderSpy - }; - }); - - it("should set redirection url to the default redirection url", function () { - vars.config.default_redirection_url = "http://default-redirection"; - return Get401(vars)(req, res as any) - .then(function () { - Assert(renderSpy.calledOnce); - Assert(renderSpy.calledWithExactly("errors/401", { - redirection_url: "http://default-redirection" - })); - }); - }); - - it("should set redirection url to the referer", function () { - req.headers["referer"] = "http://redirection"; - return Get401(vars)(req, res as any) - .then(function () { - Assert(renderSpy.calledOnce); - Assert(renderSpy.calledWithExactly("errors/401", { - redirection_url: "http://redirection" - })); - }); - }); - - it("should render without redirecting the user", function () { - return Get401(vars)(req, res as any) - .then(function () { - Assert(renderSpy.calledOnce); - Assert(renderSpy.calledWithExactly("errors/401", { - redirection_url: undefined - })); - }); - }); -}); \ No newline at end of file diff --git a/server/src/lib/routes/error/401/get.ts b/server/src/lib/routes/error/401/get.ts deleted file mode 100644 index ca4a3963d..000000000 --- a/server/src/lib/routes/error/401/get.ts +++ /dev/null @@ -1,15 +0,0 @@ - -import BluebirdPromise = require("bluebird"); -import express = require("express"); -import redirector from "../redirector"; -import { ServerVariables } from "../../../ServerVariables"; - -export default function (vars: ServerVariables) { - return function (req: express.Request, res: express.Response): BluebirdPromise { - const redirectionUrl = redirector(req, vars); - res.render("errors/401", { - redirection_url: redirectionUrl - }); - return BluebirdPromise.resolve(); - }; -} diff --git a/server/src/lib/routes/error/403/get.spec.ts b/server/src/lib/routes/error/403/get.spec.ts deleted file mode 100644 index 22eb84853..000000000 --- a/server/src/lib/routes/error/403/get.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -import Sinon = require("sinon"); -import Express = require("express"); -import Assert = require("assert"); -import Get403 from "./get"; -import { ServerVariables } from "../../../ServerVariables"; -import { ServerVariablesMockBuilder, ServerVariablesMock } - from "../../../ServerVariablesMockBuilder.spec"; - -describe("routes/error/403/get", function () { - let vars: ServerVariables; - let mocks: ServerVariablesMock; - let req: any; - let res: any; - let renderSpy: Sinon.SinonSpy; - - beforeEach(function () { - const s = ServerVariablesMockBuilder.build(); - vars = s.variables; - mocks = s.mocks; - - renderSpy = Sinon.spy(); - req = { - headers: {} - }; - res = { - render: renderSpy - }; - }); - - it("should set redirection url to the default redirection url", function () { - vars.config.default_redirection_url = "http://default-redirection"; - return Get403(vars)(req, res as any) - .then(function () { - Assert(renderSpy.calledOnce); - Assert(renderSpy.calledWithExactly("errors/403", { - redirection_url: "http://default-redirection" - })); - }); - }); - - it("should set redirection url to the referer", function () { - req.headers["referer"] = "http://redirection"; - return Get403(vars)(req, res as any) - .then(function () { - Assert(renderSpy.calledOnce); - Assert(renderSpy.calledWithExactly("errors/403", { - redirection_url: "http://redirection" - })); - }); - }); - - it("should render without redirecting the user", function () { - return Get403(vars)(req, res as any) - .then(function () { - Assert(renderSpy.calledOnce); - Assert(renderSpy.calledWithExactly("errors/403", { - redirection_url: undefined - })); - }); - }); -}); \ No newline at end of file diff --git a/server/src/lib/routes/error/403/get.ts b/server/src/lib/routes/error/403/get.ts deleted file mode 100644 index 3ab0319e5..000000000 --- a/server/src/lib/routes/error/403/get.ts +++ /dev/null @@ -1,15 +0,0 @@ - -import BluebirdPromise = require("bluebird"); -import express = require("express"); -import redirector from "../redirector"; -import { ServerVariables } from "../../../ServerVariables"; - -export default function (vars: ServerVariables) { - return function (req: express.Request, res: express.Response): BluebirdPromise { - const redirectionUrl = redirector(req, vars); - res.render("errors/403", { - redirection_url: redirectionUrl - }); - return BluebirdPromise.resolve(); - }; -} \ No newline at end of file diff --git a/server/src/lib/routes/error/404/get.spec.ts b/server/src/lib/routes/error/404/get.spec.ts deleted file mode 100644 index 73e4e6cef..000000000 --- a/server/src/lib/routes/error/404/get.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import Sinon = require("sinon"); -import Express = require("express"); -import Assert = require("assert"); -import Get404 from "./get"; - -describe("routes/error/404/get", function () { - it("should render the page", function () { - const req = {} as Express.Request; - const res = { - render: Sinon.stub() - }; - - return Get404(req, res as any) - .then(function () { - Assert(res.render.calledOnce); - Assert(res.render.calledWith("errors/404")); - }); - }); -}); \ No newline at end of file diff --git a/server/src/lib/routes/error/404/get.ts b/server/src/lib/routes/error/404/get.ts deleted file mode 100644 index 6693b6fc8..000000000 --- a/server/src/lib/routes/error/404/get.ts +++ /dev/null @@ -1,8 +0,0 @@ - -import BluebirdPromise = require("bluebird"); -import express = require("express"); - -export default function (req: express.Request, res: express.Response): BluebirdPromise { - res.render("errors/404"); - return BluebirdPromise.resolve(); -} \ No newline at end of file diff --git a/server/src/lib/routes/error/redirector.ts b/server/src/lib/routes/error/redirector.ts deleted file mode 100644 index b1a3ccc11..000000000 --- a/server/src/lib/routes/error/redirector.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Express = require("express"); -import { ServerVariables } from "../../ServerVariables"; - -export default function (req: Express.Request, vars: ServerVariables): string { - let redirectionUrl: string; - - if (req.headers && req.headers["referer"]) - redirectionUrl = "" + req.headers["referer"]; - else if (vars.config.default_redirection_url) - redirectionUrl = vars.config.default_redirection_url; - - return redirectionUrl; -} \ No newline at end of file diff --git a/server/src/lib/routes/firstfactor/get.ts b/server/src/lib/routes/firstfactor/get.ts deleted file mode 100644 index d94f656c8..000000000 --- a/server/src/lib/routes/firstfactor/get.ts +++ /dev/null @@ -1,72 +0,0 @@ - -import express = require("express"); -import Endpoints = require("../../../../../shared/api"); -import BluebirdPromise = require("bluebird"); -import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; -import Constants = require("../../../../../shared/constants"); -import Util = require("util"); -import { ServerVariables } from "../../ServerVariables"; -import { SafeRedirector } from "../../utils/SafeRedirection"; -import { Level } from "../../authentication/Level"; - -function getRedirectParam( - req: express.Request) { - return req.query[Constants.REDIRECT_QUERY_PARAM] != "undefined" - ? req.query[Constants.REDIRECT_QUERY_PARAM] - : undefined; -} - -function redirectToSecondFactorPage( - req: express.Request, - res: express.Response) { - - const redirectUrl = getRedirectParam(req); - if (!redirectUrl) - res.redirect(Endpoints.SECOND_FACTOR_GET); - else - res.redirect( - Util.format("%s?%s=%s", - Endpoints.SECOND_FACTOR_GET, - Constants.REDIRECT_QUERY_PARAM, - redirectUrl)); -} - -function redirectToService( - req: express.Request, - res: express.Response, - redirector: SafeRedirector) { - const redirectUrl = getRedirectParam(req); - if (!redirectUrl) { - res.redirect(Endpoints.LOGGED_IN); - } else { - redirector.redirectOrElse(res, redirectUrl, Endpoints.LOGGED_IN); - } -} - -function renderFirstFactor( - res: express.Response) { - - res.render("firstfactor", { - first_factor_post_endpoint: Endpoints.FIRST_FACTOR_POST, - reset_password_request_endpoint: Endpoints.RESET_PASSWORD_REQUEST_GET - }); -} - -export default function ( - vars: ServerVariables) { - - const redirector = new SafeRedirector(vars.config.session.domain); - return function (req: express.Request, res: express.Response): BluebirdPromise { - return new BluebirdPromise(function (resolve, reject) { - const authSession = AuthenticationSessionHandler.get(req, vars.logger); - if (authSession.authentication_level == Level.ONE_FACTOR) { - redirectToSecondFactorPage(req, res); - } else if (authSession.authentication_level == Level.TWO_FACTOR) { - redirectToService(req, res, redirector); - } else { - renderFirstFactor(res); - } - resolve(); - }); - }; -} diff --git a/server/src/lib/routes/firstfactor/post.spec.ts b/server/src/lib/routes/firstfactor/post.spec.ts index e1d078cdd..71244e5ce 100644 --- a/server/src/lib/routes/firstfactor/post.spec.ts +++ b/server/src/lib/routes/firstfactor/post.spec.ts @@ -6,11 +6,10 @@ import FirstFactorPost = require("./post"); import exceptions = require("../../Exceptions"); import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; import { AuthenticationSession } from "../../../../types/AuthenticationSession"; -import Endpoints = require("../../../../../shared/api"); -import AuthenticationRegulatorMock = require("../../regulation/RegulatorStub.spec"); import ExpressMock = require("../../stubs/express.spec"); import { ServerVariablesMock, ServerVariablesMockBuilder } from "../../ServerVariablesMockBuilder.spec"; import { ServerVariables } from "../../ServerVariables"; +import AuthenticationError from "../../authentication/AuthenticationError"; describe("routes/firstfactor/post", function () { let req: ExpressMock.RequestMock; @@ -73,7 +72,7 @@ describe("routes/firstfactor/post", function () { emails: emails, groups: groups })); - req.body.keepMeLoggedIn = "true"; + req.body.keepMeLoggedIn = true; return FirstFactorPost.default(vars)(req as any, res as any); }); @@ -108,14 +107,14 @@ describe("routes/firstfactor/post", function () { it("should return error message when LDAP authenticator throws", function () { mocks.usersDatabase.checkUserPasswordStub.withArgs("username", "password") - .returns(BluebirdPromise.reject(new exceptions.LdapBindError("Bad credentials"))); + .returns(BluebirdPromise.reject(new AuthenticationError("Bad credentials"))); return FirstFactorPost.default(vars)(req as any, res as any) .then(function () { Assert.equal(res.status.getCall(0).args[0], 200); Assert.equal(mocks.regulator.markStub.getCall(0).args[0], "username"); Assert.deepEqual(res.send.getCall(0).args[0], { - error: "Operation failed." + error: "Authentication failed. Please check your credentials." }); }); }); @@ -127,7 +126,7 @@ describe("routes/firstfactor/post", function () { .then(function () { Assert.equal(res.status.getCall(0).args[0], 200); Assert.deepEqual(res.send.getCall(0).args[0], { - error: "Operation failed." + error: "Authentication failed. Please check your credentials." }); }); }); diff --git a/server/src/lib/routes/firstfactor/post.ts b/server/src/lib/routes/firstfactor/post.ts index 565681d6a..7f252e6c2 100644 --- a/server/src/lib/routes/firstfactor/post.ts +++ b/server/src/lib/routes/firstfactor/post.ts @@ -1,26 +1,26 @@ - -import Exceptions = require("../../Exceptions"); +import * as ObjectPath from "object-path"; import BluebirdPromise = require("bluebird"); import express = require("express"); -import Endpoint = require("../../../../../shared/api"); import ErrorReplies = require("../../ErrorReplies"); import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; -import Constants = require("../../../../../shared/constants"); import UserMessages = require("../../../../../shared/UserMessages"); import { ServerVariables } from "../../ServerVariables"; import { AuthenticationSession } from "../../../../types/AuthenticationSession"; import { GroupsAndEmails } from "../../authentication/backends/GroupsAndEmails"; -import { Level as AuthenticationLevel } from "../../authentication/Level"; +import { Level } from "../../authentication/Level"; import { Level as AuthorizationLevel } from "../../authorization/Level"; -import { URLDecomposer } from "../../utils/URLDecomposer"; +import { BelongToDomain } from "../../../../../shared/BelongToDomain"; +import { URLDecomposer } from "../..//utils/URLDecomposer"; +import { Object } from "../../../lib/authorization/Object"; +import { Subject } from "../../../lib/authorization/Subject"; +import AuthenticationError from "../../../lib/authentication/AuthenticationError"; export default function (vars: ServerVariables) { return function (req: express.Request, res: express.Response) : BluebirdPromise { const username: string = req.body.username; const password: string = req.body.password; - const keepMeLoggedIn: boolean = req.body.keepMeLoggedIn && - req.body.keepMeLoggedIn === "true"; + const keepMeLoggedIn: boolean = req.body.keepMeLoggedIn; let authSession: AuthenticationSession; if (keepMeLoggedIn) { @@ -48,20 +48,10 @@ export default function (vars: ServerVariables) { JSON.stringify(groupsAndEmails)); authSession.userid = username; authSession.keep_me_logged_in = keepMeLoggedIn; - authSession.authentication_level = AuthenticationLevel.ONE_FACTOR; - const redirectUrl: string = req.query[Constants.REDIRECT_QUERY_PARAM] !== "undefined" - // Fuck, don't know why it is a string! - ? req.query[Constants.REDIRECT_QUERY_PARAM] - : ""; + authSession.authentication_level = Level.ONE_FACTOR; const emails: string[] = groupsAndEmails.emails; const groups: string[] = groupsAndEmails.groups; - const decomposition = URLDecomposer.fromUrl(redirectUrl); - const authorizationLevel = (decomposition) - ? vars.authorizer.authorization( - {domain: decomposition.domain, resource: decomposition.path}, - {user: username, groups: groups}) - : AuthorizationLevel.TWO_FACTOR; if (emails.length > 0) authSession.email = emails[0]; @@ -69,33 +59,45 @@ export default function (vars: ServerVariables) { vars.logger.debug(req, "Mark successful authentication to regulator."); vars.regulator.mark(username, true); + }) + .then(function() { + const targetUrl = ObjectPath.get(req, "headers.x-target-url", undefined); - if (authorizationLevel <= AuthorizationLevel.ONE_FACTOR) { - let newRedirectionUrl: string = redirectUrl; - if (!newRedirectionUrl) - newRedirectionUrl = Endpoint.LOGGED_IN; - res.send({ - redirect: newRedirectionUrl - }); - vars.logger.debug(req, "Redirect to '%s'", redirectUrl); + if (!targetUrl) { + res.status(204); + res.send(); + return BluebirdPromise.resolve(); } - else { - let newRedirectUrl = Endpoint.SECOND_FACTOR_GET; - if (redirectUrl) { - newRedirectUrl += "?" + Constants.REDIRECT_QUERY_PARAM + "=" - + redirectUrl; + + if (BelongToDomain(targetUrl, vars.config.session.domain)) { + const resource = URLDecomposer.fromUrl(targetUrl); + const resObject: Object = { + domain: resource.domain, + resource: resource.path, + }; + + const subject: Subject = { + user: authSession.userid, + groups: authSession.groups + }; + + const authorizationLevel = vars.authorizer.authorization(resObject, subject); + if (authorizationLevel <= AuthorizationLevel.ONE_FACTOR) { + res.json({ + redirect: targetUrl + }); + return BluebirdPromise.resolve(); } - vars.logger.debug(req, "Redirect to '%s'", newRedirectUrl); - res.send({ - redirect: newRedirectUrl - }); } + + res.status(204); + res.send(); return BluebirdPromise.resolve(); }) - .catch(Exceptions.LdapBindError, function (err: Error) { + .catch(AuthenticationError, function (err: Error) { vars.regulator.mark(username, false); - return ErrorReplies.replyWithError200(req, res, vars.logger, UserMessages.OPERATION_FAILED)(err); + return ErrorReplies.replyWithError200(req, res, vars.logger, UserMessages.AUTHENTICATION_FAILED)(err); }) - .catch(ErrorReplies.replyWithError200(req, res, vars.logger, UserMessages.OPERATION_FAILED)); + .catch(ErrorReplies.replyWithError200(req, res, vars.logger, UserMessages.AUTHENTICATION_FAILED)); }; -} \ No newline at end of file +} diff --git a/server/src/lib/routes/loggedin/get.ts b/server/src/lib/routes/loggedin/get.ts deleted file mode 100644 index 283a041b1..000000000 --- a/server/src/lib/routes/loggedin/get.ts +++ /dev/null @@ -1,23 +0,0 @@ -import Express = require("express"); -import Endpoints = require("../../../../../shared/api"); -import BluebirdPromise = require("bluebird"); -import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; -import { ServerVariables } from "../../ServerVariables"; -import ErrorReplies = require("../../ErrorReplies"); - -export default function (vars: ServerVariables) { - function handler(req: Express.Request, res: Express.Response): BluebirdPromise { - return new BluebirdPromise(function (resolve, reject) { - const authSession = AuthenticationSessionHandler.get(req, vars.logger); - res.render("already-logged-in", { - logout_endpoint: Endpoints.LOGOUT_GET, - username: authSession.userid, - redirection_url: vars.config.default_redirection_url - }); - resolve(); - }) - .catch(ErrorReplies.replyWithError401(req, res, vars.logger)); - } - - return handler; -} diff --git a/server/src/lib/routes/logout/get.ts b/server/src/lib/routes/logout/post.ts similarity index 100% rename from server/src/lib/routes/logout/get.ts rename to server/src/lib/routes/logout/post.ts diff --git a/server/src/lib/routes/password-reset/identity/PasswordResetHandler.spec.ts b/server/src/lib/routes/password-reset/identity/PasswordResetHandler.spec.ts index ac6a41754..cd3a5775f 100644 --- a/server/src/lib/routes/password-reset/identity/PasswordResetHandler.spec.ts +++ b/server/src/lib/routes/password-reset/identity/PasswordResetHandler.spec.ts @@ -1,10 +1,6 @@ import PasswordResetHandler from "./PasswordResetHandler"; -import { UserDataStore } from "../../../storage/UserDataStore"; -import Sinon = require("sinon"); -import winston = require("winston"); -import assert = require("assert"); import BluebirdPromise = require("bluebird"); import ExpressMock = require("../../../stubs/express.spec"); import { ServerVariablesMock, ServerVariablesMockBuilder } @@ -13,15 +9,14 @@ import { ServerVariables } from "../../../ServerVariables"; describe("routes/password-reset/identity/PasswordResetHandler", function () { let req: ExpressMock.RequestMock; - let res: ExpressMock.ResponseMock; let mocks: ServerVariablesMock; let vars: ServerVariables; beforeEach(function () { req = { originalUrl: "/non-api/xxx", - query: { - userid: "user" + body: { + username: "user" }, session: { auth: { @@ -36,10 +31,6 @@ describe("routes/password-reset/identity/PasswordResetHandler", function () { } }; - const options = { - inMemoryOnly: true - }; - const s = ServerVariablesMockBuilder.build(); mocks = s.mocks; vars = s.variables; @@ -52,12 +43,11 @@ describe("routes/password-reset/identity/PasswordResetHandler", function () { .returns(BluebirdPromise.resolve({})); mocks.userDataStore.consumeIdentityValidationTokenStub .returns(BluebirdPromise.resolve({})); - res = ExpressMock.ResponseMock(); }); describe("test reset password identity pre check", () => { it("should fail when no userid is provided", function () { - req.query.userid = undefined; + req.body.username = undefined; const handler = new PasswordResetHandler(vars.logger, vars.usersDatabase); return handler.preValidationInit(req as any) diff --git a/server/src/lib/routes/password-reset/identity/PasswordResetHandler.ts b/server/src/lib/routes/password-reset/identity/PasswordResetHandler.ts index 42ae92cda..c32815755 100644 --- a/server/src/lib/routes/password-reset/identity/PasswordResetHandler.ts +++ b/server/src/lib/routes/password-reset/identity/PasswordResetHandler.ts @@ -5,13 +5,10 @@ import objectPath = require("object-path"); import exceptions = require("../../../Exceptions"); import { Identity } from "../../../../../types/Identity"; import { IdentityValidable } from "../../../IdentityValidable"; -import { PRE_VALIDATION_TEMPLATE } from "../../../IdentityCheckPreValidationTemplate"; import Constants = require("../constants"); import { IRequestLogger } from "../../../logging/IRequestLogger"; import { IUsersDatabase } from "../../../authentication/backends/IUsersDatabase"; -export const TEMPLATE_NAME = "password-reset-form"; - export default class PasswordResetHandler implements IdentityValidable { private logger: IRequestLogger; private usersDatabase: IUsersDatabase; @@ -28,14 +25,14 @@ export default class PasswordResetHandler implements IdentityValidable { preValidationInit(req: express.Request): BluebirdPromise { const that = this; const userid: string = - objectPath.get(req, "query.userid"); + objectPath.get(req, "body.username"); return BluebirdPromise.resolve() .then(function () { that.logger.debug(req, "User '%s' requested a password reset", userid); - if (!userid) + if (!userid) { return BluebirdPromise.reject( new exceptions.AccessDeniedError("No user id provided")); - + } return that.usersDatabase.getEmails(userid); }) .then(function (emails: string[]) { @@ -52,7 +49,8 @@ export default class PasswordResetHandler implements IdentityValidable { } preValidationResponse(req: express.Request, res: express.Response) { - res.render(PRE_VALIDATION_TEMPLATE); + res.status(204); + res.send(); } postValidationInit(req: express.Request) { @@ -60,10 +58,15 @@ export default class PasswordResetHandler implements IdentityValidable { } postValidationResponse(req: express.Request, res: express.Response) { - res.render(TEMPLATE_NAME); + res.status(204); + res.send(); } mailSubject(): string { return "Reset your password"; } + + destinationPath(): string { + return "/reset-password"; + } } \ No newline at end of file diff --git a/server/src/lib/routes/password-reset/request/get.ts b/server/src/lib/routes/password-reset/request/get.ts deleted file mode 100644 index 8f3ae2b4b..000000000 --- a/server/src/lib/routes/password-reset/request/get.ts +++ /dev/null @@ -1,13 +0,0 @@ - -import express = require("express"); -import BluebirdPromise = require("bluebird"); -import objectPath = require("object-path"); -import exceptions = require("../../../Exceptions"); - -import Constants = require("./../constants"); - -const TEMPLATE_NAME = "password-reset-request"; - -export default function (req: express.Request, res: express.Response) { - res.render(TEMPLATE_NAME); -} \ No newline at end of file diff --git a/server/src/lib/routes/redirect/post.ts b/server/src/lib/routes/redirect/post.ts new file mode 100644 index 000000000..ab001a9b6 --- /dev/null +++ b/server/src/lib/routes/redirect/post.ts @@ -0,0 +1,31 @@ +import * as Express from "express"; +import { ServerVariables } from "../../ServerVariables"; +import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; +import { Level } from "../../authentication/Level"; +import * as URLParse from "url-parse"; + +export default function (vars: ServerVariables) { + return function (req: Express.Request, res: Express.Response) { + if (!req.body.url) { + res.status(400); + vars.logger.error(req, "Provide url for verification to be done."); + return; + } + + const authSession = AuthenticationSessionHandler.get(req, vars.logger); + const url = new URLParse(req.body.url); + + const urlInDomain = url.hostname.endsWith(vars.config.session.domain); + vars.logger.debug(req, "Check domain %s is in url %s.", vars.config.session.domain, url.hostname); + const sufficientPermissions = authSession.authentication_level >= Level.TWO_FACTOR; + + vars.logger.debug(req, "Check that protocol %s is HTTPS.", url.protocol); + const protocolIsHttps = url.protocol === "https:"; + + if (sufficientPermissions && urlInDomain && protocolIsHttps) { + res.send("OK"); + return; + } + res.send("NOK"); + }; +} diff --git a/server/src/lib/routes/secondfactor/get.spec.ts b/server/src/lib/routes/secondfactor/get.spec.ts deleted file mode 100644 index 6c77e1f69..000000000 --- a/server/src/lib/routes/secondfactor/get.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -import SecondFactorGet from "./get"; -import { ServerVariablesMockBuilder, ServerVariablesMock } - from "../../ServerVariablesMockBuilder.spec"; -import { ServerVariables } from "../../ServerVariables"; -import Sinon = require("sinon"); -import ExpressMock = require("../../stubs/express.spec"); -import Assert = require("assert"); -import Endpoints = require("../../../../../shared/api"); -import BluebirdPromise = require("bluebird"); - -describe("routes/secondfactor/get", function () { - let mocks: ServerVariablesMock; - let vars: ServerVariables; - let req: ExpressMock.RequestMock; - let res: ExpressMock.ResponseMock; - - beforeEach(function () { - const s = ServerVariablesMockBuilder.build(); - mocks = s.mocks; - vars = s.variables; - - req = ExpressMock.RequestMock(); - res = ExpressMock.ResponseMock(); - - req.session = { - auth: { - userid: "user", - first_factor: true, - second_factor: false - } - }; - }); - - describe("test rendering", function () { - it("should render second factor page", function () { - req.session.auth.second_factor = false; - return SecondFactorGet(vars)(req as any, res as any) - .then(function () { - Assert(res.render.calledWith("secondfactor")); - return BluebirdPromise.resolve(); - }); - }); - }); -}); \ No newline at end of file diff --git a/server/src/lib/routes/secondfactor/get.ts b/server/src/lib/routes/secondfactor/get.ts deleted file mode 100644 index 9f6deb4c6..000000000 --- a/server/src/lib/routes/secondfactor/get.ts +++ /dev/null @@ -1,28 +0,0 @@ - -import Express = require("express"); -import Endpoints = require("../../../../../shared/api"); -import BluebirdPromise = require("bluebird"); -import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; -import { ServerVariables } from "../../ServerVariables"; - -const TEMPLATE_NAME = "secondfactor"; - -export default function (vars: ServerVariables) { - function handler(req: Express.Request, res: Express.Response) - : BluebirdPromise { - - return new BluebirdPromise(function (resolve, reject) { - const authSession = AuthenticationSessionHandler.get(req, vars.logger); - - res.render(TEMPLATE_NAME, { - username: authSession.userid, - totp_identity_start_endpoint: - Endpoints.SECOND_FACTOR_TOTP_IDENTITY_START_GET, - u2f_identity_start_endpoint: - Endpoints.SECOND_FACTOR_U2F_IDENTITY_START_GET - }); - resolve(); - }); - } - return handler; -} diff --git a/server/src/lib/routes/secondfactor/redirect.ts b/server/src/lib/routes/secondfactor/redirect.ts index 5d84d9ebf..75132f960 100644 --- a/server/src/lib/routes/secondfactor/redirect.ts +++ b/server/src/lib/routes/secondfactor/redirect.ts @@ -1,13 +1,10 @@ import express = require("express"); -import objectPath = require("object-path"); -import Endpoints = require("../../../../../shared/api"); import { ServerVariables } from "../../ServerVariables"; import BluebirdPromise = require("bluebird"); import ErrorReplies = require("../../ErrorReplies"); import UserMessages = require("../../../../../shared/UserMessages"); import { RedirectionMessage } from "../../../../../shared/RedirectionMessage"; -import Constants = require("../../../../../shared/constants"); export default function (vars: ServerVariables) { return function (req: express.Request, res: express.Response) diff --git a/server/src/lib/routes/secondfactor/totp/identity/RegistrationHandler.ts b/server/src/lib/routes/secondfactor/totp/identity/RegistrationHandler.ts index b39b6d045..e7d67146f 100644 --- a/server/src/lib/routes/secondfactor/totp/identity/RegistrationHandler.ts +++ b/server/src/lib/routes/secondfactor/totp/identity/RegistrationHandler.ts @@ -1,13 +1,10 @@ import express = require("express"); import BluebirdPromise = require("bluebird"); -import objectPath = require("object-path"); import { Identity } from "../../../../../../types/Identity"; import { IdentityValidable } from "../../../../IdentityValidable"; -import { PRE_VALIDATION_TEMPLATE } from "../../../../IdentityCheckPreValidationTemplate"; import Constants = require("../constants"); -import Endpoints = require("../../../../../../../shared/api"); import ErrorReplies = require("../../../../ErrorReplies"); import { AuthenticationSessionHandler } from "../../../../AuthenticationSessionHandler"; import UserMessages = require("../../../../../../../shared/UserMessages"); @@ -66,7 +63,8 @@ export default class RegistrationHandler implements IdentityValidable { } preValidationResponse(req: express.Request, res: express.Response) { - res.render(PRE_VALIDATION_TEMPLATE); + res.status(204); + res.send(); } postValidationInit(req: express.Request) { @@ -97,10 +95,9 @@ export default class RegistrationHandler implements IdentityValidable { .then(function () { AuthenticationSessionHandler.reset(req); - res.render(Constants.TEMPLATE_NAME, { + res.json({ base32_secret: secret.base32, otpauth_url: secret.otpauth_url, - login_endpoint: Endpoints.FIRST_FACTOR_GET }); }) .catch(ErrorReplies.replyWithError200(req, res, that.logger, UserMessages.OPERATION_FAILED)); @@ -109,4 +106,8 @@ export default class RegistrationHandler implements IdentityValidable { mailSubject(): string { return "Set up Authelia's one-time password"; } + + destinationPath(): string { + return "/one-time-password-registration"; + } } \ No newline at end of file diff --git a/server/src/lib/routes/secondfactor/totp/sign/post.spec.ts b/server/src/lib/routes/secondfactor/totp/sign/post.spec.ts index 70a20d39d..d0c29b70b 100644 --- a/server/src/lib/routes/secondfactor/totp/sign/post.spec.ts +++ b/server/src/lib/routes/secondfactor/totp/sign/post.spec.ts @@ -67,7 +67,7 @@ describe("routes/secondfactor/totp/sign/post", function () { Assert.notEqual(authSession.authentication_level, Level.TWO_FACTOR); Assert.equal(res.status.getCall(0).args[0], 200); Assert.deepEqual(res.send.getCall(0).args[0], { - error: "Operation failed." + error: "Authentication failed. Have you already registered your secret?" }); return BluebirdPromise.resolve(); }); diff --git a/server/src/lib/routes/secondfactor/totp/sign/post.ts b/server/src/lib/routes/secondfactor/totp/sign/post.ts index 34a276d12..0f3797405 100644 --- a/server/src/lib/routes/secondfactor/totp/sign/post.ts +++ b/server/src/lib/routes/secondfactor/totp/sign/post.ts @@ -2,7 +2,6 @@ import Bluebird = require("bluebird"); import Express = require("express"); import { TOTPSecretDocument } from "../../../../storage/TOTPSecretDocument"; -import Endpoints = require("../../../../../../../shared/api"); import Redirect from "../../redirect"; import ErrorReplies = require("../../../../ErrorReplies"); import { AuthenticationSessionHandler } from "../../../../AuthenticationSessionHandler"; @@ -11,8 +10,6 @@ import UserMessages = require("../../../../../../../shared/UserMessages"); import { ServerVariables } from "../../../../ServerVariables"; import { Level } from "../../../../authentication/Level"; -const UNAUTHORIZED_MESSAGE = "Unauthorized access"; - export default function (vars: ServerVariables) { function handler(req: Express.Request, res: Express.Response): Bluebird { let authSession: AuthenticationSession; @@ -27,8 +24,9 @@ export default function (vars: ServerVariables) { return vars.userDataStore.retrieveTOTPSecret(authSession.userid); }) .then(function (doc: TOTPSecretDocument) { - if (!vars.totpHandler.validate(token, doc.secret.base32)) + if (!vars.totpHandler.validate(token, doc.secret.base32)) { return Bluebird.reject(new Error("Invalid TOTP token.")); + } vars.logger.debug(req, "TOTP validation succeeded."); authSession.authentication_level = Level.TWO_FACTOR; @@ -36,7 +34,7 @@ export default function (vars: ServerVariables) { return Bluebird.resolve(); }) .catch(ErrorReplies.replyWithError200(req, res, vars.logger, - UserMessages.OPERATION_FAILED)); + UserMessages.AUTHENTICATION_TOTP_FAILED)); } return handler; } diff --git a/server/src/lib/routes/secondfactor/u2f/identity/RegistrationHandler.ts b/server/src/lib/routes/secondfactor/u2f/identity/RegistrationHandler.ts index bc4713c77..c790832b8 100644 --- a/server/src/lib/routes/secondfactor/u2f/identity/RegistrationHandler.ts +++ b/server/src/lib/routes/secondfactor/u2f/identity/RegistrationHandler.ts @@ -1,11 +1,9 @@ import BluebirdPromise = require("bluebird"); import express = require("express"); -import objectPath = require("object-path"); import { IdentityValidable } from "../../../../IdentityValidable"; import { Identity } from "../../../../../../types/Identity"; -import { PRE_VALIDATION_TEMPLATE } from "../../../../IdentityCheckPreValidationTemplate"; import FirstFactorValidator = require("../../../../FirstFactorValidator"); import { AuthenticationSessionHandler } from "../../../../AuthenticationSessionHandler"; import { IRequestLogger } from "../../../../logging/IRequestLogger"; @@ -13,8 +11,6 @@ import { IRequestLogger } from "../../../../logging/IRequestLogger"; const CHALLENGE = "u2f-register"; const MAIL_SUBJECT = "Register your security key with Authelia"; -const POST_VALIDATION_TEMPLATE_NAME = "u2f-register"; - export default class RegistrationHandler implements IdentityValidable { private logger: IRequestLogger; @@ -55,7 +51,8 @@ export default class RegistrationHandler implements IdentityValidable { } preValidationResponse(req: express.Request, res: express.Response) { - res.render(PRE_VALIDATION_TEMPLATE); + res.status(204); + res.send(); } postValidationInit(req: express.Request) { @@ -63,11 +60,16 @@ export default class RegistrationHandler implements IdentityValidable { } postValidationResponse(req: express.Request, res: express.Response) { - res.render(POST_VALIDATION_TEMPLATE_NAME); + res.status(204); + res.send(); } mailSubject(): string { return MAIL_SUBJECT; } + + destinationPath(): string { + return "/security-key-registration"; + } } diff --git a/server/src/lib/routes/secondfactor/u2f/register/post.ts b/server/src/lib/routes/secondfactor/u2f/register/post.ts index 7296ccbe5..c7ac656df 100644 --- a/server/src/lib/routes/secondfactor/u2f/register/post.ts +++ b/server/src/lib/routes/secondfactor/u2f/register/post.ts @@ -1,5 +1,3 @@ - -import { UserDataStore } from "../../../../storage/UserDataStore"; import objectPath = require("object-path"); import u2f_common = require("../U2FCommon"); import BluebirdPromise = require("bluebird"); diff --git a/server/src/lib/routes/secondfactor/u2f/register_request/get.spec.ts b/server/src/lib/routes/secondfactor/u2f/register_request/get.spec.ts index a207c9109..00d5ae5e3 100644 --- a/server/src/lib/routes/secondfactor/u2f/register_request/get.spec.ts +++ b/server/src/lib/routes/secondfactor/u2f/register_request/get.spec.ts @@ -36,10 +36,6 @@ describe("routes/secondfactor/u2f/register_request/get", function () { mocks = s.mocks; vars = s.variables; - const options = { - inMemoryOnly: true - }; - mocks.userDataStore.saveU2FRegistrationStub.returns(BluebirdPromise.resolve({})); mocks.userDataStore.retrieveU2FRegistrationStub.returns(BluebirdPromise.resolve({})); @@ -63,7 +59,6 @@ describe("routes/secondfactor/u2f/register_request/get", function () { it("should return internal error on registration request", function () { res.send = sinon.spy(); - const user_key_container = {}; mocks.u2f.requestStub.returns(BluebirdPromise.reject("Internal error")); return U2FRegisterRequestGet.default(vars)(req as any, res as any) .then(function () { @@ -78,7 +73,10 @@ describe("routes/secondfactor/u2f/register_request/get", function () { req.session.auth.identity_check = undefined; return U2FRegisterRequestGet.default(vars)(req as any, res as any) .then(function () { - Assert.equal(403, res.status.getCall(0).args[0]); + Assert.equal(200, res.status.getCall(0).args[0]); + Assert.deepEqual(res.send.getCall(0).args[0], { + error: "Operation failed." + }); }); }); }); diff --git a/server/src/lib/routes/secondfactor/u2f/register_request/get.ts b/server/src/lib/routes/secondfactor/u2f/register_request/get.ts index f611af933..ecac24f4a 100644 --- a/server/src/lib/routes/secondfactor/u2f/register_request/get.ts +++ b/server/src/lib/routes/secondfactor/u2f/register_request/get.ts @@ -1,7 +1,4 @@ -import { UserDataStore } from "../../../../storage/UserDataStore"; - -import objectPath = require("object-path"); import u2f_common = require("../U2FCommon"); import BluebirdPromise = require("bluebird"); import express = require("express"); @@ -21,8 +18,6 @@ export default function (vars: ServerVariables) { authSession = AuthenticationSessionHandler.get(req, vars.logger); if (!authSession.identity_check || authSession.identity_check.challenge != "u2f-register") { - res.status(403); - res.send(); return reject(new Error("Bad challenge.")); } diff --git a/server/src/lib/routes/secondfactor/u2f/sign/post.spec.ts b/server/src/lib/routes/secondfactor/u2f/sign/post.spec.ts index 9b137e66d..3473bf3eb 100644 --- a/server/src/lib/routes/secondfactor/u2f/sign/post.spec.ts +++ b/server/src/lib/routes/secondfactor/u2f/sign/post.spec.ts @@ -4,12 +4,9 @@ import BluebirdPromise = require("bluebird"); import Assert = require("assert"); import U2FSignPost = require("./post"); import { ServerVariables } from "../../../../ServerVariables"; -import winston = require("winston"); - +import UserMessages = require("../../../../../../../shared/UserMessages"); import { ServerVariablesMockBuilder, ServerVariablesMock } from "../../../../ServerVariablesMockBuilder.spec"; import ExpressMock = require("../../../../stubs/express.spec"); -import U2FMock = require("../../../../stubs/u2f.spec"); -import U2f = require("u2f"); import { Level } from "../../../../authentication/Level"; describe("routes/secondfactor/u2f/sign/post", function () { @@ -40,10 +37,6 @@ describe("routes/secondfactor/u2f/sign/post", function () { req.headers = {}; req.headers.host = "localhost"; - const options = { - inMemoryOnly: true - }; - res = ExpressMock.ResponseMock(); res.send = sinon.spy(); res.json = sinon.spy(); @@ -94,7 +87,7 @@ describe("routes/secondfactor/u2f/sign/post", function () { .then(function () { Assert.equal(res.status.getCall(0).args[0], 200); Assert.deepEqual(res.send.getCall(0).args[0], - { error: "Operation failed." }); + { error: UserMessages.OPERATION_FAILED }); }); }); }); diff --git a/server/src/lib/routes/secondfactor/u2f/sign/post.ts b/server/src/lib/routes/secondfactor/u2f/sign/post.ts index 7ee711c2c..69eda0a39 100644 --- a/server/src/lib/routes/secondfactor/u2f/sign/post.ts +++ b/server/src/lib/routes/secondfactor/u2f/sign/post.ts @@ -1,13 +1,9 @@ - import objectPath = require("object-path"); import u2f_common = require("../U2FCommon"); import BluebirdPromise = require("bluebird"); import express = require("express"); -import { UserDataStore } from "../../../../storage/UserDataStore"; import { U2FRegistrationDocument } from "../../../../storage/U2FRegistrationDocument"; -import { Winston } from "../../../../../../types/Dependencies"; import U2f = require("u2f"); -import exceptions = require("../../../../Exceptions"); import redirect from "../../redirect"; import ErrorReplies = require("../../../../ErrorReplies"); import { ServerVariables } from "../../../../ServerVariables"; diff --git a/server/src/lib/routes/state/get.ts b/server/src/lib/routes/state/get.ts new file mode 100644 index 000000000..5c3fce6df --- /dev/null +++ b/server/src/lib/routes/state/get.ts @@ -0,0 +1,18 @@ +import * as Express from "express"; +import * as Bluebird from "bluebird"; +import { ServerVariables } from "../../ServerVariables"; +import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; + +export default function (vars: ServerVariables) { + return function (req: Express.Request, res: Express.Response): Bluebird { + return new Bluebird(function (resolve, reject) { + const authSession = AuthenticationSessionHandler.get(req, vars.logger); + res.json({ + username: authSession.userid, + authentication_level: authSession.authentication_level, + default_redirection_url: vars.config.default_redirection_url, + }); + resolve(); + }); + }; +} diff --git a/server/src/lib/routes/verify/access_control.ts b/server/src/lib/routes/verify/access_control.ts index 136239aeb..cbf97ab38 100644 --- a/server/src/lib/routes/verify/access_control.ts +++ b/server/src/lib/routes/verify/access_control.ts @@ -6,7 +6,6 @@ import Exceptions = require("../../Exceptions"); import { Level as AuthorizationLevel } from "../../authorization/Level"; import { Level as AuthenticationLevel } from "../../authentication/Level"; -import { AuthenticationSessionHandler } from "../../AuthenticationSessionHandler"; import { ServerVariables } from "../../ServerVariables"; function isAuthorized( diff --git a/server/src/lib/routes/verify/get.ts b/server/src/lib/routes/verify/get.ts index f73861696..e5fe87fc5 100644 --- a/server/src/lib/routes/verify/get.ts +++ b/server/src/lib/routes/verify/get.ts @@ -78,6 +78,8 @@ export default function (vars: ServerVariables) { ErrorReplies.replyWithError401(req, res, vars.logger)) // The user is not yet authenticated -> 401 .catch((err) => { + // This redirect parameter is used in Kubernetes to annotate the ingress with + // the url to the authentication portal. const redirectUrl = getRedirectParam(req); if (redirectUrl) { ErrorReplies.redirectTo(redirectUrl, req, res, vars.logger)(err); diff --git a/server/src/lib/routes/verify/get_session_cookie.ts b/server/src/lib/routes/verify/get_session_cookie.ts index 070344812..f703b9441 100644 --- a/server/src/lib/routes/verify/get_session_cookie.ts +++ b/server/src/lib/routes/verify/get_session_cookie.ts @@ -56,8 +56,6 @@ export default function (req: Express.Request, res: Express.Response, const originalUrl = ObjectPath.get( req, "headers.x-original-url"); - const originalUri = - ObjectPath.get(req, "headers.x-original-uri"); const d = URLDecomposer.fromUrl(originalUrl); vars.logger.debug(req, "domain=%s, path=%s, user=%s, groups=%s", d.domain, diff --git a/server/src/lib/utils/HashGenerator.ts b/server/src/lib/utils/HashGenerator.ts index e67de32b7..a88a21e48 100644 --- a/server/src/lib/utils/HashGenerator.ts +++ b/server/src/lib/utils/HashGenerator.ts @@ -8,7 +8,6 @@ export class HashGenerator { password: string, rounds: number = 500000, salt?: string): BluebirdPromise { - const saltSize = 16; // $6 means SHA512 const _salt = Util.format("$6$rounds=%d$%s", rounds, (salt) ? salt : RandomString.generate(16)); diff --git a/server/src/lib/utils/SafeRedirection.ts b/server/src/lib/utils/SafeRedirection.ts index 9e6a32e0c..0a2e70488 100644 --- a/server/src/lib/utils/SafeRedirection.ts +++ b/server/src/lib/utils/SafeRedirection.ts @@ -1,5 +1,4 @@ import Express = require("express"); -import { DomainExtractor } from "../../../../shared/DomainExtractor"; import { BelongToDomain } from "../../../../shared/BelongToDomain"; diff --git a/server/src/lib/utils/URLDecomposer.ts b/server/src/lib/utils/URLDecomposer.ts index 9bdf2e9d2..e86d64fcb 100644 --- a/server/src/lib/utils/URLDecomposer.ts +++ b/server/src/lib/utils/URLDecomposer.ts @@ -1,3 +1,4 @@ +// TODO: replace this decompose by third party library. export class URLDecomposer { static fromUrl(url: string): {domain: string, path: string} { if (!url) return; diff --git a/server/src/lib/web_server/Configurator.ts b/server/src/lib/web_server/Configurator.ts index 6e404874a..be2d2acad 100644 --- a/server/src/lib/web_server/Configurator.ts +++ b/server/src/lib/web_server/Configurator.ts @@ -15,16 +15,12 @@ const addRequestId = require("express-request-id")(); // Constants const TRUST_PROXY = "trust proxy"; const X_POWERED_BY = "x-powered-by"; -const VIEWS = "views"; -const VIEW_ENGINE = "view engine"; -const PUG = "pug"; export class Configurator { static configure(config: Configuration, app: Express.Application, vars: ServerVariables, deps: GlobalDependencies): void { - const viewsDirectory = Path.resolve(__dirname, "../../views"); const publicHtmlDirectory = Path.resolve(__dirname, "../../public_html"); const expressSessionOptions = SessionConfigurationBuilder.build(config, deps); @@ -39,9 +35,6 @@ export class Configurator { app.enable(TRUST_PROXY); app.use(Helmet()); - app.set(VIEWS, viewsDirectory); - app.set(VIEW_ENGINE, PUG); - RestApi.setup(app, vars); } } \ No newline at end of file diff --git a/server/src/lib/web_server/RestApi.ts b/server/src/lib/web_server/RestApi.ts index 9144a15b9..de17f3655 100644 --- a/server/src/lib/web_server/RestApi.ts +++ b/server/src/lib/web_server/RestApi.ts @@ -1,10 +1,9 @@ import Express = require("express"); -import FirstFactorGet = require("../routes/firstfactor/get"); -import SecondFactorGet = require("../routes/secondfactor/get"); - import FirstFactorPost = require("../routes/firstfactor/post"); -import LogoutGet = require("../routes/logout/get"); +import LogoutPost from "../routes/logout/post"; +import StateGet from "../routes/state/get"; +import RedirectPost from "../routes/redirect/post"; import VerifyGet = require("../routes/verify/get"); import TOTPSignGet = require("../routes/secondfactor/totp/sign/post"); @@ -21,13 +20,6 @@ import U2FRegisterPost = require("../routes/secondfactor/u2f/register/post"); import U2FRegisterRequestGet = require("../routes/secondfactor/u2f/register_request/get"); import ResetPasswordFormPost = require("../routes/password-reset/form/post"); -import ResetPasswordRequestPost = require("../routes/password-reset/request/get"); - -import Error401Get = require("../routes/error/401/get"); -import Error403Get = require("../routes/error/403/get"); -import Error404Get = require("../routes/error/404/get"); - -import LoggedIn = require("../routes/loggedin/get"); import { ServerVariables } from "../ServerVariables"; import Endpoints = require("../../../../shared/api"); @@ -38,15 +30,15 @@ function setupTotp(app: Express.Application, vars: ServerVariables) { RequireValidatedFirstFactor.middleware(vars.logger), TOTPSignGet.default(vars)); - app.get(Endpoints.SECOND_FACTOR_TOTP_IDENTITY_START_GET, + app.post(Endpoints.SECOND_FACTOR_TOTP_IDENTITY_START_POST, RequireValidatedFirstFactor.middleware(vars.logger)); - app.get(Endpoints.SECOND_FACTOR_TOTP_IDENTITY_FINISH_GET, + app.post(Endpoints.SECOND_FACTOR_TOTP_IDENTITY_FINISH_POST, RequireValidatedFirstFactor.middleware(vars.logger)); IdentityCheckMiddleware.register(app, - Endpoints.SECOND_FACTOR_TOTP_IDENTITY_START_GET, - Endpoints.SECOND_FACTOR_TOTP_IDENTITY_FINISH_GET, + Endpoints.SECOND_FACTOR_TOTP_IDENTITY_START_POST, + Endpoints.SECOND_FACTOR_TOTP_IDENTITY_FINISH_POST, new TOTPRegistrationIdentityHandler(vars.logger, vars.userDataStore, vars.totpHandler, vars.config.totp), vars); @@ -69,15 +61,15 @@ function setupU2f(app: Express.Application, vars: ServerVariables) { RequireValidatedFirstFactor.middleware(vars.logger), U2FRegisterPost.default(vars)); - app.get(Endpoints.SECOND_FACTOR_U2F_IDENTITY_START_GET, + app.post(Endpoints.SECOND_FACTOR_U2F_IDENTITY_START_POST, RequireValidatedFirstFactor.middleware(vars.logger)); - app.get(Endpoints.SECOND_FACTOR_U2F_IDENTITY_FINISH_GET, + app.post(Endpoints.SECOND_FACTOR_U2F_IDENTITY_FINISH_POST, RequireValidatedFirstFactor.middleware(vars.logger)); IdentityCheckMiddleware.register(app, - Endpoints.SECOND_FACTOR_U2F_IDENTITY_START_GET, - Endpoints.SECOND_FACTOR_U2F_IDENTITY_FINISH_GET, + Endpoints.SECOND_FACTOR_U2F_IDENTITY_START_POST, + Endpoints.SECOND_FACTOR_U2F_IDENTITY_FINISH_POST, new U2FRegistrationIdentityHandler(vars.logger), vars); } @@ -88,27 +80,16 @@ function setupResetPassword(app: Express.Application, vars: ServerVariables) { new ResetPasswordIdentityHandler(vars.logger, vars.usersDatabase), vars); - app.get(Endpoints.RESET_PASSWORD_REQUEST_GET, - ResetPasswordRequestPost.default); app.post(Endpoints.RESET_PASSWORD_FORM_POST, ResetPasswordFormPost.default(vars)); } -function setupErrors(app: Express.Application, vars: ServerVariables) { - app.get(Endpoints.ERROR_401_GET, Error401Get.default(vars)); - app.get(Endpoints.ERROR_403_GET, Error403Get.default(vars)); - app.get(Endpoints.ERROR_404_GET, Error404Get.default); -} - export class RestApi { static setup(app: Express.Application, vars: ServerVariables): void { - app.get(Endpoints.FIRST_FACTOR_GET, FirstFactorGet.default(vars)); + app.get(Endpoints.STATE_GET, StateGet(vars)); + app.post(Endpoints.REDIRECT_POST, RedirectPost(vars)); - app.get(Endpoints.SECOND_FACTOR_GET, - RequireValidatedFirstFactor.middleware(vars.logger), - SecondFactorGet.default(vars)); - - app.get(Endpoints.LOGOUT_GET, LogoutGet.default(vars)); + app.post(Endpoints.LOGOUT_POST, LogoutPost(vars)); app.get(Endpoints.VERIFY_GET, VerifyGet.default(vars)); app.post(Endpoints.FIRST_FACTOR_POST, FirstFactorPost.default(vars)); @@ -116,10 +97,5 @@ export class RestApi { setupTotp(app, vars); setupU2f(app, vars); setupResetPassword(app, vars); - setupErrors(app, vars); - - app.get(Endpoints.LOGGED_IN, - RequireValidatedFirstFactor.middleware(vars.logger), - LoggedIn.default(vars)); } } diff --git a/server/src/views/already-logged-in.pug b/server/src/views/already-logged-in.pug deleted file mode 100644 index 137bbea30..000000000 --- a/server/src/views/already-logged-in.pug +++ /dev/null @@ -1,14 +0,0 @@ -extends layout/layout.pug - -block form-header - h1 Sign in - -block content - img(class="header-img" src="/img/success.png" alt="success") - if redirection_url - p You are already logged in as #{ username }.

- | If you are not redirected in few seconds, click here.

- | Otherwise, click here to log off. - else - p You are already logged in as #{ username }.

- | Click here to log off. diff --git a/server/src/views/errors/401.pug b/server/src/views/errors/401.pug deleted file mode 100644 index b7a222ad0..000000000 --- a/server/src/views/errors/401.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-401"; - -block form-header - h1 Error 401 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You are not authorized to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You are not authorized to access this resource. \ No newline at end of file diff --git a/server/src/views/errors/403.pug b/server/src/views/errors/403.pug deleted file mode 100644 index f4b5ca8a2..000000000 --- a/server/src/views/errors/403.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-403"; - -block form-header - h1 Error 403 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You don't have enough privileges to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You don't have enough privileges to access this resource. diff --git a/server/src/views/errors/404.pug b/server/src/views/errors/404.pug deleted file mode 100644 index 06d6375fc..000000000 --- a/server/src/views/errors/404.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-404"; - -block form-header -

Error 404

- -block content - img(class="header-img" src="/img/warning.png" alt="warning") - p Page not found. diff --git a/server/src/views/firstfactor.pug b/server/src/views/firstfactor.pug deleted file mode 100644 index 046b8c4c1..000000000 --- a/server/src/views/firstfactor.pug +++ /dev/null @@ -1,23 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "firstfactor"; - -block form-header - h1 Sign in - -block content - div(class="notification") - img(class="header-img" src="/img/user.png" alt="user profile") - p Enter your credentials to sign in - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" id="username" placeholder="Username" required autofocus) - input(type="password" class="form-control" id="password" placeholder="Password" required) - button(id="signin" class="btn btn-lg btn-primary btn-block" type="submit") Sign in - div(class="keep-me-logged-in pull-left") - input(type="checkbox" id="keep_me_logged_in" name="keep_me_logged_in" value="true") - label(for="keep_me_logged_in") Keep me logged in - div(class="bottom-right-links pull-right") - a(href=reset_password_request_endpoint, class="link forgot-password") Forgot password? - span(class="clearfix") diff --git a/server/src/views/layout/layout.pug b/server/src/views/layout/layout.pug deleted file mode 100644 index 8caf710b6..000000000 --- a/server/src/views/layout/layout.pug +++ /dev/null @@ -1,28 +0,0 @@ -block variables - -doctype html -html - head - title Authelia - 2FA - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="robots", content="noindex, nofollow, nosnippet, noarchive") - meta(http-equiv="Content-Security-Policy", content="default-src 'self'; img-src 'self' data:;") - link(rel="icon", href="/img/icon.png" type="image/png" sizes="32x32") - link(rel="stylesheet", type="text/css", href="/css/authelia.css") - if redirection_url - meta(http-equiv="refresh" content="4;url=" + redirection_url) - body - div(class="container") - div(class="row") - div(class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3") - div(class="account-wall " + page_classname) - div(class="row header") - block form-header - div(class="row body") - div(class="form col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2") - block content - div(class="row footer poweredby-block") - div(class="poweredby col-xs-6 col-xs-offset-4 col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4") - | Powered by Authelia - block entrypoint - script(src="/js/authelia.js", type="text/javascript") \ No newline at end of file diff --git a/server/src/views/need-identity-validation.pug b/server/src/views/need-identity-validation.pug deleted file mode 100644 index 4cfd62717..000000000 --- a/server/src/views/need-identity-validation.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "identity-validation"; - -block form-header - h1 Registration - -block content - img(class="header-img" src="/img/mail.png" alt="mail") - p A confirmation email has been sent to your mailbox. - | Please open it and click on the link within 15 minutes to confirm the registration. diff --git a/server/src/views/password-reset-form.pug b/server/src/views/password-reset-form.pug deleted file mode 100644 index 07f0baa7b..000000000 --- a/server/src/views/password-reset-form.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-form"; - -block form-header - h1 Reset password - -block content - div(class="notification") - img(class="header-img" src="/img/password.png" alt="password") - p Set your new password and confirm it. - form(class="form-signin") - div(class="form-inputs") - input(class="form-control" type="password" name="password1" id="password1" placeholder="New password" required="required") - input(class="form-control" type="password" name="password2" id="password2" placeholder="Password confirmation" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/server/src/views/password-reset-request.pug b/server/src/views/password-reset-request.pug deleted file mode 100644 index 21746af9e..000000000 --- a/server/src/views/password-reset-request.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-request"; - -block form-header - h1 Reset password - -block content - div(class="notification") - div - img(class="header-img" src="/img/password.png" alt="password") - p After giving your username, you will receive an email to change your password. - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" name="username" id="username" placeholder="Your username" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/server/src/views/secondfactor.pug b/server/src/views/secondfactor.pug deleted file mode 100644 index 4df8ec257..000000000 --- a/server/src/views/secondfactor.pug +++ /dev/null @@ -1,30 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "secondfactor"; - -block form-header - h1 Sign in - -block content - div - div(class="notification") - h3 Hi #{username} - div(class="row") - div(class="u2f-token") - img(src="/img/pendrive.png", alt="security key") - p - | Please, touch your security key
- b Or
- | Get a one-time password - form(class="form-signin totp") - div(class="form-inputs") - input(type="text" autocomplete="off" class="form-control" id="token" placeholder="Token" required autofocus) - button(class="btn btn-lg btn-primary btn-block totp-button" type="submit") Sign in - div(class="pull-right bottom-right-links") - div Need to register? - div - a(href=u2f_identity_start_endpoint, class="link register-u2f", data-toggle="tooltip", title="A security key is required to register.") Security key - | | - a(href=totp_identity_start_endpoint, class="link register-totp") Google Authenticator - span(class="clearfix") \ No newline at end of file diff --git a/server/src/views/totp-register.pug b/server/src/views/totp-register.pug deleted file mode 100644 index 1b4d98354..000000000 --- a/server/src/views/totp-register.pug +++ /dev/null @@ -1,25 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "totp-register"; - -block form-header - h1 One-time passwords - -block content - p Open Google Authenticator and add this entry - p(id="secret") #{ base32_secret } - p or scan this barcode - div(id="qrcode") #{ otpauth_url } - p - a(href=login_endpoint, id="login-button") Login - div(class="need-google-authenticator") - | Need Google Authenticator? - div(class="store-badges") - a(href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1', target="_blank") - img(alt='Get it on Google Play', src='/img/stores/googleplay-badge.svg', class="store-badge") - a(href='https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8', target="_blank") - img(alt='Get it on Apple Store' src='/img/stores/applestore-badge.svg' class="store-badge") - -block entrypoint - script(src="/js/qrcode.min.js", type="text/javascript" ) diff --git a/server/src/views/u2f-register.pug b/server/src/views/u2f-register.pug deleted file mode 100644 index 5e24bc707..000000000 --- a/server/src/views/u2f-register.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "u2f-register"; - -block form-header - h1 Register your security key - -block content - p Touch the token to register your security key. - img(src="/img/pendrive.png" alt="pendrive") \ No newline at end of file diff --git a/server/test/requests.ts b/server/test/requests.ts deleted file mode 100644 index 93fa0de47..000000000 --- a/server/test/requests.ts +++ /dev/null @@ -1,94 +0,0 @@ - -import BluebirdPromise = require("bluebird"); -import request = require("request"); -import assert = require("assert"); -import express = require("express"); -import nodemailer = require("nodemailer"); -import Endpoints = require("../../shared/api"); - -declare module "request" { - export interface RequestAPI { - getAsync(uri: string, options?: RequiredUriUrl): BluebirdPromise; - getAsync(uri: string): BluebirdPromise; - getAsync(options: RequiredUriUrl & CoreOptions): BluebirdPromise; - - postAsync(uri: string, options?: CoreOptions): BluebirdPromise; - postAsync(uri: string): BluebirdPromise; - postAsync(options: RequiredUriUrl & CoreOptions): BluebirdPromise; - } -} - -const requestAsync: typeof request = BluebirdPromise.promisifyAll(request) as typeof request; - -export = function (port: number) { - const PORT = port; - const BASE_URL = "http://localhost:" + PORT; - - function execute_totp(jar: request.CookieJar, token: string) { - return requestAsync.postAsync({ - url: BASE_URL + Endpoints.SECOND_FACTOR_TOTP_POST, - jar: jar, - form: { - token: token - } - }); - } - - function execute_u2f_authentication(jar: request.CookieJar) { - return requestAsync.getAsync({ - url: BASE_URL + Endpoints.SECOND_FACTOR_U2F_SIGN_REQUEST_GET, - jar: jar - }) - .then(function (res: request.RequestResponse) { - assert.equal(res.statusCode, 200); - return requestAsync.postAsync({ - url: BASE_URL + Endpoints.SECOND_FACTOR_U2F_SIGN_POST, - jar: jar, - form: { - } - }); - }); - } - - function execute_verification(jar: request.CookieJar) { - return requestAsync.getAsync({ url: BASE_URL + Endpoints.VERIFY_GET, jar: jar }); - } - - function execute_login(jar: request.CookieJar) { - return requestAsync.getAsync({ url: BASE_URL + Endpoints.FIRST_FACTOR_GET, jar: jar }); - } - - function execute_first_factor(jar: request.CookieJar) { - return requestAsync.postAsync({ - url: BASE_URL + Endpoints.FIRST_FACTOR_POST, - jar: jar, - form: { - username: "test_ok", - password: "password" - } - }); - } - - function execute_failing_first_factor(jar: request.CookieJar) { - return requestAsync.postAsync({ - url: BASE_URL + Endpoints.FIRST_FACTOR_POST, - jar: jar, - form: { - username: "test_nok", - password: "password" - } - }); - } - - return { - login: execute_login, - verify: execute_verification, - u2f_authentication: execute_u2f_authentication, - first_factor: execute_first_factor, - failing_first_factor: execute_failing_first_factor, - totp: execute_totp, - }; -}; - diff --git a/shared/AuthenticationLevel.ts b/shared/AuthenticationLevel.ts new file mode 100644 index 000000000..8edae1fe0 --- /dev/null +++ b/shared/AuthenticationLevel.ts @@ -0,0 +1,7 @@ +enum Level { + NOT_AUTHENTICATED = 0, + ONE_FACTOR = 1, + TWO_FACTOR = 2 +} + +export default Level; diff --git a/shared/api.ts b/shared/api.ts index 2ebe5d3d9..dacb04f6d 100644 --- a/shared/api.ts +++ b/shared/api.ts @@ -109,17 +109,17 @@ export const SECOND_FACTOR_TOTP_POST = "/api/totp"; /** - * @api {get} /secondfactor/u2f/identity/start Start U2F registration identity validation + * @api {get} /api/secondfactor/u2f/identity/start Start U2F registration identity validation * @apiName RequestU2FRegistration * @apiGroup U2F * @apiVersion 1.0.0 * @apiUse UserSession * @apiUse IdentityValidationStart */ -export const SECOND_FACTOR_U2F_IDENTITY_START_GET = "/secondfactor/u2f/identity/start"; +export const SECOND_FACTOR_U2F_IDENTITY_START_POST = "/api/secondfactor/u2f/identity/start"; /** - * @api {get} /secondfactor/u2f/identity/finish Finish U2F registration identity validation + * @api {get} /api/secondfactor/u2f/identity/finish Finish U2F registration identity validation * @apiName ServeU2FRegistrationPage * @apiGroup U2F * @apiVersion 1.0.0 @@ -129,12 +129,12 @@ export const SECOND_FACTOR_U2F_IDENTITY_START_GET = "/secondfactor/u2f/identity/ * @apiDescription Serves the U2F registration page that asks the user to * touch the token of the U2F device. */ -export const SECOND_FACTOR_U2F_IDENTITY_FINISH_GET = "/secondfactor/u2f/identity/finish"; +export const SECOND_FACTOR_U2F_IDENTITY_FINISH_POST = "/api/secondfactor/u2f/identity/finish"; /** - * @api {get} /secondfactor/totp/identity/start Start TOTP registration identity validation + * @api {get} /api/secondfactor/totp/identity/start Start TOTP registration identity validation * @apiName StartTOTPRegistration * @apiGroup TOTP * @apiVersion 1.0.0 @@ -143,12 +143,12 @@ export const SECOND_FACTOR_U2F_IDENTITY_FINISH_GET = "/secondfactor/u2f/identity * * @apiDescription Initiates the identity validation */ -export const SECOND_FACTOR_TOTP_IDENTITY_START_GET = "/secondfactor/totp/identity/start"; +export const SECOND_FACTOR_TOTP_IDENTITY_START_POST = "/api/secondfactor/totp/identity/start"; /** - * @api {get} /secondfactor/totp/identity/finish Finish TOTP registration identity validation + * @api {get} /api/secondfactor/totp/identity/finish Finish TOTP registration identity validation * @apiName FinishTOTPRegistration * @apiGroup TOTP * @apiVersion 1.0.0 @@ -159,7 +159,7 @@ export const SECOND_FACTOR_TOTP_IDENTITY_START_GET = "/secondfactor/totp/identit * @apiDescription Serves the TOTP registration page that displays the secret. * The secret is a QRCode and a base32 secret. */ -export const SECOND_FACTOR_TOTP_IDENTITY_FINISH_GET = "/secondfactor/totp/identity/finish"; +export const SECOND_FACTOR_TOTP_IDENTITY_FINISH_POST = "/api/secondfactor/totp/identity/finish"; @@ -187,7 +187,7 @@ export const RESET_PASSWORD_FORM_POST = "/api/password-reset"; * * @apiDescription Serve a page that requires the username. */ -export const RESET_PASSWORD_REQUEST_GET = "/password-reset/request"; +export const RESET_PASSWORD_REQUEST_GET = "/api/password-reset/request"; @@ -201,7 +201,7 @@ export const RESET_PASSWORD_REQUEST_GET = "/password-reset/request"; * * @apiDescription Start password reset request. */ -export const RESET_PASSWORD_IDENTITY_START_GET = "/password-reset/identity/start"; +export const RESET_PASSWORD_IDENTITY_START_GET = "/api/password-reset/identity/start"; @@ -215,7 +215,7 @@ export const RESET_PASSWORD_IDENTITY_START_GET = "/password-reset/identity/start * * @apiDescription Start password reset request. */ -export const RESET_PASSWORD_IDENTITY_FINISH_GET = "/password-reset/identity/finish"; +export const RESET_PASSWORD_IDENTITY_FINISH_GET = "/api/password-reset/identity/finish"; @@ -240,28 +240,17 @@ export const RESET_PASSWORD_IDENTITY_FINISH_GET = "/password-reset/identity/fini export const FIRST_FACTOR_POST = "/api/firstfactor"; /** - * @api {get} / First factor page - * @apiName Login + * @api {get} /state Authentication state + * @apiName State * @apiGroup Authentication * @apiVersion 1.0.0 * - * @apiSuccess (Success 200) {String} Content The content of the first factor page. + * @apiSuccess (Success 200) A dict containing the username and the authentication + * level * - * @apiDescription Serves the login page and create a create a cookie for the client. + * @apiDescription Get the authentication state of the user based on the cookie. */ -export const FIRST_FACTOR_GET = "/"; - -/** - * @api {get} /secondfactor Second factor page - * @apiName SecondFactor - * @apiGroup Authentication - * @apiVersion 1.0.0 - * - * @apiSuccess (Success 200) {String} Content The content of second factor page. - * - * @apiDescription Serves the second factor page - */ -export const SECOND_FACTOR_GET = "/secondfactor"; +export const STATE_GET = "/api/state"; /** * @api {get} /api/verify Verify user authentication @@ -287,20 +276,28 @@ export const SECOND_FACTOR_GET = "/secondfactor"; export const VERIFY_GET = "/api/verify"; /** - * @api {get} /logout Serves logout page + * @api {post} /api/logout Logout procedure * @apiName Logout * @apiGroup Authentication * @apiVersion 1.0.0 * - * @apiParam {String} redirect Redirect to this URL when user is deauthenticated. - * @apiSuccess (Success 302) redirect Redirect to the URL. + * @apiSuccess (Success 200) * - * @apiDescription Log out the user and redirect to the URL. + * @apiDescription Resets the session to logout the user. */ -export const LOGOUT_GET = "/logout"; +export const LOGOUT_POST = "/api/logout"; -export const ERROR_401_GET = "/error/401"; -export const ERROR_403_GET = "/error/403"; -export const ERROR_404_GET = "/error/404"; - -export const LOGGED_IN = "/loggedin"; +/** + * @api {post} /api/redirect Url redirection checking endpoint + * @apiName Redirect + * @apiGroup Authentication + * @apiVersion 1.0.0 + * @apiDescription Check if the user can be redirected to the url provided. + * The level of permissions for this user are checked and the url must be + * in the domain protected by authelia. + * + * @apiSuccess (Success 200) + * + * @apiDescription Resets the session to logout the user. + */ +export const REDIRECT_POST = "/api/redirect"; \ No newline at end of file diff --git a/test/complete-config/00-suite.ts b/test/complete-config/00-suite.ts deleted file mode 100644 index 3ef451b56..000000000 --- a/test/complete-config/00-suite.ts +++ /dev/null @@ -1,28 +0,0 @@ -require("chromedriver"); -import Environment = require('../environment'); - -const includes = [ - "docker-compose.yml", - "example/compose/docker-compose.base.yml", - "example/compose/mongo/docker-compose.yml", - "example/compose/redis/docker-compose.yml", - "example/compose/nginx/backend/docker-compose.yml", - "example/compose/nginx/portal/docker-compose.yml", - "example/compose/smtp/docker-compose.yml", - "example/compose/httpbin/docker-compose.yml", - "example/compose/ldap/docker-compose.yml" -]; - - -before(function() { - this.timeout(20000); - this.environment = new Environment.Environment(includes); - return this.environment.setup(5000); -}); - -after(function() { - this.timeout(30000); - if(process.env.KEEP_ENV != "true") { - return this.environment.cleanup(); - } -}); \ No newline at end of file diff --git a/test/complete-config/closed-redirection.ts b/test/complete-config/closed-redirection.ts deleted file mode 100644 index c44721eca..000000000 --- a/test/complete-config/closed-redirection.ts +++ /dev/null @@ -1,41 +0,0 @@ -import WithDriver from "../helpers/with-driver"; -import LoginAndRegisterTotp from "../helpers/login-and-register-totp"; -import SeeNotification from "../helpers/see-notification"; -import VisitPage from "../helpers/visit-page"; -import FillLoginPageWithUserAndPasswordAndClick from '../helpers/fill-login-page-and-click'; -import ValidateTotp from "../helpers/validate-totp"; -import {CANNOT_REDIRECT_TO_EXTERNAL_DOMAIN} from '../../shared/UserMessages'; - -/* - * Authelia should not be vulnerable to open redirection. Otherwise it would aid an - * attacker in conducting a phishing attack. - * - * To avoid the issue, Authelia's client scans the URL and prevent any redirection if - * the URL is pointing to an external domain. - */ -describe("Redirection should be performed only if in domain", function() { - this.timeout(10000); - WithDriver(); - - before(function() { - const that = this; - return LoginAndRegisterTotp(this.driver, "john", true) - .then((secret: string) => that.secret = secret) - }); - - function DoNotRedirect(url: string) { - it(`should see an error message instead of redirecting to ${url}`, function() { - const driver = this.driver; - const secret = this.secret; - return VisitPage(driver, `https://login.example.com:8080/?rd=${url}`) - .then(() => FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password')) - .then(() => ValidateTotp(driver, secret)) - .then(() => SeeNotification(driver, "error", CANNOT_REDIRECT_TO_EXTERNAL_DOMAIN)) - .then(() => driver.get(`https://login.example.com:8080/logout`)); - }); - } - - DoNotRedirect("www.google.fr"); - DoNotRedirect("http://www.google.fr"); - DoNotRedirect("https://www.google.fr"); -}) \ No newline at end of file diff --git a/test/complete-config/mongo-broken-connection.ts b/test/complete-config/mongo-broken-connection.ts deleted file mode 100644 index c46359869..000000000 --- a/test/complete-config/mongo-broken-connection.ts +++ /dev/null @@ -1,17 +0,0 @@ -import WithDriver from '../helpers/with-driver'; -import fullLogin from '../helpers/full-login'; -import loginAndRegisterTotp from '../helpers/login-and-register-totp'; - -describe("Connection retry when mongo fails or restarts", function() { - this.timeout(30000); - WithDriver(); - - it("should be able to login after mongo restarts", function() { - const that = this; - let secret; - return loginAndRegisterTotp(that.driver, "john", true) - .then(_secret => secret = _secret) - .then(() => that.environment.restart_service("mongo", 1000)) - .then(() => fullLogin(that.driver, "https://admin.example.com:8080/secret.html", "john", secret)); - }) -}); diff --git a/test/configuration.ts b/test/configuration.ts deleted file mode 100644 index 3204c6c22..000000000 --- a/test/configuration.ts +++ /dev/null @@ -1,32 +0,0 @@ -import Bluebird = require("bluebird"); -import YamlJS = require("yamljs"); -import Fs = require("fs"); -import ChildProcess = require("child_process"); - -const execAsync = Bluebird.promisify(ChildProcess.exec); - -export class Configuration { - private outputPath: string; - - setup( - inputPath: string, - outputPath: string, - updateFn: (configuration: any) => void) - : Bluebird { - - console.log("[CONFIGURATION] setup"); - this.outputPath = outputPath; - return new Bluebird((resolve, reject) => { - const configuration = YamlJS.load(inputPath); - updateFn(configuration); - const configurationStr = YamlJS.stringify(configuration); - Fs.writeFileSync(outputPath, configurationStr); - resolve(); - }); - } - - cleanup(): Bluebird<{}> { - console.log("[CONFIGURATION] cleanup"); - return execAsync(`rm ${this.outputPath}`); - } -} \ No newline at end of file diff --git a/test/environment.ts b/test/environment.ts deleted file mode 100644 index 593aa05af..000000000 --- a/test/environment.ts +++ /dev/null @@ -1,62 +0,0 @@ -const { exec } = require('child_process'); -import Bluebird = require("bluebird"); - -function docker_compose(includes: string[]) { - const compose_args = includes.map((dc: string) => `-f ${dc}`).join(' '); - return `docker-compose ${compose_args}`; -} - -export class Environment { - private includes: string[]; - constructor(includes: string[]) { - this.includes = includes; - } - - private runCommand(command: string, timeout?: number): Bluebird { - return new Bluebird((resolve, reject) => { - console.log('[ENVIRONMENT] Running: %s', command); - exec(command, (err: any, stdout: any, stderr: any) => { - if(err) { - reject(err); - return; - } - if(!timeout) resolve(); - else setTimeout(resolve, timeout); - }); - }); - } - - - setup(timeout?: number): Bluebird { - const command = docker_compose(this.includes) + ' up -d' - console.log('[ENVIRONMENT] Starting up...'); - return this.runCommand(command, timeout); - } - - cleanup(): Bluebird { - if(process.env.KEEP_ENV != "true") { - const command = docker_compose(this.includes) + ' down' - console.log('[ENVIRONMENT] Cleaning up...'); - return this.runCommand(command); - } - return Bluebird.resolve(); - } - - stop_service(serviceName: string): Bluebird { - const command = docker_compose(this.includes) + ' stop ' + serviceName; - console.log('[ENVIRONMENT] Stopping service %s...', serviceName); - return this.runCommand(command); - } - - start_service(serviceName: string): Bluebird { - const command = docker_compose(this.includes) + ' start ' + serviceName; - console.log('[ENVIRONMENT] Starting service %s...', serviceName); - return this.runCommand(command); - } - - restart_service(serviceName: string, timeout?: number): Bluebird { - const command = docker_compose(this.includes) + ' restart ' + serviceName; - console.log('[ENVIRONMENT] Restarting service %s...', serviceName); - return this.runCommand(command, timeout); - } -} \ No newline at end of file diff --git a/test/features/access-control.feature b/test/features/access-control.feature deleted file mode 100644 index 0e513ea1f..000000000 --- a/test/features/access-control.feature +++ /dev/null @@ -1,55 +0,0 @@ -Feature: User has access restricted access to domains - - @need-registered-user-john - Scenario: User john has admin access - When I visit "https://login.example.com:8080?rd=https://home.example.com:8080/" - And I login with user "john" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - And I'm redirected to "https://home.example.com:8080/" - Then I have access to "https://public.example.com:8080/secret.html" - And I have access to "https://dev.example.com:8080/groups/admin/secret.html" - And I have access to "https://dev.example.com:8080/groups/dev/secret.html" - And I have access to "https://dev.example.com:8080/users/john/secret.html" - And I have access to "https://dev.example.com:8080/users/harry/secret.html" - And I have access to "https://dev.example.com:8080/users/bob/secret.html" - And I have access to "https://admin.example.com:8080/secret.html" - And I have access to "https://mx1.mail.example.com:8080/secret.html" - And I have access to "https://single_factor.example.com:8080/secret.html" - And I have no access to "https://mx2.mail.example.com:8080/secret.html" - - @need-registered-user-bob - Scenario: User bob has restricted access - When I visit "https://login.example.com:8080?rd=https://home.example.com:8080/" - And I login with user "bob" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - And I'm redirected to "https://home.example.com:8080/" - Then I have access to "https://public.example.com:8080/secret.html" - And I have no access to "https://dev.example.com:8080/groups/admin/secret.html" - And I have access to "https://dev.example.com:8080/groups/dev/secret.html" - And I have no access to "https://dev.example.com:8080/users/john/secret.html" - And I have no access to "https://dev.example.com:8080/users/harry/secret.html" - And I have access to "https://dev.example.com:8080/users/bob/secret.html" - And I have no access to "https://admin.example.com:8080/secret.html" - And I have access to "https://mx1.mail.example.com:8080/secret.html" - And I have access to "https://single_factor.example.com:8080/secret.html" - And I have access to "https://mx2.mail.example.com:8080/secret.html" - - @need-registered-user-harry - Scenario: User harry has restricted access - When I visit "https://login.example.com:8080?rd=https://home.example.com:8080/" - And I login with user "harry" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - And I'm redirected to "https://home.example.com:8080/" - Then I have access to "https://public.example.com:8080/secret.html" - And I have no access to "https://dev.example.com:8080/groups/admin/secret.html" - And I have no access to "https://dev.example.com:8080/groups/dev/secret.html" - And I have no access to "https://dev.example.com:8080/users/john/secret.html" - And I have access to "https://dev.example.com:8080/users/harry/secret.html" - And I have no access to "https://dev.example.com:8080/users/bob/secret.html" - And I have no access to "https://admin.example.com:8080/secret.html" - And I have no access to "https://mx1.mail.example.com:8080/secret.html" - And I have access to "https://single_factor.example.com:8080/secret.html" - And I have no access to "https://mx2.mail.example.com:8080/secret.html" diff --git a/test/features/auth-portal-redirection.feature b/test/features/auth-portal-redirection.feature deleted file mode 100644 index 1fd5bb5cf..000000000 --- a/test/features/auth-portal-redirection.feature +++ /dev/null @@ -1,34 +0,0 @@ -Feature: User is redirected when factors are already validated - - @need-registered-user-john - Scenario: User has validated first factor and tries to access service protected by second factor. He is then redirect to second factor step. - When I visit "https://single_factor.example.com:8080/secret.html" - And I'm redirected to "https://login.example.com:8080/?rd=https://single_factor.example.com:8080/secret.html" - And I login with user "john" and password "password" - And I'm redirected to "https://single_factor.example.com:8080/secret.html" - And I visit "https://public.example.com:8080/secret.html" - Then I'm redirected to "https://login.example.com:8080/secondfactor?rd=https://public.example.com:8080/secret.html" - - @need-registered-user-john - Scenario: User who has validated second factor and access auth portal should be redirected to "Already logged in page" and redirected to default URL declared in configuration - When I visit "https://public.example.com:8080/secret.html" - And I'm redirected to "https://login.example.com:8080/?rd=https://public.example.com:8080/secret.html" - And I login with user "john" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - And I'm redirected to "https://public.example.com:8080/secret.html" - And I visit "https://login.example.com:8080" - Then I'm redirected to "https://login.example.com:8080/loggedin" - And I sleep for 5 seconds - And I'm redirected to "https://home.example.com:8080/" - - @need-registered-user-john - Scenario: User who has validated second factor and access auth portal with rediction param should be redirected to that URL - When I visit "https://public.example.com:8080/secret.html" - And I'm redirected to "https://login.example.com:8080/?rd=https://public.example.com:8080/secret.html" - And I login with user "john" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - And I'm redirected to "https://public.example.com:8080/secret.html" - And I visit "https://login.example.com:8080?rd=https://public.example.com:8080/secret.html" - Then I'm redirected to "https://public.example.com:8080/secret.html" diff --git a/test/features/authelia.feature b/test/features/authelia.feature deleted file mode 100644 index dc993c2b8..000000000 --- a/test/features/authelia.feature +++ /dev/null @@ -1,9 +0,0 @@ -Feature: Generic tests on Authelia endpoints - - Scenario: /api/verify replies with error when redirect parameter is not provided - When I query "https://authelia.example.com:8080/api/verify" - Then I get error code 401 - - Scenario: /api/verify redirects when redirect parameter is provided - When I query "https://authelia.example.com:8080/api/verify?rd=http://login.example.com:8080" - Then I get redirected to "http://login.example.com:8080" \ No newline at end of file diff --git a/test/features/authentication.feature b/test/features/authentication.feature deleted file mode 100644 index 851c7e5e6..000000000 --- a/test/features/authentication.feature +++ /dev/null @@ -1,38 +0,0 @@ -Feature: Authentication scenarii - - Scenario: User succeeds first factor - Given I visit "https://login.example.com:8080/" - When I set field "username" to "bob" - And I set field "password" to "password" - And I click on "Sign in" - Then I'm redirected to "https://login.example.com:8080/secondfactor" - - Scenario: User fails first factor - Given I visit "https://login.example.com:8080/" - When I set field "username" to "john" - And I set field "password" to "bad-password" - And I click on "Sign in" - Then I get a notification of type "error" with message "Authentication failed. Please check your credentials." - - Scenario: User registers TOTP secret and succeeds authentication - Given I visit "https://login.example.com:8080/" - And I login with user "john" and password "password" - And I register a TOTP secret called "Sec0" - When I visit "https://admin.example.com:8080/secret.html" - And I'm redirected to "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html" - And I login with user "john" and password "password" - And I use "Sec0" as TOTP token handle - And I click on "Sign in" - Then I'm redirected to "https://admin.example.com:8080/secret.html" - - Scenario: User fails TOTP second factor - When I visit "https://admin.example.com:8080/secret.html" - And I'm redirected to "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html" - And I login with user "john" and password "password" - And I use "BADTOKEN" as TOTP token - And I click on "Sign in" - Then I get a notification of type "error" with message "Authentication failed. Have you already registered your secret?" - - Scenario: Logout redirects user to redirect URL given in parameter - When I visit "https://login.example.com:8080/logout?rd=https://home.example.com:8080/" - Then I'm redirected to "https://home.example.com:8080/" diff --git a/test/features/forward-headers.feature b/test/features/forward-headers.feature deleted file mode 100644 index 3e45c1356..000000000 --- a/test/features/forward-headers.feature +++ /dev/null @@ -1,11 +0,0 @@ -Feature: Headers are correctly forwarded to backend - @need-authenticated-user-john - Scenario: Custom-Forwarded-User and Custom-Forwarded-Groups are correctly forwarded to protected backend - When I visit "https://public.example.com:8080/headers" - Then I see header "Custom-Forwarded-User" set to "john" - Then I see header "Custom-Forwarded-Groups" set to "dev,admin" - - Scenario: Custom-Forwarded-User and Custom-Forwarded-Groups are correctly forwarded to protected backend when basic auth is used - When I request "https://single_factor.example.com:8080/headers" with username "john" and password "password" using basic authentication - Then I received header "Custom-Forwarded-User" set to "john" - And I received header "Custom-Forwarded-Groups" set to "dev,admin" \ No newline at end of file diff --git a/test/features/redirection.feature b/test/features/redirection.feature deleted file mode 100644 index 2bb39b8d3..000000000 --- a/test/features/redirection.feature +++ /dev/null @@ -1,71 +0,0 @@ -Feature: User is correctly redirected - - Scenario: User is redirected to authelia when he is not authenticated - When I visit "https://public.example.com:8080" - Then I'm redirected to "https://login.example.com:8080/?rd=https://public.example.com:8080/" - - @need-registered-user-john - Scenario: User is redirected to home page after several authentication tries - When I visit "https://public.example.com:8080/secret.html" - And I login with user "john" and password "badpassword" - And I wait for notification to disappear - And I clear field "username" - And I clear field "password" - And I login with user "john" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - Then I'm redirected to "https://public.example.com:8080/secret.html" - - Scenario: User Harry does not have access to admin domain and thus he must get an error 403 - When I register TOTP and login with user "harry" and password "password" - And I visit "https://admin.example.com:8080/secret.html" - Then I get an error 403 - - Scenario: Redirection URL is propagated from restricted page to first factor - When I visit "https://public.example.com:8080/secret.html" - Then I'm redirected to "https://login.example.com:8080/?rd=https://public.example.com:8080/secret.html" - - Scenario: Redirection URL is propagated from first factor to second factor - Given I visit "https://login.example.com:8080/" - And I login with user "john" and password "password" - And I register a TOTP secret called "Sec0" - When I visit "https://public.example.com:8080/secret.html" - And I login with user "john" and password "password" - Then I'm redirected to "https://login.example.com:8080/secondfactor?rd=https://public.example.com:8080/secret.html" - - Scenario: Redirection URL is used to send user from second factor to target page - Given I visit "https://login.example.com:8080/" - And I login with user "john" and password "password" - And I register a TOTP secret called "Sec0" - When I visit "https://public.example.com:8080/secret.html" - And I login with user "john" and password "password" - And I use "Sec0" as TOTP token handle - And I click on "Sign in" - Then I'm redirected to "https://public.example.com:8080/secret.html" - - @need-registered-user-john - Scenario: User is redirected to default URL defined in configuration when authentication is successful - When I visit "https://login.example.com:8080" - And I login with user "john" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - Then I'm redirected to "https://home.example.com:8080/" - - - Scenario: User is redirected when hitting an error 401 - When I visit "https://login.example.com:8080/secondfactor/u2f/identity/finish" - Then I'm redirected to "https://login.example.com:8080/error/401" - And I sleep for 5 seconds - And I'm redirected to "https://home.example.com:8080/" - - @need-registered-user-harry - Scenario: User is redirected when hitting an error 403 - When I visit "https://login.example.com:8080" - And I login with user "harry" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - And I'm redirected to "https://home.example.com:8080/" - When I visit "https://admin.example.com:8080/secret.html" - Then I'm redirected to "https://login.example.com:8080/error/403" - And I sleep for 5 seconds - And I'm redirected to "https://home.example.com:8080/" diff --git a/test/features/registration.feature b/test/features/registration.feature deleted file mode 100644 index c1c92b52f..000000000 --- a/test/features/registration.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Register secret for second factor - - Scenario: Register a TOTP secret with correct label and issuer - Given I visit "https://login.example.com:8080/" - And I login with user "john" and password "password" - When I register a TOTP secret called "Sec0" - Then the otpauth url has label "john" and issuer "authelia.com" - - @needs-totp_issuer-config - Scenario: Register a TOTP secret with correct label and custom issuer - Given I visit "https://login.example.com:8080/" - And I login with user "john" and password "password" - When I register a TOTP secret called "Sec0" - Then the otpauth url has label "john" and issuer "custom.com" \ No newline at end of file diff --git a/test/features/regulation.feature b/test/features/regulation.feature deleted file mode 100644 index 39504d7eb..000000000 --- a/test/features/regulation.feature +++ /dev/null @@ -1,39 +0,0 @@ -@needs-regulation-config -Feature: Authelia regulates authentication to avoid brute force - - @need-registered-user-blackhat - Scenario: Attacker tries too many authentication in a short period of time and get banned - Given I visit "https://login.example.com:8080/" - And I set field "username" to "blackhat" - And I set field "password" to "bad-password" - And I click on "Sign in" - And I get a notification of type "error" with message "Authentication failed. Please check your credentials." - And I set field "password" to "bad-password" - And I click on "Sign in" - And I get a notification of type "error" with message "Authentication failed. Please check your credentials." - And I set field "password" to "bad-password" - And I click on "Sign in" - And I get a notification of type "error" with message "Authentication failed. Please check your credentials." - When I set field "password" to "password" - And I click on "Sign in" - Then I get a notification of type "error" with message "Authentication failed. Please check your credentials." - - @need-registered-user-blackhat - Scenario: User is unbanned after a configured amount of time - Given I visit "https://login.example.com:8080/?rd=https://public.example.com:8080/secret.html" - And I set field "username" to "blackhat" - And I set field "password" to "bad-password" - And I click on "Sign in" - And I get a notification of type "error" with message "Authentication failed. Please check your credentials." - And I set field "password" to "bad-password" - And I click on "Sign in" - And I get a notification of type "error" with message "Authentication failed. Please check your credentials." - And I set field "password" to "bad-password" - And I click on "Sign in" - And I get a notification of type "error" with message "Authentication failed. Please check your credentials." - When I wait 6 seconds - And I set field "password" to "password" - And I click on "Sign in" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - Then I'm redirected to "https://public.example.com:8080/secret.html" diff --git a/test/features/reset-password.feature b/test/features/reset-password.feature deleted file mode 100644 index d449fad78..000000000 --- a/test/features/reset-password.feature +++ /dev/null @@ -1,39 +0,0 @@ -Feature: User is able to reset his password - - Scenario: User is redirected to password reset page - Given I'm on "https://login.example.com:8080" - When I click on the link "Forgot password?" - Then I'm redirected to "https://login.example.com:8080/password-reset/request" - - Scenario: User get an email with a link to reset password - Given I'm on "https://login.example.com:8080/password-reset/request" - When I set field "username" to "james" - And I click on "Reset Password" - Then I get a notification of type "success" with message "An email has been sent to you. Follow the link to change your password." - - Scenario: Request password for unexisting user should behave like existing user - Given I'm on "https://login.example.com:8080/password-reset/request" - When I set field "username" to "fake_user" - And I click on "Reset Password" - Then I get a notification of type "success" with message "An email has been sent to you. Follow the link to change your password." - - Scenario: User resets his password - Given I'm on "https://login.example.com:8080/password-reset/request" - And I set field "username" to "james" - And I click on "Reset Password" - When I click on the link of the email - And I set field "password1" to "newpassword" - And I set field "password2" to "newpassword" - And I click on "Reset Password" - Then I'm redirected to "https://login.example.com:8080/" - - - Scenario: User does not confirm new password - Given I'm on "https://login.example.com:8080/password-reset/request" - And I set field "username" to "james" - And I click on "Reset Password" - When I click on the link of the email - And I set field "password1" to "newpassword" - And I set field "password2" to "newpassword2" - And I click on "Reset Password" - Then I get a notification of type "warning" with message "The passwords are different." diff --git a/test/features/resilience.feature b/test/features/resilience.feature deleted file mode 100644 index a110d4f85..000000000 --- a/test/features/resilience.feature +++ /dev/null @@ -1,15 +0,0 @@ -Feature: Authelia keeps user sessions despite the application restart - - @need-authenticated-user-john - Scenario: Session is still valid after Authelia restarts - When the application restarts - Then I have access to "https://admin.example.com:8080/secret.html" - - @need-registered-user-john - Scenario: Secrets are stored even when Authelia restarts - When the application restarts - And I visit "https://admin.example.com:8080/secret.html" and get redirected "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html" - And I login with user "john" and password "password" - And I use "REGISTERED" as TOTP token handle - And I click on "Sign in" - Then I'm redirected to "https://admin.example.com:8080/secret.html" diff --git a/test/features/restrictions.feature b/test/features/restrictions.feature deleted file mode 100644 index 97c85a342..000000000 --- a/test/features/restrictions.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: Non authenticated users have no access to certain pages - - Scenario: Anonymous user has no access to protected pages - Then I get the following status code when requesting: - | url | code | method | - | https://login.example.com:8080/secondfactor | 401 | GET | - | https://login.example.com:8080/secondfactor/u2f/identity/start | 401 | GET | - | https://login.example.com:8080/secondfactor/u2f/identity/finish | 401 | GET | - | https://login.example.com:8080/secondfactor/totp/identity/start | 401 | GET | - | https://login.example.com:8080/secondfactor/totp/identity/finish | 401 | GET | - | https://login.example.com:8080/loggedin | 401 | GET | - | https://login.example.com:8080/api/totp | 401 | POST | - | https://login.example.com:8080/api/u2f/sign_request | 401 | GET | - | https://login.example.com:8080/api/u2f/sign | 401 | POST | - | https://login.example.com:8080/api/u2f/register_request | 401 | GET | - | https://login.example.com:8080/api/u2f/register | 401 | POST | diff --git a/test/features/session-timeout.feature b/test/features/session-timeout.feature deleted file mode 100644 index 09bfb1fd9..000000000 --- a/test/features/session-timeout.feature +++ /dev/null @@ -1,20 +0,0 @@ -@needs-inactivity-config -Feature: Session is closed after a certain amount of time - - @need-authenticated-user-john - Scenario: An authenticated user is disconnected after a certain inactivity period - Given I have access to "https://public.example.com:8080/secret.html" - When I sleep for 6 seconds - And I visit "https://public.example.com:8080/secret.html" - Then I'm redirected to "https://login.example.com:8080/?rd=https://public.example.com:8080/secret.html" - - @need-authenticated-user-john - Scenario: An authenticated user is disconnected after session expiration period - Given I have access to "https://public.example.com:8080/secret.html" - When I sleep for 4 seconds - And I visit "https://public.example.com:8080/secret.html" - And I sleep for 4 seconds - And I visit "https://public.example.com:8080/secret.html" - And I sleep for 4 seconds - And I visit "https://public.example.com:8080/secret.html" - Then I'm redirected to "https://login.example.com:8080/?rd=https://public.example.com:8080/secret.html" diff --git a/test/features/single-factor-domain.feature b/test/features/single-factor-domain.feature deleted file mode 100644 index 9fee7be9a..000000000 --- a/test/features/single-factor-domain.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: User can access certain subdomains with single factor - - Scenario: User is redirected to service after first factor if allowed - When I visit "https://login.example.com:8080/?rd=https://single_factor.example.com:8080/secret.html" - And I login with user "john" and password "password" - Then I'm redirected to "https://single_factor.example.com:8080/secret.html" - - Scenario: Redirection after first factor fails if single_factor not allowed. It redirects user to first factor. - When I visit "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html" - And I login with user "john" and password "password" - Then I'm redirected to "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html" - - Scenario: User can login using basic authentication - When I request "https://single_factor.example.com:8080/secret.html" with username "john" and password "password" using basic authentication - Then I receive the secret page - diff --git a/test/features/step_definitions/access-control.ts b/test/features/step_definitions/access-control.ts deleted file mode 100644 index 674d0edf8..000000000 --- a/test/features/step_definitions/access-control.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {Then} from "cucumber"; - -Then("I have access to {string}", function(url: string) { - const that = this; - return this.driver.get(url) - .then(function () { - return that.waitUntilUrlContains(url); - }); -}); - -Then("I have no access to {string}", function(url: string) { - const that = this; - return this.driver.get(url) - .then(function () { - return that.getErrorPage(403); - }); -}); \ No newline at end of file diff --git a/test/features/step_definitions/authelia.ts b/test/features/step_definitions/authelia.ts deleted file mode 100644 index 7b100f0d1..000000000 --- a/test/features/step_definitions/authelia.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {Before, When, Then} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); -import Request = require("request-promise"); -import Bluebird = require("bluebird"); - -When("I query {string}", function (url: string) { - const that = this; - return Request(url, { followRedirect: false }) - .then(function(response) { - that.response = response; - }) - .catch(function(err: Error) { - that.error = err; - }) -}); - -Then("I get error code 401", function() { - const that = this; - return new Bluebird(function(resolve, reject) { - if(that.error && that.error.statusCode == 401) { - resolve(); - } - else { - if(that.response) - reject(new Error("No error thrown")); - else if(that.error.statusCode != 401) - reject(new Error(`Error code (${that.error.statusCode}) != 401`)); - } - }); -}); - -Then("I get redirected to {string}", function(url: string) { - const that = this; - return new Bluebird(function(resolve, reject) { - if(that.error && that.error.statusCode == 302 - && that.error.message.indexOf(url) > -1) { - resolve(); - } - else { - reject(new Error("Not redirected")); - } - }); -}); \ No newline at end of file diff --git a/test/features/step_definitions/authentication.ts b/test/features/step_definitions/authentication.ts deleted file mode 100644 index 7c12e4da0..000000000 --- a/test/features/step_definitions/authentication.ts +++ /dev/null @@ -1,99 +0,0 @@ -import {Given, When, Then, TableDefinition} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); -import Fs = require("fs"); -import Speakeasy = require("speakeasy"); -import CustomWorld = require("../support/world"); -import BluebirdPromise = require("bluebird"); -import Request = require("request-promise"); - -When(/^I visit "(https:\/\/[a-zA-Z0-9:%&._\/=?-]+)"$/, function (link: string) { - return this.visit(link); -}); - -When("I wait for notification to disappear", function () { - const that = this; - const notificationEl = this.driver.findElement(seleniumWebdriver.By.className("notification")); - return this.driver.wait(seleniumWebdriver.until.elementIsVisible(notificationEl), 15000) - .then(function () { - return that.driver.wait(seleniumWebdriver.until.elementIsNotVisible(notificationEl), 15000); - }) -}) - -When("I set field {string} to {string}", function (fieldName: string, content: string) { - return this.setFieldTo(fieldName, content); -}); - -When("I clear field {string}", function (fieldName: string) { - return this.clearField(fieldName); -}); - -When("I click on {string}", function (text: string) { - return this.clickOnButton(text); -}); - -Given("I login with user {string} and password {string}", - function (username: string, password: string) { - return this.loginWithUserPassword(username, password); - }); - -Given("I login with user {string} and password {string} \ -and I use TOTP token handle {string}", - function (username: string, password: string, totpTokenHandle: string) { - const that = this; - return this.loginWithUserPassword(username, password) - .then(function () { - return that.useTotpTokenHandle(totpTokenHandle); - }); - }); - -Given("I register a TOTP secret called {string}", function (handle: string) { - return this.registerTotpSecret(handle); -}); - -Given("I use {string} as TOTP token", function (token: string) { - return this.useTotpToken(token); -}); - -Given("I use {string} as TOTP token handle", function (handle) { - return this.useTotpTokenHandle(handle); -}); - -When("I visit {string} and get redirected {string}", - function (url: string, redirectUrl: string) { - const that = this; - return this.driver.get(url) - .then(function () { - return that.driver.wait(seleniumWebdriver.until.urlIs(redirectUrl), 5000); - }); - }); - -Given("I register TOTP and login with user {string} and password {string}", - function (username: string, password: string) { - return this.registerTotpAndSignin(username, password); - }); - -function endpointReplyWith(context: any, link: string, method: string, - returnCode: number) { - return Request(link, { - method: method - }) - .then(function (response: string) { - Assert(response.indexOf("Error " + returnCode) >= 0); - return BluebirdPromise.resolve(); - }, function (response: any) { - Assert.equal(response.statusCode, returnCode); - return BluebirdPromise.resolve(); - }); -} - -Then("the following endpoints reply with:", function (dataTable: TableDefinition) { - const promises = []; - for (let i = 0; i < dataTable.rows().length; i++) { - const url: string = (dataTable.hashes() as any)[i].url; - const method: string = (dataTable.hashes() as any)[i].method; - const code: number = (dataTable.hashes() as any)[i].code; - promises.push(endpointReplyWith(this, url, method, code)); - } - return BluebirdPromise.all(promises); -}); diff --git a/test/features/step_definitions/forward-headers.ts b/test/features/step_definitions/forward-headers.ts deleted file mode 100644 index a459a4bfa..000000000 --- a/test/features/step_definitions/forward-headers.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {Then} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import CustomWorld = require("../support/world"); -import Util = require("util"); -import Bluebird = require("bluebird"); -import Request = require("request-promise"); - -Then("I see header {string} set to {string}", - { timeout: 5000 }, - function (expectedHeaderName: string, expectedValue: string) { - return this.driver.findElement(seleniumWebdriver.By.tagName("body")).getText() - .then(function (txt: string) { - const expectedLine = Util.format("\"%s\": \"%s\"", expectedHeaderName, expectedValue); - if (txt.indexOf(expectedLine) > 0) - return Bluebird.resolve(); - else - return Bluebird.reject(new Error(Util.format("No such header or with unexpected value."))); - }); - }) \ No newline at end of file diff --git a/test/features/step_definitions/hooks.ts b/test/features/step_definitions/hooks.ts deleted file mode 100644 index fc250a7eb..000000000 --- a/test/features/step_definitions/hooks.ts +++ /dev/null @@ -1,173 +0,0 @@ -import {setDefaultTimeout, After, Before, BeforeAll, AfterAll} from "cucumber"; -import fs = require("fs"); -import BluebirdPromise = require("bluebird"); -import ChildProcess = require("child_process"); -import { UserDataStore } from "../../../server/src/lib/storage/UserDataStore"; -import { CollectionFactoryFactory } from "../../../server/src/lib/storage/CollectionFactoryFactory"; -import { IMongoClient } from "../../../server/src/lib/connectors/mongo/IMongoClient"; -import { TotpHandler } from "../../../server/src/lib/authentication/totp/TotpHandler"; -import Speakeasy = require("speakeasy"); -import Request = require("request-promise"); -import { TOTPSecret } from "../../../server/types/TOTPSecret"; -import Environment = require("../../environment"); -import { MongoClient } from "../../../server/src/lib/connectors/mongo/MongoClient"; -import { GlobalLogger } from "../../../server/src/lib/logging/GlobalLogger"; -import { GlobalLoggerStub } from "../../../server/src/lib/logging/GlobalLoggerStub.spec"; - -setDefaultTimeout(30 * 1000); - -const exec = BluebirdPromise.promisify(ChildProcess.exec); - -const includes = [ - "docker-compose.yml", - "example/compose/docker-compose.base.yml", - "example/compose/mongo/docker-compose.yml", - "example/compose/redis/docker-compose.yml", - "example/compose/nginx/backend/docker-compose.yml", - "example/compose/nginx/portal/docker-compose.yml", - "example/compose/smtp/docker-compose.yml", - "example/compose/httpbin/docker-compose.yml", - "example/compose/ldap/docker-compose.yml" -] - -const environment = new Environment.Environment(includes); - -BeforeAll(function() { - return environment.setup(10000); -}); - -AfterAll(function() { - return environment.cleanup() -}); - -Before(function () { - this.jar = Request.jar(); -}) - -After(function () { - return this.driver.quit(); -}); - -function createRegulationConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml | \ - sed 's/find_time: [0-9]\\+/find_time: 15/' | \ - sed 's/ban_time: [0-9]\\+/ban_time: 4/' > config.test.yml \ - "); -} - -function createInactivityConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml | \ - sed 's/expiration: [0-9]\\+/expiration: 10000/' | \ - sed 's/inactivity: [0-9]\\+/inactivity: 5000/' > config.test.yml \ - "); -} - -function createSingleFactorConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml | \ - sed 's/default_method: two_factor/default_method: single_factor/' > config.test.yml \ - "); -} - -function createCustomTotpIssuerConfiguration(): BluebirdPromise { - return exec("\ - cat config.template.yml | \ - sed 's/issuer: authelia.com/issuer: custom.com/' > config.test.yml \ - "); -} - -function declareNeedsConfiguration(tag: string, cb: () => BluebirdPromise) { - Before({ tags: "@needs-" + tag + "-config", timeout: 20 * 1000 }, function () { - return cb() - .then(function () { - return exec("./scripts/example-commit/dc-example.sh -f " + - "./example/compose/authelia/docker-compose.test.yml up -d authelia &&" + - " sleep 3"); - }) - }); - - After({ tags: "@needs-" + tag + "-config", timeout: 20 * 1000 }, function () { - return exec("rm config.test.yml") - .then(function () { - return exec("./scripts/example-commit/dc-example.sh up -d authelia && sleep 3"); - }); - }); -} - -declareNeedsConfiguration("regulation", createRegulationConfiguration); -declareNeedsConfiguration("inactivity", createInactivityConfiguration); -declareNeedsConfiguration("single_factor", createSingleFactorConfiguration); -declareNeedsConfiguration("totp_issuer", createCustomTotpIssuerConfiguration); - -function registerUser(context: any, username: string) { - let secret: TOTPSecret; - const mongoClient = new MongoClient({ - url: "mongodb://localhost:27017", - database: "authelia", - auth: { - username: "authelia", - password: "authelia" - } - }, new GlobalLoggerStub()); - const collectionFactory = CollectionFactoryFactory.createMongo(mongoClient); - const userDataStore = new UserDataStore(collectionFactory); - - const generator = new TotpHandler(Speakeasy); - secret = generator.generate("user", "authelia.com"); - return userDataStore.saveTOTPSecret(username, secret) - .then(function () { - context.totpSecrets["REGISTERED"] = secret.base32; - return mongoClient.close(); - }); -} - -function declareNeedRegisteredUserHooks(username: string) { - Before({ tags: "@need-registered-user-" + username, timeout: 15 * 1000 }, function () { - return registerUser(this, username); - }); - - After({ tags: "@need-registered-user-" + username, timeout: 15 * 1000 }, function () { - this.totpSecrets["REGISTERED"] = undefined; - return BluebirdPromise.resolve(); - }); -} - -function needAuthenticatedUser(context: any, username: string): BluebirdPromise { - return context.visit("https://login.example.com:8080/logout") - .then(function () { - return context.visit("https://login.example.com:8080/"); - }) - .then(function () { - return registerUser(context, username); - }) - .then(function () { - return context.loginWithUserPassword(username, "password"); - }) - .then(function () { - return context.useTotpTokenHandle("REGISTERED"); - }) - .then(function () { - return context.clickOnButton("Sign in"); - }); -} - -function declareNeedAuthenticatedUserHooks(username: string) { - Before({ tags: "@need-authenticated-user-" + username, timeout: 15 * 1000 }, function () { - return needAuthenticatedUser(this, username); - }); - - After({ tags: "@need-authenticated-user-" + username, timeout: 15 * 1000 }, function () { - this.totpSecrets["REGISTERED"] = undefined; - return BluebirdPromise.resolve(); - }); -} - -function declareHooksForUser(username: string) { - declareNeedRegisteredUserHooks(username); - declareNeedAuthenticatedUserHooks(username); -} - -const users = ["harry", "john", "bob", "blackhat"]; -users.forEach(declareHooksForUser); diff --git a/test/features/step_definitions/notifications.ts b/test/features/step_definitions/notifications.ts deleted file mode 100644 index 4bb3ef707..000000000 --- a/test/features/step_definitions/notifications.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {Then} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); -import Fs = require("fs"); -import CustomWorld = require("../support/world"); - -Then("I get a notification of type {string} with message {string}", { timeout: 10 * 1000 }, -function (notificationType: string, notificationMessage: string) { - const that = this; - const notificationEl = this.driver.findElement(seleniumWebdriver.By.className("notification")); - return this.driver.wait(seleniumWebdriver.until.elementIsVisible(notificationEl), 5000) - .then(function () { - return notificationEl.getText(); - }) - .then(function (txt: string) { - Assert.equal(notificationMessage, txt); - return notificationEl.getAttribute("class"); - }) - .then(function (classes: string) { - Assert(classes.indexOf(notificationType) > -1, "Class '" + notificationType + "' not found in notification element."); - return that.driver.sleep(500); - }); -}); \ No newline at end of file diff --git a/test/features/step_definitions/redirection.ts b/test/features/step_definitions/redirection.ts deleted file mode 100644 index 23797c5ec..000000000 --- a/test/features/step_definitions/redirection.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {Given, When, Then} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); - -Given("I'm on {string}", function (link: string) { - return this.driver.get(link); -}); - -When("I click on the link to {string}", function (link: string) { - return this.driver.findElement(seleniumWebdriver.By.linkText(link)).click(); -}); - -Then("I'm redirected to {string}", function (link: string) { - return this.waitUntilUrlContains(link); -}); \ No newline at end of file diff --git a/test/features/step_definitions/registration.ts b/test/features/step_definitions/registration.ts deleted file mode 100644 index 7e861c542..000000000 --- a/test/features/step_definitions/registration.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {When} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); - -When("the otpauth url has label {string} and issuer \ -{string}", function (label: string, issuer: string) { - return this.driver.findElement(seleniumWebdriver.By.id("qrcode")) - .getAttribute("title") - .then(function (title: string) { - const re = `^otpauth://totp/${label}\\?secret=[A-Z0-9]+&issuer=${issuer}$`; - Assert(new RegExp(re).test(title)); - }) - }); diff --git a/test/features/step_definitions/regulation.ts b/test/features/step_definitions/regulation.ts deleted file mode 100644 index c2ac46287..000000000 --- a/test/features/step_definitions/regulation.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {When} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); -import Fs = require("fs"); -import CustomWorld = require("../support/world"); - -When("I wait {int} seconds", { timeout: 10 * 1000 }, function (seconds: number) { - return this.driver.sleep(seconds * 1000); -}); diff --git a/test/features/step_definitions/reset-password.ts b/test/features/step_definitions/reset-password.ts deleted file mode 100644 index d84c4a308..000000000 --- a/test/features/step_definitions/reset-password.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {When} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); -import Fs = require("fs"); - -When("I click on the link {string}", function (text: string) { - return this.driver.findElement(seleniumWebdriver.By.linkText(text)).click(); -}); - -When("I click on the link of the email", function () { - const that = this; - return this.retrieveLatestMail() - .then(function (link: string) { - return that.driver.get(link); - }); -}); \ No newline at end of file diff --git a/test/features/step_definitions/resilience.ts b/test/features/step_definitions/resilience.ts deleted file mode 100644 index 897cf9626..000000000 --- a/test/features/step_definitions/resilience.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {When} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); -import ChildProcess = require("child_process"); -import BluebirdPromise = require("bluebird"); - -When(/^the application restarts$/, {timeout: 15 * 1000}, function () { - const exec = BluebirdPromise.promisify(ChildProcess.exec); - return exec("./scripts/example-commit/dc-example.sh restart authelia && sleep 3"); -}); \ No newline at end of file diff --git a/test/features/step_definitions/restrictions.ts b/test/features/step_definitions/restrictions.ts deleted file mode 100644 index db218ab20..000000000 --- a/test/features/step_definitions/restrictions.ts +++ /dev/null @@ -1,63 +0,0 @@ -import {Before, When, Then, TableDefinition} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); -import Request = require("request-promise"); -import Bluebird = require("bluebird"); - -Before(function () { - this.jar = Request.jar(); -}); - -Then("I get an error {int}", function (code: number) { - return this.getErrorPage(code); -}); - -function requestAndExpectStatusCode(ctx: any, url: string, method: string, - expectedStatusCode: number) { - return Request(url, { - method: method, - jar: ctx.jar - }) - .then(function (body: string) { - return Bluebird.resolve(parseInt(body.match(/Error ([0-9]{3})/)[1])); - }, function (response: any) { - return Bluebird.resolve(response.statusCode) - }) - .then(function (statusCode: number) { - try { - Assert.equal(statusCode, expectedStatusCode); - } - catch (e) { - console.log("%s (actual) != %s (expected)", statusCode, - expectedStatusCode); - throw e; - } - }) -} - -Then("I get the following status code when requesting:", - function (dataTable: TableDefinition) { - const promises: Bluebird[] = []; - for (let i = 0; i < dataTable.rows().length; i++) { - const url: string = (dataTable.hashes() as any)[i].url; - const method: string = (dataTable.hashes() as any)[i].method; - const code: number = (dataTable.hashes() as any)[i].code; - promises.push(requestAndExpectStatusCode(this, url, method, code)); - } - return Bluebird.all(promises); - }) - -When("I post {string} with body:", function (url: string, - dataTable: TableDefinition) { - const body = {}; - for (let i = 0; i < dataTable.rows().length; i++) { - const key = (dataTable.hashes() as any)[i].key; - const value = (dataTable.hashes() as any)[i].value; - body[key] = value; - } - return Request.post(url, { - body: body, - jar: this.jar, - json: true - }); -}); \ No newline at end of file diff --git a/test/features/step_definitions/session-timeout.ts b/test/features/step_definitions/session-timeout.ts deleted file mode 100644 index bbeb66f7b..000000000 --- a/test/features/step_definitions/session-timeout.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {When} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); - -When("I sleep for {int} seconds", function (seconds: number) { - return this.driver.sleep(seconds * 1000); -}); diff --git a/test/features/step_definitions/single-factor.ts b/test/features/step_definitions/single-factor.ts deleted file mode 100644 index 222480c70..000000000 --- a/test/features/step_definitions/single-factor.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {When, Then} from "cucumber"; -import seleniumWebdriver = require("selenium-webdriver"); -import Request = require("request-promise"); -import BluebirdPromise = require("bluebird"); -import Util = require("util"); - -When("I request {string} with username {string}" + - " and password {string} using basic authentication", - function (url: string, username: string, password: string) { - const that = this; - return Request(url, { - auth: { - username: username, - password: password - }, - resolveWithFullResponse: true - }) - .then(function (response: any) { - that.response = response; - }); - }); - -Then("I receive the secret page", function () { - if (this.response.body.match("This is a very important secret!")) - return BluebirdPromise.resolve(); - return BluebirdPromise.reject(new Error("Secret page not received.")); -}); - -Then("I received header {string} set to {string}", - function (expectedHeaderName: string, expectedValue: string) { - const expectedLine = Util.format("\"%s\": \"%s\"", expectedHeaderName, - expectedValue); - if (this.response.body.indexOf(expectedLine) > 0) - return BluebirdPromise.resolve(); - return BluebirdPromise.reject(new Error( - Util.format("No such header or with unexpected value."))); - }); diff --git a/test/features/support/world.ts b/test/features/support/world.ts deleted file mode 100644 index 1a27bd250..000000000 --- a/test/features/support/world.ts +++ /dev/null @@ -1,183 +0,0 @@ -require("chromedriver"); -import seleniumWebdriver = require("selenium-webdriver"); -import {setWorldConstructor, After} from "cucumber"; -import Fs = require("fs"); -import Speakeasy = require("speakeasy"); -import Assert = require("assert"); -import Request = require("request-promise"); -import BluebirdPromise = require("bluebird"); - -process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" - -function CustomWorld() { - const that = this; - this.driver = new seleniumWebdriver.Builder() - .forBrowser("chrome") - .build(); - - this.totpSecrets = {}; - this.configuration = {}; - - this.visit = function (link: string) { - return this.driver.get(link); - }; - - this.setFieldTo = function (fieldName: string, content: string) { - const that = this; - return this.driver.findElement(seleniumWebdriver.By.id(fieldName)) - .sendKeys(content); - }; - - this.clearField = function (fieldName: string) { - return this.driver.findElement(seleniumWebdriver.By.id(fieldName)).clear(); - }; - - this.getErrorPage = function (code: number) { - const that = this; - return this.driver.wait(seleniumWebdriver.until.elementLocated(seleniumWebdriver.By.tagName("h1")), 5000) - .then(function () { - return that.driver - .findElement(seleniumWebdriver.By.tagName("h1")).getText(); - }) - .then(function (txt: string) { - try { - Assert.equal(txt, "Error " + code); - } catch (e) { - console.log(txt); - throw e; - } - }) - }; - - this.clickOnButton = function (buttonText: string) { - const that = this; - return this.driver.wait(seleniumWebdriver.until.elementLocated(seleniumWebdriver.By.tagName("button")), 5000) - .then(function () { - return that.driver - .findElement(seleniumWebdriver.By.tagName("button")) - .findElement(seleniumWebdriver.By.xpath("//button[contains(.,'" + buttonText + "')]")) - .click(); - }); - }; - - this.waitUntilUrlContains = function (url: string) { - const that = this; - return this.driver.wait(seleniumWebdriver.until.urlIs(url), 15000) - .then(function () {return BluebirdPromise.resolve(); }, function (err: Error) { - that.driver.getCurrentUrl() - .then(function (current: string) { - console.error("====> Error due to: %s (current) != %s (expected)", current, url); - }); - return BluebirdPromise.reject(err); - }); - }; - - this.loginWithUserPassword = function (username: string, password: string) { - return that.driver.wait(seleniumWebdriver.until.elementLocated(seleniumWebdriver.By.id("username")), 5000) - .then(function () { - return that.driver.findElement(seleniumWebdriver.By.id("username")) - .sendKeys(username); - }) - .then(function () { - return that.driver.findElement(seleniumWebdriver.By.id("password")) - .clear(); - }) - .then(function () { - return that.driver.findElement(seleniumWebdriver.By.id("password")) - .sendKeys(password); - }) - .then(function () { - return that.driver.findElement(seleniumWebdriver.By.tagName("button")) - .click(); - }); - }; - - this.retrieveLatestMail = function () { - return Request({ - method: "GET", - uri: "http://localhost:8085/messages", - json: true - }) - .then(function (data: any) { - const messageId = data[data.length - 1].id; - return Request({ - method: "GET", - uri: `http://localhost:8085/messages/${messageId}.html` - }); - }) - .then(function (data: any) { - const regexp = new RegExp(/Continue<\/a>/); - const match = regexp.exec(data); - const link = match[1]; - return BluebirdPromise.resolve(link); - }); - }; - - this.registerTotpSecret = function (totpSecretHandle: string) { - return that.driver.wait(seleniumWebdriver.until.elementLocated(seleniumWebdriver.By.className("register-totp")), 5000) - .then(function () { - return that.driver.findElement(seleniumWebdriver.By.className("register-totp")).click(); - }) - .then(function () { - return that.retrieveLatestMail(); - }) - .then(function (url: string) { - return that.driver.get(url); - }) - .then(function () { - return that.driver.wait(seleniumWebdriver.until.elementLocated(seleniumWebdriver.By.id("secret")), 5000); - }) - .then(function () { - return that.driver.findElement(seleniumWebdriver.By.id("secret")).getText(); - }) - .then(function (secret: string) { - that.totpSecrets[totpSecretHandle] = secret; - }); - }; - - this.useTotpTokenHandle = function (totpSecretHandle: string) { - if (!this.totpSecrets[totpSecretHandle]) - throw new Error("No available TOTP token handle " + totpSecretHandle); - - const token = Speakeasy.totp({ - secret: this.totpSecrets[totpSecretHandle], - encoding: "base32" - }); - return this.useTotpToken(token); - }; - - this.useTotpToken = function (totpSecret: string) { - return that.driver.wait(seleniumWebdriver.until.elementLocated(seleniumWebdriver.By.id("token")), 5000) - .then(function () { - return that.driver.findElement(seleniumWebdriver.By.id("token")) - .sendKeys(totpSecret); - }); - }; - - this.registerTotpAndSignin = function (username: string, password: string) { - const totpHandle = "HANDLE"; - const authUrl = "https://login.example.com:8080/"; - const that = this; - return this.visit(authUrl) - .then(function () { - return that.loginWithUserPassword(username, password); - }) - .then(function () { - return that.registerTotpSecret(totpHandle); - }) - .then(function () { - return that.visit(authUrl); - }) - .then(function () { - return that.loginWithUserPassword(username, password); - }) - .then(function () { - return that.useTotpTokenHandle(totpHandle); - }) - .then(function () { - return that.clickOnButton("Sign in"); - }); - }; -} - -setWorldConstructor(CustomWorld); diff --git a/test/helpers/ClickOn.ts b/test/helpers/ClickOn.ts new file mode 100644 index 000000000..09b5935d6 --- /dev/null +++ b/test/helpers/ClickOn.ts @@ -0,0 +1,7 @@ +import SeleniumWebdriver, { WebDriver, Locator } from "selenium-webdriver"; + +export default async function(driver: WebDriver, locator: Locator) { + const el = await driver.wait( + SeleniumWebdriver.until.elementLocated(locator), 5000); + await el.click(); +}; \ No newline at end of file diff --git a/test/helpers/ClickOnLink.ts b/test/helpers/ClickOnLink.ts new file mode 100644 index 000000000..ec9d7bedc --- /dev/null +++ b/test/helpers/ClickOnLink.ts @@ -0,0 +1,8 @@ +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; + +export default async function(driver: WebDriver, linkText: string) { + const element = await driver.wait( + SeleniumWebdriver.until.elementLocated( + SeleniumWebdriver.By.linkText(linkText)), 5000) + await element.click(); +}; \ No newline at end of file diff --git a/test/helpers/FillField.ts b/test/helpers/FillField.ts new file mode 100644 index 000000000..80566b7c6 --- /dev/null +++ b/test/helpers/FillField.ts @@ -0,0 +1,9 @@ +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; + +export default async function(driver: WebDriver, fieldName: string, text: string) { + const element = await driver.wait( + SeleniumWebdriver.until.elementLocated( + SeleniumWebdriver.By.name(fieldName)), 5000) + + await element.sendKeys(text); +}; \ No newline at end of file diff --git a/test/helpers/FillLoginPageAndClick.ts b/test/helpers/FillLoginPageAndClick.ts new file mode 100644 index 000000000..9ffe5d50c --- /dev/null +++ b/test/helpers/FillLoginPageAndClick.ts @@ -0,0 +1,16 @@ +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; + +export default async function( + driver: WebDriver, + username: string, + password: string, + keepMeLoggedIn: boolean = false) { + + await driver.wait(SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.id("username")), 5000) + await driver.findElement(SeleniumWebdriver.By.id("username")).sendKeys(username); + await driver.findElement(SeleniumWebdriver.By.id("password")).sendKeys(password); + if (keepMeLoggedIn) { + await driver.findElement(SeleniumWebdriver.By.id("remember-checkbox")).click(); + } + await driver.findElement(SeleniumWebdriver.By.tagName("button")).click(); +}; \ No newline at end of file diff --git a/test/helpers/FullLogin.ts b/test/helpers/FullLogin.ts new file mode 100644 index 000000000..6b88945c8 --- /dev/null +++ b/test/helpers/FullLogin.ts @@ -0,0 +1,11 @@ +import FillLoginPageAndClick from "./FillLoginPageAndClick"; +import ValidateTotp from "./ValidateTotp"; +import { WebDriver } from "selenium-webdriver"; +import VisitPageAndWaitUrlIs from "./behaviors/VisitPageAndWaitUrlIs"; + +// Validate the two factors! +export default async function(driver: WebDriver, user: string, secret: string, url: string) { + await VisitPageAndWaitUrlIs(driver, `https://login.example.com:8080/?rd=${url}`); + await FillLoginPageAndClick(driver, user, 'password'); + await ValidateTotp(driver, secret); +} \ No newline at end of file diff --git a/test/helpers/GetIdentityLink.ts b/test/helpers/GetIdentityLink.ts new file mode 100644 index 000000000..c0f07b921 --- /dev/null +++ b/test/helpers/GetIdentityLink.ts @@ -0,0 +1,32 @@ +import Bluebird = require("bluebird"); +import Fs = require("fs"); +import Request = require("request-promise"); + +export async function GetLinkFromFile() { + const data = await Bluebird.promisify(Fs.readFile)("/tmp/authelia/notification.txt") + const regexp = new RegExp(/Link: (.+)/); + const match = regexp.exec(data.toLocaleString()); + if (match == null) { + throw new Error('No match'); + } + return match[1]; +}; + +export async function GetLinkFromEmail() { + const data = await Request({ + method: "GET", + uri: "http://localhost:8085/messages", + json: true + }); + const messageId = data[data.length - 1].id; + const data2 = await Request({ + method: "GET", + uri: `http://localhost:8085/messages/${messageId}.html` + }); + const regexp = new RegExp(/Continue<\/a>/); + const match = regexp.exec(data2); + if (match == null) { + throw new Error('No match'); + } + return match[1]; +}; \ No newline at end of file diff --git a/test/helpers/LoginAndRegisterTotp.ts b/test/helpers/LoginAndRegisterTotp.ts new file mode 100644 index 000000000..f62c4fbba --- /dev/null +++ b/test/helpers/LoginAndRegisterTotp.ts @@ -0,0 +1,10 @@ +import RegisterTotp from './RegisterTotp'; +import LoginAs from './LoginAs'; +import { WebDriver } from 'selenium-webdriver'; +import VerifyIsSecondFactorStage from './assertions/VerifyIsSecondFactorStage'; + +export default async function(driver: WebDriver, user: string, password: string, email: boolean = false) { + await LoginAs(driver, user, password); + await VerifyIsSecondFactorStage(driver); + return await RegisterTotp(driver, email); +} \ No newline at end of file diff --git a/test/helpers/LoginAs.ts b/test/helpers/LoginAs.ts new file mode 100644 index 000000000..1894d211f --- /dev/null +++ b/test/helpers/LoginAs.ts @@ -0,0 +1,9 @@ +import FillLoginPageAndClick from './FillLoginPageAndClick'; +import { WebDriver } from "selenium-webdriver"; +import VisitPageAndWaitUrlIs from "./behaviors/VisitPageAndWaitUrlIs"; + +export default async function(driver: WebDriver, user: string, password: string, targetUrl?: string) { + const urlExt = (targetUrl) ? ('rd=' + targetUrl) : ''; + await VisitPageAndWaitUrlIs(driver, "https://login.example.com:8080/" + urlExt); + await FillLoginPageAndClick(driver, user, password); +} \ No newline at end of file diff --git a/test/helpers/Logout.ts b/test/helpers/Logout.ts new file mode 100644 index 000000000..eccd40f1e --- /dev/null +++ b/test/helpers/Logout.ts @@ -0,0 +1,5 @@ +import { WebDriver } from "selenium-webdriver"; + +export default async function(driver: WebDriver) { + await driver.get(`https://login.example.com:8080/logout`); +} \ No newline at end of file diff --git a/test/helpers/RegisterTotp.ts b/test/helpers/RegisterTotp.ts new file mode 100644 index 000000000..8c3cc32b7 --- /dev/null +++ b/test/helpers/RegisterTotp.ts @@ -0,0 +1,13 @@ +import SeleniumWebdriver = require("selenium-webdriver"); +import {GetLinkFromFile, GetLinkFromEmail} from './GetIdentityLink'; + +export default async function(driver: SeleniumWebdriver.WebDriver, email?: boolean){ + await driver.wait(SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.className("register-totp")), 5000) + await driver.findElement(SeleniumWebdriver.By.className("register-totp")).click(); + await driver.sleep(500); + + const link = (email) ? await GetLinkFromEmail() : await GetLinkFromFile(); + await driver.get(link); + await driver.wait(SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.className("base32-secret")), 5000); + return await driver.findElement(SeleniumWebdriver.By.className("base32-secret")).getText(); +}; diff --git a/test/helpers/ValidateTotp.ts b/test/helpers/ValidateTotp.ts new file mode 100644 index 000000000..63a2e107f --- /dev/null +++ b/test/helpers/ValidateTotp.ts @@ -0,0 +1,16 @@ +import Speakeasy from "speakeasy"; +import SeleniumWebdriver, { WebDriver } from 'selenium-webdriver'; + +export default async function(driver: WebDriver, secret: string) { + const token = Speakeasy.totp({ + secret: secret, + encoding: "base32" + }); + + await driver.wait(SeleniumWebdriver.until.elementLocated( + SeleniumWebdriver.By.id("totp-token")), 5000) + await driver.findElement(SeleniumWebdriver.By.id("totp-token")).sendKeys(token); + + const el = await driver.wait(SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.id('totp-button'))); + el.click(); +} \ No newline at end of file diff --git a/test/helpers/VisitPage.ts b/test/helpers/VisitPage.ts new file mode 100644 index 000000000..6a6d781c5 --- /dev/null +++ b/test/helpers/VisitPage.ts @@ -0,0 +1,5 @@ +import { WebDriver } from "selenium-webdriver"; + +export default async function(driver: WebDriver, url: string, timeout: number = 5000) { + await driver.get(url); +} \ No newline at end of file diff --git a/test/helpers/access-secret.ts b/test/helpers/access-secret.ts deleted file mode 100644 index e046bfd8b..000000000 --- a/test/helpers/access-secret.ts +++ /dev/null @@ -1,12 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); -import Bluebird = require("bluebird"); - -export default function(driver: any) { - return driver.findElement( - SeleniumWebdriver.By.tagName('h1')).getText() - .then(function(content: string) { - return (content.indexOf('Secret') > -1) - ? Bluebird.resolve() - : Bluebird.reject(new Error("Secret is not accessible.")); - }) -} \ No newline at end of file diff --git a/test/helpers/assertions/VerifyForwardedHeaderIs.ts b/test/helpers/assertions/VerifyForwardedHeaderIs.ts new file mode 100644 index 000000000..95716d97d --- /dev/null +++ b/test/helpers/assertions/VerifyForwardedHeaderIs.ts @@ -0,0 +1,13 @@ +import SeleniumWebDriver, { WebDriver } from "selenium-webdriver"; +import Util from "util"; + +export default async function(driver: WebDriver, header: string, expectedValue: string, timeout: number = 5000) { + const el = await driver.wait(SeleniumWebDriver.until.elementLocated( + SeleniumWebDriver.By.tagName("body")), timeout); + const text = await el.getText(); + + const expectedLine = Util.format("\"%s\": \"%s\"", header, expectedValue); + if (text.indexOf(expectedLine) < 0) { + throw new Error("Header not found."); + } +} \ No newline at end of file diff --git a/test/helpers/assertions/VerifyIsAlreadyAuthenticatedStage.ts b/test/helpers/assertions/VerifyIsAlreadyAuthenticatedStage.ts new file mode 100644 index 000000000..e6e0d07f2 --- /dev/null +++ b/test/helpers/assertions/VerifyIsAlreadyAuthenticatedStage.ts @@ -0,0 +1,6 @@ +import SeleniumWebDriver, { WebDriver } from "selenium-webdriver"; + +export default async function(driver: WebDriver, timeout: number = 5000) { + await driver.wait(SeleniumWebDriver.until.elementLocated( + SeleniumWebDriver.By.className('already-authenticated-step')), timeout); +} \ No newline at end of file diff --git a/test/helpers/assertions/VerifyIsSecondFactorStage.ts b/test/helpers/assertions/VerifyIsSecondFactorStage.ts new file mode 100644 index 000000000..1d7f22a7f --- /dev/null +++ b/test/helpers/assertions/VerifyIsSecondFactorStage.ts @@ -0,0 +1,6 @@ +import SeleniumWebDriver, { WebDriver } from "selenium-webdriver"; + +export default async function(driver: WebDriver, timeout: number = 5000) { + await driver.wait(SeleniumWebDriver.until.elementLocated( + SeleniumWebDriver.By.className('second-factor-step')), timeout); +} \ No newline at end of file diff --git a/test/helpers/assertions/VerifyNotificationDisplayed.ts b/test/helpers/assertions/VerifyNotificationDisplayed.ts new file mode 100644 index 000000000..52bda174f --- /dev/null +++ b/test/helpers/assertions/VerifyNotificationDisplayed.ts @@ -0,0 +1,10 @@ +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; +import Assert = require("assert"); + +export default async function(driver: WebDriver, message: string, timeout: number = 5000) { + await driver.wait(SeleniumWebdriver.until.elementLocated( + SeleniumWebdriver.By.className("notification")), timeout) + const notificationEl = driver.findElement(SeleniumWebdriver.By.className("notification")); + const txt = await notificationEl.getText(); + Assert.equal(message, txt); +} \ No newline at end of file diff --git a/test/helpers/assertions/VerifySecretObserved.ts b/test/helpers/assertions/VerifySecretObserved.ts new file mode 100644 index 000000000..583c37c88 --- /dev/null +++ b/test/helpers/assertions/VerifySecretObserved.ts @@ -0,0 +1,10 @@ +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; + +// Verify if the current page contains "This is a very important secret!". +export default async function(driver: WebDriver, timeout: number = 5000) { + const el = await driver.wait( + SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.tagName('body')), timeout); + + await driver.wait( + SeleniumWebdriver.until.elementTextContains(el, "This is a very important secret!"), timeout); +} \ No newline at end of file diff --git a/test/helpers/assertions/VerifyUrlIs.ts b/test/helpers/assertions/VerifyUrlIs.ts new file mode 100644 index 000000000..136a5719d --- /dev/null +++ b/test/helpers/assertions/VerifyUrlIs.ts @@ -0,0 +1,5 @@ +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; + +export default async function(driver: WebDriver, url: string, timeout: number = 5000) { + await driver.wait(SeleniumWebdriver.until.urlIs(url), timeout); +} \ No newline at end of file diff --git a/test/helpers/behaviors/LoginOneFactor.ts b/test/helpers/behaviors/LoginOneFactor.ts new file mode 100644 index 000000000..ead8e13fc --- /dev/null +++ b/test/helpers/behaviors/LoginOneFactor.ts @@ -0,0 +1,15 @@ +import { WebDriver } from "selenium-webdriver"; +import FillLoginPageAndClick from "../FillLoginPageAndClick"; +import VerifyUrlIs from "../assertions/VerifyUrlIs"; +import VisitPageAndWaitUrlIs from "./VisitPageAndWaitUrlIs"; + +export default async function( + driver: WebDriver, + username: string, + password: string, + targetUrl: string) { + + await VisitPageAndWaitUrlIs(driver, `https://login.example.com:8080/?rd=${targetUrl}`); + await FillLoginPageAndClick(driver, username, password); + await VerifyUrlIs(driver, targetUrl); +}; \ No newline at end of file diff --git a/test/helpers/behaviors/RegisterAndLoginTwoFactor.ts b/test/helpers/behaviors/RegisterAndLoginTwoFactor.ts new file mode 100644 index 000000000..49868673c --- /dev/null +++ b/test/helpers/behaviors/RegisterAndLoginTwoFactor.ts @@ -0,0 +1,17 @@ +import { WebDriver } from "selenium-webdriver"; +import LoginAndRegisterTotp from "../LoginAndRegisterTotp"; +import FullLogin from "../FullLogin"; +import VerifyUrlIs from "../assertions/VerifyUrlIs"; + +export default async function( + driver: WebDriver, + username: string, + password: string, + email: boolean = false, + targetUrl: string = "https://login.example.com:8080/") { + + const secret = await LoginAndRegisterTotp(driver, username, password, email); + await FullLogin(driver, username, secret, targetUrl); + await VerifyUrlIs(driver, targetUrl); + return secret; +}; \ No newline at end of file diff --git a/test/helpers/behaviors/VisitPageAndWaitUrlIs.ts b/test/helpers/behaviors/VisitPageAndWaitUrlIs.ts new file mode 100644 index 000000000..6ff8229aa --- /dev/null +++ b/test/helpers/behaviors/VisitPageAndWaitUrlIs.ts @@ -0,0 +1,8 @@ +import { WebDriver } from "selenium-webdriver"; +import VerifyUrlIs from "../assertions/VerifyUrlIs"; +import VisitPage from "../VisitPage"; + +export default async function(driver: WebDriver, url: string, timeout: number = 5000) { + await VisitPage(driver, url); + await VerifyUrlIs(driver, url); +} \ No newline at end of file diff --git a/test/helpers/click-on-button.ts b/test/helpers/click-on-button.ts deleted file mode 100644 index e9b6fd448..000000000 --- a/test/helpers/click-on-button.ts +++ /dev/null @@ -1,13 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); - -export default function(driver: any, buttonText: string) { - return driver.wait( - SeleniumWebdriver.until.elementLocated( - SeleniumWebdriver.By.tagName("button")), 5000) - .then(function () { - return driver - .findElement(SeleniumWebdriver.By.tagName("button")) - .findElement(SeleniumWebdriver.By.xpath("//button[contains(.,'" + buttonText + "')]")) - .click(); - }); -}; \ No newline at end of file diff --git a/test/helpers/click-on-link.ts b/test/helpers/click-on-link.ts deleted file mode 100644 index 97f791022..000000000 --- a/test/helpers/click-on-link.ts +++ /dev/null @@ -1,10 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); - -export default function(driver: any, linkText: string) { - return driver.wait( - SeleniumWebdriver.until.elementLocated( - SeleniumWebdriver.By.linkText(linkText)), 5000) - .then(function (el) { - return el.click(); - }); -}; \ No newline at end of file diff --git a/test/helpers/context/AutheliaServer.ts b/test/helpers/context/AutheliaServer.ts new file mode 100644 index 000000000..e14eedeb1 --- /dev/null +++ b/test/helpers/context/AutheliaServer.ts @@ -0,0 +1,26 @@ +import fs from 'fs'; +import AutheliaServerWithHotReload from "./AutheliaServerWithHotReload"; +import AutheliaServerInterface from './AutheliaServerInterface'; +import AutheliaServerFromDist from './AutheliaServerFromDist'; + +class AutheliaServer implements AutheliaServerInterface { + private runnerImpl: AutheliaServerInterface; + + constructor(configPath: string) { + if (fs.existsSync('.suite')) { + this.runnerImpl = new AutheliaServerWithHotReload(configPath); + } else { + this.runnerImpl = new AutheliaServerFromDist(configPath, true); + } + } + + async start() { + await this.runnerImpl.start(); + } + + async stop() { + await this.runnerImpl.stop(); + } +} + +export default AutheliaServer; \ No newline at end of file diff --git a/test/helpers/context/AutheliaServerFromDist.ts b/test/helpers/context/AutheliaServerFromDist.ts new file mode 100644 index 000000000..3a347b37f --- /dev/null +++ b/test/helpers/context/AutheliaServerFromDist.ts @@ -0,0 +1,39 @@ +import AutheliaServerInterface from './AutheliaServerInterface'; +import ChildProcess from 'child_process'; +import treeKill = require('tree-kill'); +import fs from 'fs'; + +class AutheliaServerFromDist implements AutheliaServerInterface { + private configPath: string; + private logInFile: boolean; + private serverProcess: ChildProcess.ChildProcess | undefined; + + constructor(configPath: string, logInFile: boolean = false) { + this.configPath = configPath; + this.logInFile = logInFile; + } + + async start() { + this.serverProcess = ChildProcess.spawn('./scripts/authelia-scripts serve ' + this.configPath, { + shell: true + } as any); + if (this.logInFile) { + var logStream = fs.createWriteStream('/tmp/authelia-server.log', {flags: 'a'}); + this.serverProcess.stdout.pipe(logStream); + this.serverProcess.stderr.pipe(logStream); + } else { + this.serverProcess.stdout.pipe(process.stdout); + this.serverProcess.stderr.pipe(process.stderr); + } + this.serverProcess.on('exit', (statusCode) => { + console.log('Authelia server exited with code ' + statusCode); + }) + } + + async stop() { + if (!this.serverProcess) return; + treeKill(this.serverProcess.pid, 'SIGKILL'); + } +} + +export default AutheliaServerFromDist; \ No newline at end of file diff --git a/test/helpers/context/AutheliaServerInterface.ts b/test/helpers/context/AutheliaServerInterface.ts new file mode 100644 index 000000000..5ac11a54a --- /dev/null +++ b/test/helpers/context/AutheliaServerInterface.ts @@ -0,0 +1,7 @@ + +interface AutheliaServerInterface { + start(): Promise; + stop(): Promise +} + +export default AutheliaServerInterface; \ No newline at end of file diff --git a/test/helpers/context/AutheliaServerWithHotReload.ts b/test/helpers/context/AutheliaServerWithHotReload.ts new file mode 100644 index 000000000..7a0ec8fe0 --- /dev/null +++ b/test/helpers/context/AutheliaServerWithHotReload.ts @@ -0,0 +1,149 @@ +import Chokidar from 'chokidar'; +import fs from 'fs'; +import { exec } from '../utils/exec'; +import ChildProcess from 'child_process'; +import kill from 'tree-kill'; +import AutheliaServerInterface from './AutheliaServerInterface'; + +class AutheliaServerWithHotReload implements AutheliaServerInterface { + private watcher: Chokidar.FSWatcher; + private configPath: string; + private AUTHELIA_INTERRUPT_FILENAME = '.authelia-interrupt'; + private serverProcess: ChildProcess.ChildProcess | undefined; + private clientProcess: ChildProcess.ChildProcess | undefined; + + constructor(configPath: string) { + this.configPath = configPath; + this.watcher = Chokidar.watch(['server', 'shared/**/*.ts', 'node_modules', + this.AUTHELIA_INTERRUPT_FILENAME, configPath], { + persistent: true, + ignoreInitial: true, + }); + } + + private async startServer() { + await exec('./node_modules/.bin/tslint -c server/tslint.json -p server/tsconfig.json') + this.serverProcess = ChildProcess.spawn('./node_modules/.bin/ts-node', + ['-P', './server/tsconfig.json', './server/src/index.ts', this.configPath], { + env: {...process.env}, + }); + this.serverProcess.stdout.pipe(process.stdout); + this.serverProcess.stderr.pipe(process.stderr); + this.serverProcess.on('exit', () => { + console.log('Authelia server exited.'); + if (!this.serverProcess) return; + this.serverProcess.removeAllListeners(); + this.serverProcess = undefined; + }); + } + + private killServer() { + return new Promise((resolve, reject) => { + if (this.serverProcess) { + try { + const timeout = setTimeout( + () => reject(new Error('Server not killed after timeout.')), 10000); + this.serverProcess.on('exit', () => { + clearTimeout(timeout); + resolve(); + }); + kill(this.serverProcess.pid, 'SIGKILL'); + } catch (e) { + reject(e); + } + } else { + resolve(); + } + }); + } + + private async startClient() { + this.clientProcess = ChildProcess.spawn('npm', ['run', 'start'], { + cwd: './client', + env: { + ...process.env, + 'BROWSER': 'none' + } + }); + this.clientProcess.stdout.pipe(process.stdout); + this.clientProcess.stderr.pipe(process.stderr); + this.clientProcess.on('exit', () => { + console.log('Authelia client exited.'); + if (!this.clientProcess) return; + this.clientProcess.removeAllListeners(); + this.clientProcess = undefined; + }) + } + + private killClient() { + return new Promise((resolve, reject) => { + if (this.clientProcess) { + try { + const timeout = setTimeout( + () => reject(new Error('Server not killed after timeout.')), 10000); + this.clientProcess.on('exit', () => { + clearTimeout(timeout); + resolve(); + }); + kill(this.clientProcess.pid, 'SIGKILL'); + } catch (e) { + reject(e); + } + } else { + resolve(); + } + }); + } + + private async generateConfigurationSchema() { + await exec('./node_modules/.bin/typescript-json-schema -o ' + + 'server/src/lib/configuration/Configuration.schema.json ' + + '--strictNullChecks --required server/tsconfig.json Configuration'); + } + + /** + * Handle file changes. + * @param path The path of the file that has been changed. + */ + private async onFileChanged(path: string) { + console.log(`File ${path} has been changed, reloading...`); + if (path.startsWith('server/src/lib/configuration/schema')) { + console.log('Schema needs to be regenerated.'); + await this.generateConfigurationSchema(); + } + else if (path === this.AUTHELIA_INTERRUPT_FILENAME) { + if (fs.existsSync(path)) { + console.log('Authelia is being interrupted.'); + await this.killServer(); + } else { + console.log('Authelia is restarting.'); + await this.startServer(); + } + return; + } + await this.killServer(); + await this.startServer(); + } + + async start() { + if (fs.existsSync(this.AUTHELIA_INTERRUPT_FILENAME)) { + console.log('Authelia is interrupted. Consider removing ' + this.AUTHELIA_INTERRUPT_FILENAME + ' if it\'s not expected.'); + return; + } + + console.log('Start watching file changes...'); + this.watcher.on('add', (p) => this.onFileChanged(p)); + this.watcher.on('unlink', (p) => this.onFileChanged(p)); + this.watcher.on('change', (p) => this.onFileChanged(p)); + + this.startClient(); + this.startServer(); + } + + async stop() { + await this.killClient(); + await this.killServer(); + } +} + +export default AutheliaServerWithHotReload; \ No newline at end of file diff --git a/test/helpers/context/AutheliaSuite.ts b/test/helpers/context/AutheliaSuite.ts new file mode 100644 index 000000000..e883ff024 --- /dev/null +++ b/test/helpers/context/AutheliaSuite.ts @@ -0,0 +1,33 @@ +import WithEnvironment from "./WithEnvironment"; +import fs from 'fs'; + +interface AutheliaSuiteType { + (suitePath: string, cb: (this: Mocha.ISuiteCallbackContext) => void): Mocha.ISuite; + only: (suitePath: string, cb: (this: Mocha.ISuiteCallbackContext) => void) => Mocha.ISuite; +} + +function AutheliaSuiteBase(suitePath: string, + cb: (this: Mocha.ISuiteCallbackContext) => void, + context: (description: string, ctx: (this: Mocha.ISuiteCallbackContext) => void) => Mocha.ISuite) { + const suite = suitePath.split('/').slice(-1)[0]; + return context('Suite: ' + suite, function(this: Mocha.ISuiteCallbackContext) { + if (!fs.existsSync('.suite')) { + WithEnvironment(suite); + } + + cb.call(this); + }); +} + +const AutheliaSuite = function(suitePath: string, + cb: (this: Mocha.ISuiteCallbackContext) => void) { + return AutheliaSuiteBase(suitePath, cb, describe); +} + + +AutheliaSuite.only = function(suitePath: string, + cb: (this: Mocha.ISuiteCallbackContext) => void) { + return AutheliaSuiteBase(suitePath, cb, describe.only); +} + +export default AutheliaSuite as AutheliaSuiteType; \ No newline at end of file diff --git a/test/helpers/context/DockerCompose.ts b/test/helpers/context/DockerCompose.ts new file mode 100644 index 000000000..ddf6c963a --- /dev/null +++ b/test/helpers/context/DockerCompose.ts @@ -0,0 +1,28 @@ +import { exec } from '../../helpers/utils/exec'; +import { execSync } from 'child_process'; + +class DockerCompose { + private commandPrefix: string; + + constructor(composeFiles: string[]) { + this.commandPrefix = 'docker-compose ' + composeFiles.map((f) => '-f ' + f).join(' '); + } + + async up() { + return await exec(this.commandPrefix + ' up -d'); + } + + async down() { + return await exec(this.commandPrefix + ' down'); + } + + async restart(service: string) { + return await exec(this.commandPrefix + ' restart ' + service); + } + + async ps() { + return Promise.resolve(execSync(this.commandPrefix + ' ps').toString('utf-8')); + } +} + +export default DockerCompose; \ No newline at end of file diff --git a/test/helpers/context/DockerEnvironment.ts b/test/helpers/context/DockerEnvironment.ts new file mode 100644 index 000000000..5d3f1e764 --- /dev/null +++ b/test/helpers/context/DockerEnvironment.ts @@ -0,0 +1,19 @@ +import DockerCompose from "./DockerCompose"; + +class DockerEnvironment { + private dockerCompose: DockerCompose; + + constructor(composeFiles: string[]) { + this.dockerCompose = new DockerCompose(composeFiles); + } + + async start() { + await this.dockerCompose.up(); + } + + async stop() { + await this.dockerCompose.down(); + } +} + +export default DockerEnvironment; \ No newline at end of file diff --git a/test/helpers/context/WithDriver.ts b/test/helpers/context/WithDriver.ts new file mode 100644 index 000000000..adb4c7f0c --- /dev/null +++ b/test/helpers/context/WithDriver.ts @@ -0,0 +1,39 @@ +require("chromedriver"); +import chrome from 'selenium-webdriver/chrome'; +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; + +export async function StartDriver() { + let options = new chrome.Options(); + + if (process.env['HEADLESS'] == 'y') { + options = options.headless(); + } + + const driver = new SeleniumWebdriver.Builder() + .forBrowser("chrome") + .setChromeOptions(options) + .build(); + return driver; +} + +export async function StopDriver(driver: WebDriver) { + return await driver.quit(); +} + +export default function(forEach: boolean = false) { + if (forEach) { + beforeEach(async function() { + this.driver = await StartDriver(); + }); + afterEach(async function() { + await StopDriver(this.driver); + }); + } else { + before(async function() { + this.driver = await StartDriver(); + }); + after(async function() { + await StopDriver(this.driver) + }); + } +} \ No newline at end of file diff --git a/test/helpers/context/WithEnvironment.ts b/test/helpers/context/WithEnvironment.ts new file mode 100644 index 000000000..937871158 --- /dev/null +++ b/test/helpers/context/WithEnvironment.ts @@ -0,0 +1,22 @@ +import sleep from '../utils/sleep'; + +export default function WithEnvironment(suite: string, waitTimeout: number = 5000) { + var { setup, teardown } = require(`../../suites/${suite}/environment`); + + before(async function() { + this.timeout(30000); + + console.log('Preparing environment...'); + await setup(); + await sleep(waitTimeout); + }); + + after(async function() { + this.timeout(30000); + + console.log('Stopping environment...'); + await teardown(); + + await sleep(waitTimeout); + }); +} \ No newline at end of file diff --git a/test/helpers/fill-field.ts b/test/helpers/fill-field.ts deleted file mode 100644 index 0e2b6b9d6..000000000 --- a/test/helpers/fill-field.ts +++ /dev/null @@ -1,10 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); - -export default function(driver: any, fieldName: string, text: string) { - return driver.wait( - SeleniumWebdriver.until.elementLocated( - SeleniumWebdriver.By.name(fieldName)), 5000) - .then(function (el) { - return el.sendKeys(text); - }); -}; \ No newline at end of file diff --git a/test/helpers/fill-login-page-and-click.ts b/test/helpers/fill-login-page-and-click.ts deleted file mode 100644 index 11f16b7f6..000000000 --- a/test/helpers/fill-login-page-and-click.ts +++ /dev/null @@ -1,29 +0,0 @@ -import Bluebird = require("bluebird"); -import SeleniumWebdriver = require("selenium-webdriver"); - -export default function( - driver: any, - username: string, - password: string, - keepMeLoggedIn: boolean = false) { - return driver.wait(SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.id("username")), 5000) - .then(() => { - return driver.findElement(SeleniumWebdriver.By.id("username")) - .sendKeys(username); - }) - .then(() => { - return driver.findElement(SeleniumWebdriver.By.id("password")) - .sendKeys(password); - }) - .then(() => { - if (keepMeLoggedIn) { - return driver.findElement(SeleniumWebdriver.By.id("keep_me_logged_in")) - .click(); - } - return Bluebird.resolve(); - }) - .then(() => { - return driver.findElement(SeleniumWebdriver.By.tagName("button")) - .click(); - }); -}; \ No newline at end of file diff --git a/test/helpers/full-login.ts b/test/helpers/full-login.ts deleted file mode 100644 index 5cab80c89..000000000 --- a/test/helpers/full-login.ts +++ /dev/null @@ -1,12 +0,0 @@ -import VisitPage from "./visit-page"; -import FillLoginPageWithUserAndPasswordAndClick from "./fill-login-page-and-click"; -import ValidateTotp from "./validate-totp"; -import WaitRedirected from "./wait-redirected"; - -// Validate the two factors! -export default function(driver: any, url: string, user: string, secret: string) { - return VisitPage(driver, `https://login.example.com:8080/?rd=${url}`) - .then(() => FillLoginPageWithUserAndPasswordAndClick(driver, user, 'password')) - .then(() => ValidateTotp(driver, secret)) - .then(() => WaitRedirected(driver, "https://admin.example.com:8080/secret.html")); -} \ No newline at end of file diff --git a/test/helpers/get-identity-link.ts b/test/helpers/get-identity-link.ts deleted file mode 100644 index 06381b132..000000000 --- a/test/helpers/get-identity-link.ts +++ /dev/null @@ -1,34 +0,0 @@ -import Bluebird = require("bluebird"); -import Fs = require("fs"); -import Request = require("request-promise"); - -export function GetLinkFromFile(): Bluebird { - return Bluebird.promisify(Fs.readFile)("/tmp/authelia/notification.txt") - .then(function (data: any) { - const regexp = new RegExp(/Link: (.+)/); - const match = regexp.exec(data); - const link = match[1]; - return Bluebird.resolve(link); - }); -}; - -export function GetLinkFromEmail(): Bluebird { - return Request({ - method: "GET", - uri: "http://localhost:8085/messages", - json: true - }) - .then(function (data: any) { - const messageId = data[data.length - 1].id; - return Request({ - method: "GET", - uri: `http://localhost:8085/messages/${messageId}.html` - }); - }) - .then(function (data: any) { - const regexp = new RegExp(/Continue<\/a>/); - const match = regexp.exec(data); - const link = match[1]; - return Bluebird.resolve(link); - }); -}; \ No newline at end of file diff --git a/test/helpers/login-and-register-totp.ts b/test/helpers/login-and-register-totp.ts deleted file mode 100644 index 8837254e0..000000000 --- a/test/helpers/login-and-register-totp.ts +++ /dev/null @@ -1,10 +0,0 @@ -import RegisterTotp from './register-totp'; -import WaitRedirected from './wait-redirected'; -import LoginAs from './login-as'; -import Bluebird = require("bluebird"); - -export default function(driver: any, user: string, email?: boolean): Bluebird { - return LoginAs(driver, user) - .then(() => WaitRedirected(driver, "https://login.example.com:8080/secondfactor")) - .then(() => RegisterTotp(driver, email)); -} \ No newline at end of file diff --git a/test/helpers/login-as.ts b/test/helpers/login-as.ts deleted file mode 100644 index ebb6707f8..000000000 --- a/test/helpers/login-as.ts +++ /dev/null @@ -1,7 +0,0 @@ -import VisitPage from "./visit-page"; -import FillLoginPageAndClick from './fill-login-page-and-click'; - -export default function(driver: any, user: string) { - return VisitPage(driver, "https://login.example.com:8080/") - .then(() => FillLoginPageAndClick(driver, user, "password")); -} \ No newline at end of file diff --git a/test/helpers/register-totp.ts b/test/helpers/register-totp.ts deleted file mode 100644 index 2d84fdf67..000000000 --- a/test/helpers/register-totp.ts +++ /dev/null @@ -1,23 +0,0 @@ -import Bluebird = require("bluebird"); -import SeleniumWebdriver = require("selenium-webdriver"); -import {GetLinkFromFile, GetLinkFromEmail} from '../helpers/get-identity-link'; - -export default function(driver: any, email?: boolean): Bluebird { - return driver.wait(SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.className("register-totp")), 5000) - .then(function () { - return driver.findElement(SeleniumWebdriver.By.className("register-totp")).click(); - }) - .then(function () { - if(email) return GetLinkFromEmail(); - else return GetLinkFromFile(); - }) - .then(function (link: string) { - return driver.get(link); - }) - .then(function () { - return driver.wait(SeleniumWebdriver.until.elementLocated(SeleniumWebdriver.By.id("secret")), 5000); - }) - .then(function () { - return driver.findElement(SeleniumWebdriver.By.id("secret")).getText(); - }); -}; diff --git a/test/helpers/see-notification.ts b/test/helpers/see-notification.ts deleted file mode 100644 index b9fa6d8e7..000000000 --- a/test/helpers/see-notification.ts +++ /dev/null @@ -1,18 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); -import Assert = require("assert"); - -export default function(driver: any, type: string, message: string) { - const notificationEl = driver.findElement(SeleniumWebdriver.By.className("notification")); - return driver.wait(SeleniumWebdriver.until.elementIsVisible(notificationEl), 5000) - .then(function () { - return notificationEl.getText(); - }) - .then(function (txt: string) { - Assert.equal(message, txt); - return notificationEl.getAttribute("class"); - }) - .then(function (classes: string) { - Assert(classes.indexOf(type) > -1, "Class '" + type + "' not found in notification element."); - return driver.sleep(500); - }); -} \ No newline at end of file diff --git a/test/helpers/utils/Requests.ts b/test/helpers/utils/Requests.ts new file mode 100644 index 000000000..5b5a1e613 --- /dev/null +++ b/test/helpers/utils/Requests.ts @@ -0,0 +1,60 @@ +import Request from 'request-promise'; +import Fetch from 'node-fetch'; +import Assert from 'assert'; +import { StatusCodeError } from 'request-promise/errors'; + +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +export async function GET_ExpectError(url: string, statusCode: number) { + try { + await Request.get(url, { + json: true, + rejectUnauthorized: false, + }); + throw new Error('No response'); + } catch (e) { + if (e instanceof StatusCodeError) { + Assert.equal(e.statusCode, statusCode); + return; + } + } + return; +} + +// Sent a GET request to the url and expect a 401 +export async function GET_Expect401(url: string) { + return await GET_ExpectError(url, 401); +} + +export async function GET_Expect502(url: string) { + return await GET_ExpectError(url, 502); +} + +export async function POST_Expect401(url: string, body?: any) { + try { + await Request.post(url, { + json: true, + rejectUnauthorized: false, + body + }); + throw new Error('No response'); + } catch (e) { + if (e instanceof StatusCodeError) { + Assert.equal(e.statusCode, 401); + return; + } + } + return; +} + +export async function GET_ExpectRedirect(url: string, redirectionUrl: string) { + const response = await Fetch(url, {redirect: 'manual'}); + + if (response.status == 302) { + const body = await response.text(); + Assert.equal(body, 'Found. Redirecting to ' + redirectionUrl); + return; + } + + throw new Error('No redirect'); +} \ No newline at end of file diff --git a/test/helpers/utils/exec.ts b/test/helpers/utils/exec.ts new file mode 100644 index 000000000..5fe77cc4e --- /dev/null +++ b/test/helpers/utils/exec.ts @@ -0,0 +1,20 @@ +var spawn = require('child_process').spawn; + + +export function exec(command: string): Promise { + return new Promise((resolve, reject) => { + const cmd = spawn(command, { + shell: true, + }); + + cmd.stdout.pipe(process.stdout); + cmd.stderr.pipe(process.stderr); + cmd.on('exit', (statusCode: number) => { + if (statusCode == 0) { + resolve(); + return; + } + reject(new Error('Exited with status code ' + statusCode)); + }); + }); +} diff --git a/test/helpers/utils/sleep.ts b/test/helpers/utils/sleep.ts new file mode 100644 index 000000000..d8321ed06 --- /dev/null +++ b/test/helpers/utils/sleep.ts @@ -0,0 +1,5 @@ + + +export default function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/test/helpers/validate-totp.ts b/test/helpers/validate-totp.ts deleted file mode 100644 index 7ae408c69..000000000 --- a/test/helpers/validate-totp.ts +++ /dev/null @@ -1,20 +0,0 @@ -import Speakeasy = require("speakeasy"); -import SeleniumWebdriver = require("selenium-webdriver"); -import ClickOnButton from "./click-on-button"; - -export default function(driver: any, secret: string) { - const token = Speakeasy.totp({ - secret: secret, - encoding: "base32" - }); - return driver.wait( - SeleniumWebdriver.until.elementLocated( - SeleniumWebdriver.By.id("token")), 5000) - .then(function () { - return driver.findElement(SeleniumWebdriver.By.id("token")) - .sendKeys(token); - }) - .then(function () { - return ClickOnButton(driver, "Sign in"); - }); -} \ No newline at end of file diff --git a/test/helpers/visit-page.ts b/test/helpers/visit-page.ts deleted file mode 100644 index b40b6b565..000000000 --- a/test/helpers/visit-page.ts +++ /dev/null @@ -1,8 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); - -export default function(driver: any, url: string, timeout: number = 5000) { - return driver.get(url) - .then(function () { - return driver.wait(SeleniumWebdriver.until.urlIs(url), timeout); - }); -} \ No newline at end of file diff --git a/test/helpers/wait-redirected.ts b/test/helpers/wait-redirected.ts deleted file mode 100644 index 556993988..000000000 --- a/test/helpers/wait-redirected.ts +++ /dev/null @@ -1,5 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); - -export default function(driver: any, url: string, timeout: number = 5000) { - return driver.wait(SeleniumWebdriver.until.urlIs(url), timeout); -} \ No newline at end of file diff --git a/test/helpers/with-driver.ts b/test/helpers/with-driver.ts deleted file mode 100644 index c2775a037..000000000 --- a/test/helpers/with-driver.ts +++ /dev/null @@ -1,13 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); - -export default function() { - before(function() { - this.driver = new SeleniumWebdriver.Builder() - .forBrowser("chrome") - .build(); - }) - - after(function() { - this.driver.quit(); - }); -} \ No newline at end of file diff --git a/test/inactivity/00-suite.ts b/test/inactivity/00-suite.ts deleted file mode 100644 index 0bb67bf6a..000000000 --- a/test/inactivity/00-suite.ts +++ /dev/null @@ -1,37 +0,0 @@ -require("chromedriver"); -import Bluebird = require("bluebird"); -import Configuration = require("../configuration"); -import Environment = require("../environment"); - -import ChildProcess = require('child_process'); -const execAsync = Bluebird.promisify(ChildProcess.exec); - -const includes = [ - "docker-compose.test.yml", - "example/compose/docker-compose.base.yml", - "example/compose/nginx/minimal/docker-compose.yml", - "example/compose/smtp/docker-compose.yml", -] - - -before(function() { - this.timeout(20000); - this.environment = new Environment.Environment(includes); - this.configuration = new Configuration.Configuration(); - - return this.configuration.setup( - "config.minimal.yml", - "config.test.yml", - conf => { - conf.session.inactivity = 2000; - }) - .then(() => execAsync("cp users_database.yml users_database.test.yml")) - .then(() => this.environment.setup(2000)); -}); - -after(function() { - this.timeout(30000); - return this.configuration.cleanup() - .then(() => execAsync("rm users_database.test.yml")) - .then(() => this.environment.cleanup()); -}); \ No newline at end of file diff --git a/test/inactivity/keep_me_logged_in.ts b/test/inactivity/keep_me_logged_in.ts deleted file mode 100644 index edbd4437f..000000000 --- a/test/inactivity/keep_me_logged_in.ts +++ /dev/null @@ -1,48 +0,0 @@ -import Bluebird = require("bluebird"); -import LoginAndRegisterTotp from "../helpers/login-and-register-totp"; -import VisitPage from "../helpers/visit-page"; -import FillLoginPageWithUserAndPasswordAndClick from "../helpers/fill-login-page-and-click"; -import WithDriver from "../helpers/with-driver"; -import ValidateTotp from "../helpers/validate-totp"; -import WaitRedirected from "../helpers/wait-redirected"; - -describe("Keep me logged in", function() { - this.timeout(15000); - WithDriver(); - - before(function() { - const that = this; - return LoginAndRegisterTotp(this.driver, "john", true) - .then(function(secret: string) { - that.secret = secret; - if(!secret) return Bluebird.reject(new Error("No secret!")); - return Bluebird.resolve(); - }); - }); - - it("should disconnect user after inactivity period", function() { - const that = this; - const driver = this.driver; - return VisitPage(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html") - .then(() => FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password', false)) - .then(() => ValidateTotp(driver, that.secret)) - .then(() => WaitRedirected(driver, "https://admin.example.com:8080/secret.html")) - .then(() => VisitPage(driver, "https://home.example.com:8080/")) - .then(() => driver.sleep(3000)) - .then(() => driver.get("https://admin.example.com:8080/secret.html")) - .then(() => WaitRedirected(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html")) - }); - - it.only("should keep user logged in after inactivity period", function() { - const that = this; - const driver = this.driver; - return VisitPage(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html") - .then(() => FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password', true)) - .then(() => ValidateTotp(driver, that.secret)) - .then(() => WaitRedirected(driver, "https://admin.example.com:8080/secret.html")) - .then(() => VisitPage(driver, "https://home.example.com:8080/")) - .then(() => driver.sleep(5000)) - .then(() => driver.get("https://admin.example.com:8080/secret.html")) - .then(() => WaitRedirected(driver, "https://admin.example.com:8080/secret.html")) - }); -}); \ No newline at end of file diff --git a/test/minimal-config/00-suite.ts b/test/minimal-config/00-suite.ts deleted file mode 100644 index 0ee3b6747..000000000 --- a/test/minimal-config/00-suite.ts +++ /dev/null @@ -1,33 +0,0 @@ -require("chromedriver"); -import ChildProcess = require('child_process'); -import Bluebird = require("bluebird"); - -import Environment = require('../environment'); - -const execAsync = Bluebird.promisify(ChildProcess.exec); - -const includes = [ - "docker-compose.minimal.yml", - "example/compose/docker-compose.base.yml", - "example/compose/nginx/minimal/docker-compose.yml", - "example/compose/smtp/docker-compose.yml", -] - - -before(function() { - this.timeout(20000); - this.environment = new Environment.Environment(includes); - - return execAsync("cp users_database.yml users_database.test.yml") - .then(() => this.environment.setup(2000)); -}); - -after(function() { - this.timeout(30000); - return execAsync("rm users_database.test.yml") - .then(() => { - if(process.env.KEEP_ENV != "true") { - return this.environment.cleanup(); - } - }); -}); \ No newline at end of file diff --git a/test/minimal-config/bad_password.ts b/test/minimal-config/bad_password.ts deleted file mode 100644 index e629a28ac..000000000 --- a/test/minimal-config/bad_password.ts +++ /dev/null @@ -1,30 +0,0 @@ -import WithDriver from '../helpers/with-driver'; -import FillLoginPageWithUserAndPasswordAndClick from '../helpers/fill-login-page-and-click'; -import VisitPage from '../helpers/visit-page'; -import SeeNotification from '../helpers/see-notification'; -import {AUTHENTICATION_FAILED} from '../../shared/UserMessages'; - -/** - * When user provides bad password, - * Then he gets a notification message. - */ -describe("Provide bad password", function() { - WithDriver(); - - describe('failed login as john', function() { - before(function() { - this.timeout(10000); - - const driver = this.driver; - return VisitPage(driver, "https://login.example.com:8080/") - .then(function() { - return FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'bad_password'); - }); - }); - - it('should get a notification message', function() { - this.timeout(10000); - return SeeNotification(this.driver, "error", AUTHENTICATION_FAILED); - }); - }); -}); diff --git a/test/minimal-config/fail_totp.ts b/test/minimal-config/fail_totp.ts deleted file mode 100644 index b347ac476..000000000 --- a/test/minimal-config/fail_totp.ts +++ /dev/null @@ -1,39 +0,0 @@ -require("chromedriver"); -import WithDriver from '../helpers/with-driver'; -import FillLoginPageWithUserAndPasswordAndClick from '../helpers/fill-login-page-and-click'; -import VisitPage from '../helpers/visit-page'; -import ValidateTotp from '../helpers/validate-totp'; -import LoginAndRegisterTotp from '../helpers/login-and-register-totp'; -import seeNotification from "../helpers/see-notification"; -import {AUTHENTICATION_TOTP_FAILED} from '../../shared/UserMessages'; - -/** - * Given john has registered a TOTP secret, - * When he fails the TOTP challenge, - * Then he gets a notification message. - */ -describe('Fail TOTP challenge', function() { - this.timeout(10000); - WithDriver(); - - describe('successfully login as john', function() { - before(function() { - return LoginAndRegisterTotp(this.driver, "john", true); - }); - - describe('fail second factor', function() { - before(function() { - const BAD_TOKEN = "125478"; - const driver = this.driver; - - return VisitPage(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html") - .then(() => FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password')) - .then(() => ValidateTotp(driver, BAD_TOKEN)); - }); - - it("get a notification message", function() { - return seeNotification(this.driver, "error", AUTHENTICATION_TOTP_FAILED); - }); - }); - }); -}); diff --git a/test/minimal-config/register_totp.ts b/test/minimal-config/register_totp.ts deleted file mode 100644 index 65d419e7c..000000000 --- a/test/minimal-config/register_totp.ts +++ /dev/null @@ -1,32 +0,0 @@ -import SeleniumWebdriver = require("selenium-webdriver"); -import WithDriver from '../helpers/with-driver'; -import LoginAndRegisterTotp from '../helpers/login-and-register-totp'; - -/** - * Given the user logs in as john, - * When he register a TOTP token, - * Then he reach a page containing the secret as string an qrcode - */ -describe('Registering TOTP', function() { - this.timeout(10000); - WithDriver(); - - describe('successfully login as john', function() { - before('register successfully', function() { - this.timeout(10000); - return LoginAndRegisterTotp(this.driver, "john", true); - }) - - it("should see generated qrcode", function() { - this.driver.findElement( - SeleniumWebdriver.By.id("qrcode"), - 5000); - }); - - it("should see generated secret", function() { - this.driver.findElement( - SeleniumWebdriver.By.id("secret"), - 5000); - }); - }); -}); diff --git a/test/minimal-config/reset_password.ts b/test/minimal-config/reset_password.ts deleted file mode 100644 index 3ddfeb047..000000000 --- a/test/minimal-config/reset_password.ts +++ /dev/null @@ -1,42 +0,0 @@ -require("chromedriver"); -import Bluebird = require("bluebird"); -import ChildProcess = require("child_process"); - -import WithDriver from '../helpers/with-driver'; -import VisitPage from '../helpers/visit-page'; -import ClickOnLink from '../helpers/click-on-link'; -import ClickOnButton from '../helpers/click-on-button'; -import WaitRedirect from '../helpers/wait-redirected'; -import FillField from "../helpers/fill-field"; -import {GetLinkFromEmail} from "../helpers/get-identity-link"; -import FillLoginPageAndClick from "../helpers/fill-login-page-and-click"; - -const execAsync = Bluebird.promisify(ChildProcess.exec); - -describe('Reset password', function() { - this.timeout(10000); - WithDriver(); - - after(() => { - return execAsync("cp users_database.yml users_database.test.yml"); - }) - - describe('click on reset password', function() { - it("should reset password for john", function() { - return VisitPage(this.driver, "https://login.example.com:8080/") - .then(() => ClickOnLink(this.driver, "Forgot password\?")) - .then(() => WaitRedirect(this.driver, "https://login.example.com:8080/password-reset/request")) - .then(() => FillField(this.driver, "username", "john")) - .then(() => ClickOnButton(this.driver, "Reset Password")) - .then(() => this.driver.sleep(1000)) // Simulate the time to read it from mailbox. - .then(() => GetLinkFromEmail()) - .then((link) => VisitPage(this.driver, link)) - .then(() => FillField(this.driver, "password1", "newpass")) - .then(() => FillField(this.driver, "password2", "newpass")) - .then(() => ClickOnButton(this.driver, "Reset Password")) - .then(() => WaitRedirect(this.driver, "https://login.example.com:8080/")) - .then(() => FillLoginPageAndClick(this.driver, "john", "newpass")) - .then(() => WaitRedirect(this.driver, "https://login.example.com:8080/secondfactor")) - }); - }); -}); diff --git a/test/minimal-config/validate_totp.ts b/test/minimal-config/validate_totp.ts deleted file mode 100644 index 4f1a2481e..000000000 --- a/test/minimal-config/validate_totp.ts +++ /dev/null @@ -1,46 +0,0 @@ -require("chromedriver"); -import Bluebird = require("bluebird"); -import WithDriver from '../helpers/with-driver'; -import FillLoginPageWithUserAndPasswordAndClick from '../helpers/fill-login-page-and-click'; -import WaitRedirected from '../helpers/wait-redirected'; -import VisitPage from '../helpers/visit-page'; -import ValidateTotp from '../helpers/validate-totp'; -import AccessSecret from "../helpers/access-secret"; -import LoginAndRegisterTotp from '../helpers/login-and-register-totp'; - -/** - * Given john has registered a TOTP secret, - * When he validates the TOTP second factor, - * Then he has access to secret page. - */ -describe('Validate TOTP factor', function() { - this.timeout(10000); - WithDriver(); - - describe('successfully login as john', function() { - before(function() { - const that = this; - return LoginAndRegisterTotp(this.driver, "john", true) - .then(function(secret: string) { - that.secret = secret; - }) - }); - - describe('validate second factor', function() { - before(function() { - const secret = this.secret; - if(!secret) return Bluebird.reject(new Error("No secret!")); - const driver = this.driver; - - return VisitPage(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html") - .then(() => FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password')) - .then(() => ValidateTotp(driver, secret)) - .then(() => WaitRedirected(driver, "https://admin.example.com:8080/secret.html")); - }); - - it("should access the secret", function() { - return AccessSecret(this.driver); - }); - }); - }); -}); diff --git a/test/suites/.gitignore b/test/suites/.gitignore new file mode 100644 index 000000000..4df2d1dca --- /dev/null +++ b/test/suites/.gitignore @@ -0,0 +1 @@ +users_database.test.yml \ No newline at end of file diff --git a/test/suites/README.md b/test/suites/README.md new file mode 100644 index 000000000..7558d99d2 --- /dev/null +++ b/test/suites/README.md @@ -0,0 +1,5 @@ +# Authelia Suites + +A **suite** is a kind of virtual environment for Authelia. Please +read the related documentation [here](../docs/suites.md) to get more +details. \ No newline at end of file diff --git a/test/suites/basic/README.md b/test/suites/basic/README.md new file mode 100644 index 000000000..751dfbc5c --- /dev/null +++ b/test/suites/basic/README.md @@ -0,0 +1,13 @@ +# Basic suite + +This suite has been created to test Authelia with basic feature in a non highly-available setup. +Authelia basically use an in-memory cache to store user sessions and persist data on disk instead +of using a remote database. Also, the user accounts are stored in file-based database. + +## Components + +Authelia, nginx, fake webmail for registering devices. + +## Tests + +Broad range of tests. \ No newline at end of file diff --git a/test/suites/basic/config.yml b/test/suites/basic/config.yml new file mode 100644 index 000000000..7ac889061 --- /dev/null +++ b/test/suites/basic/config.yml @@ -0,0 +1,110 @@ +############################################################### +# Authelia minimal configuration # +############################################################### + +port: 9091 + +logs_level: debug + +default_redirection_url: https://home.example.com:8080/ + +authentication_backend: + file: + path: ./test/suites/basic/users_database.test.yml + +session: + secret: unsecure_session_secret + domain: example.com + expiration: 3600000 # 1 hour + inactivity: 300000 # 5 minutes + +# Configuration of the storage backend used to store data and secrets. i.e. totp data +storage: + local: + path: /tmp/authelia/db + +# TOTP Issuer Name +# +# This will be the issuer name displayed in Google Authenticator +# See: https://github.com/google/google-authenticator/wiki/Key-Uri-Format for more info on issuer names +totp: + issuer: example.com + +# Access Control +# +# Access control is a set of rules you can use to restrict user access to certain +# resources. +access_control: + # Default policy can either be `bypass`, `one_factor`, `two_factor` or `deny`. + default_policy: deny + + rules: + - domain: single_factor.example.com + policy: one_factor + + - domain: '*.example.com' + subject: "group:admins" + policy: two_factor + + - domain: dev.example.com + resources: + - '^/users/john/.*$' + subject: "user:john" + policy: two_factor + + - domain: dev.example.com + resources: + - '^/users/harry/.*$' + subject: "user:harry" + policy: two_factor + + - domain: '*.mail.example.com' + subject: "user:bob" + policy: two_factor + + - domain: dev.example.com + resources: + - '^/users/bob/.*$' + subject: "user:bob" + policy: two_factor + + +# Configuration of the authentication regulation mechanism. +regulation: + # Set it to 0 to disable max_retries. + max_retries: 3 + + # The user is banned if the authenticaction failed `max_retries` times in a `find_time` seconds window. + find_time: 300 + + # The length of time before a banned user can login again. + ban_time: 900 + +# Default redirection URL +# +# Note: this parameter is optional. If not provided, user won't +# be redirected upon successful authentication. +#default_redirection_url: https://authelia.example.domain + +notifier: + # For testing purpose, notifications can be sent in a file + # filesystem: + # filename: /tmp/authelia/notification.txt + + # Use your email account to send the notifications. You can use an app password. + # List of valid services can be found here: https://nodemailer.com/smtp/well-known/ + ## email: + ## username: user@example.com + ## password: yourpassword + ## sender: admin@example.com + ## service: gmail + + # Use a SMTP server for sending notifications + smtp: + username: test + password: password + secure: false + host: 127.0.0.1 + port: 1025 + sender: admin@example.com + diff --git a/test/suites/basic/environment.ts b/test/suites/basic/environment.ts new file mode 100644 index 000000000..6d865c6a9 --- /dev/null +++ b/test/suites/basic/environment.ts @@ -0,0 +1,28 @@ +import fs from 'fs'; +import { exec } from "../../helpers/utils/exec"; +import AutheliaServer from "../../helpers/context/AutheliaServer"; +import DockerEnvironment from "../../helpers/context/DockerEnvironment"; + +const autheliaServer = new AutheliaServer(__dirname + '/config.yml'); +const dockerEnv = new DockerEnvironment([ + 'docker-compose.yml', + 'example/compose/nginx/backend/docker-compose.yml', + 'example/compose/nginx/portal/docker-compose.yml', + 'example/compose/smtp/docker-compose.yml', +]) + +async function setup() { + await exec(`cp ${__dirname}/users_database.yml ${__dirname}/users_database.test.yml`); + await exec('mkdir -p /tmp/authelia/db'); + await exec('./example/compose/nginx/portal/render.js ' + (fs.existsSync('.suite') ? '': '--production')); + await dockerEnv.start(); + await autheliaServer.start(); +} + +async function teardown() { + await dockerEnv.stop(); + await autheliaServer.stop(); + await exec('rm -r /tmp/authelia/db'); +} + +export { setup, teardown }; \ No newline at end of file diff --git a/test/suites/basic/scenarii/BackendProtection.ts b/test/suites/basic/scenarii/BackendProtection.ts new file mode 100644 index 000000000..8de7c4ff3 --- /dev/null +++ b/test/suites/basic/scenarii/BackendProtection.ts @@ -0,0 +1,45 @@ +import { POST_Expect401, GET_Expect401 } from "../../../helpers/utils/Requests"; + +export default function() { + // POST + it('should return 401 error when posting to https://login.example.com:8080/api/totp', async function() { + await POST_Expect401('https://login.example.com:8080/api/totp', { token: 'MALICIOUS_TOKEN' }); + }); + + it('should return 401 error when posting to https://login.example.com:8080/api/u2f/sign', async function() { + await POST_Expect401('https://login.example.com:8080/api/u2f/sign'); + }); + + it('should return 401 error when posting to https://login.example.com:8080/api/u2f/register', async function() { + await POST_Expect401('https://login.example.com:8080/api/u2f/register'); + }); + + + // GET + it('should return 401 error on GET to https://login.example.com:8080/api/u2f/sign_request', async function() { + await GET_Expect401('https://login.example.com:8080/api/u2f/sign_request'); + }); + + it('should return 401 error on GET to https://login.example.com:8080/api/u2f/register_request', async function() { + await GET_Expect401('https://login.example.com:8080/api/u2f/register_request'); + }); + + + describe('Identity validation endpoints blocked to unauthenticated users', function() { + it('should return 401 error on POST to https://login.example.com:8080/api/secondfactor/u2f/identity/start', async function() { + await POST_Expect401('https://login.example.com:8080/api/secondfactor/u2f/identity/start'); + }); + + it('should return 401 error on POST to https://login.example.com:8080/api/secondfactor/u2f/identity/finish', async function() { + await POST_Expect401('https://login.example.com:8080/api/secondfactor/u2f/identity/finish'); + }); + + it('should return 401 error on POST to https://login.example.com:8080/api/secondfactor/totp/identity/start', async function() { + await POST_Expect401('https://login.example.com:8080/api/secondfactor/totp/identity/start'); + }); + + it('should return 401 error on POST to https://login.example.com:8080/api/secondfactor/totp/identity/finish', async function() { + await POST_Expect401('https://login.example.com:8080/api/secondfactor/totp/identity/finish'); + }); + }); +} \ No newline at end of file diff --git a/test/suites/basic/scenarii/BadPassword.ts b/test/suites/basic/scenarii/BadPassword.ts new file mode 100644 index 000000000..448657534 --- /dev/null +++ b/test/suites/basic/scenarii/BadPassword.ts @@ -0,0 +1,29 @@ +import FillLoginPageWithUserAndPasswordAndClick from '../../../helpers/FillLoginPageAndClick'; +import {AUTHENTICATION_FAILED} from '../../../../shared/UserMessages'; +import VisitPageAndWaitUrlIs from '../../../helpers/behaviors/VisitPageAndWaitUrlIs'; +import VerifyNotificationDisplayed from '../../../helpers/assertions/VerifyNotificationDisplayed'; +import { StartDriver, StopDriver } from '../../../helpers/context/WithDriver'; + +export default function() { +/** + * When user provides bad password, + * Then he gets a notification message. + */ + describe('failed login as john in first factor', function() { + this.timeout(10000); + + before(async function() { + this.driver = await StartDriver(); + await VisitPageAndWaitUrlIs(this.driver, "https://login.example.com:8080/") + await FillLoginPageWithUserAndPasswordAndClick(this.driver, 'john', 'bad_password'); + }); + + after(async function() { + await StopDriver(this.driver); + }) + + it('should get a notification message', async function () { + await VerifyNotificationDisplayed(this.driver, AUTHENTICATION_FAILED); + }); + }); +} diff --git a/test/suites/basic/scenarii/LogoutRedirectToAlreadyLoggedIn.ts b/test/suites/basic/scenarii/LogoutRedirectToAlreadyLoggedIn.ts new file mode 100644 index 000000000..37530c9a8 --- /dev/null +++ b/test/suites/basic/scenarii/LogoutRedirectToAlreadyLoggedIn.ts @@ -0,0 +1,23 @@ +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import VisitPage from "../../../helpers/VisitPage"; +import VerifyIsAlreadyAuthenticatedStage from "../../../helpers/assertions/VerifyIsAlreadyAuthenticatedStage"; +import RegisterAndLoginTwoFactor from "../../../helpers/behaviors/RegisterAndLoginTwoFactor"; + + +export default function() { + describe('When visiting /logout the user is redirected to already logged in page to log out', function() { + before(async function() { + this.driver = await StartDriver(); + await RegisterAndLoginTwoFactor(this.driver, 'john', "password", true); + }); + + after(async function() { + await StopDriver(this.driver); + }); + + it('should redirect the user', async function() { + await VisitPage(this.driver, 'https://login.example.com:8080/logout'); + await VerifyIsAlreadyAuthenticatedStage(this.driver); + }); + }); +} \ No newline at end of file diff --git a/test/suites/basic/scenarii/RegisterTotp.ts b/test/suites/basic/scenarii/RegisterTotp.ts new file mode 100644 index 000000000..636d5f888 --- /dev/null +++ b/test/suites/basic/scenarii/RegisterTotp.ts @@ -0,0 +1,50 @@ +import SeleniumWebdriver, { WebDriver } from "selenium-webdriver"; +import Assert from 'assert'; +import LoginAndRegisterTotp from '../../../helpers/LoginAndRegisterTotp'; +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; + +/** + * Given the user logs in as john, + * When he register a TOTP token, + * Then he reach a page containing the secret as string an qrcode + */ +export default function() { + describe('successfully login as john', function() { + this.timeout(10000); + + beforeEach(async function() { + this.driver = await StartDriver(); + await LoginAndRegisterTotp(this.driver, "john", "password", true); + }); + + afterEach(async function() { + await StopDriver(this.driver); + }) + + it("should see generated qrcode", async function() { + await this.driver.wait( + SeleniumWebdriver.until.elementLocated( + SeleniumWebdriver.By.className("qrcode")), + 5000); + }); + + it("should see generated secret", async function() { + await this.driver.wait( + SeleniumWebdriver.until.elementLocated( + SeleniumWebdriver.By.className("base32-secret")), + 5000); + }); + + it("should have user and issuer in otp url", async function() { + const el = await (this.driver as WebDriver).wait( + SeleniumWebdriver.until.elementLocated( + SeleniumWebdriver.By.className('otpauth-secret')), 5000); + + const otpauthUrl = await el.getAttribute('innerText'); + const label = 'john'; + const issuer = 'example.com'; + + Assert(new RegExp(`^otpauth://totp/${label}\\?secret=[A-Z0-9]+&issuer=${issuer}$`).test(otpauthUrl)); + }) + }); +}; diff --git a/test/suites/basic/scenarii/RequiredTwoFactor.ts b/test/suites/basic/scenarii/RequiredTwoFactor.ts new file mode 100644 index 000000000..dd48a9494 --- /dev/null +++ b/test/suites/basic/scenarii/RequiredTwoFactor.ts @@ -0,0 +1,30 @@ +import LoginAndRegisterTotp from '../../../helpers/LoginAndRegisterTotp'; +import VerifyUrlIs from '../../../helpers/assertions/VerifyUrlIs'; +import { StartDriver, StopDriver } from '../../../helpers/context/WithDriver'; +import VerifyIsSecondFactorStage from '../../../helpers/assertions/VerifyIsSecondFactorStage'; +import VisitPage from '../../../helpers/VisitPage'; +import FillLoginPageAndClick from '../../../helpers/FillLoginPageAndClick'; + +export default function() { + describe('User tries to access a page protected by second factor while he only passed first factor', function() { + before(async function() { + this.driver = await StartDriver(); + const secret = await LoginAndRegisterTotp(this.driver, "john", "password", true); + if (!secret) throw new Error('No secret!'); + + await VisitPage(this.driver, "https://admin.example.com:8080/secret.html"); + await VerifyUrlIs(this.driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + await FillLoginPageAndClick(this.driver, "john", "password"); + await VerifyIsSecondFactorStage(this.driver); + }); + + after(async function() { + await StopDriver(this.driver); + }); + + it("should reach second factor page of login portal", async function() { + await VisitPage(this.driver, "https://admin.example.com:8080/secret.html"); + await VerifyIsSecondFactorStage(this.driver); + }); + }); +} \ No newline at end of file diff --git a/test/suites/basic/scenarii/ResetPassword.ts b/test/suites/basic/scenarii/ResetPassword.ts new file mode 100644 index 000000000..f2b6b95db --- /dev/null +++ b/test/suites/basic/scenarii/ResetPassword.ts @@ -0,0 +1,71 @@ +import SeleniumWebDriver from 'selenium-webdriver'; + +import ClickOnLink from '../../../helpers/ClickOnLink'; +import ClickOn from '../../../helpers/ClickOn'; +import FillField from "../../../helpers/FillField"; +import {GetLinkFromEmail} from "../../../helpers/GetIdentityLink"; +import FillLoginPageAndClick from "../../../helpers/FillLoginPageAndClick"; +import IsSecondFactorStage from "../../../helpers/assertions/VerifyIsSecondFactorStage"; +import VisitPageAndWaitUrlIs from '../../../helpers/behaviors/VisitPageAndWaitUrlIs'; +import VerifyNotificationDisplayed from '../../../helpers/assertions/VerifyNotificationDisplayed'; +import VerifyUrlIs from '../../../helpers/assertions/VerifyUrlIs'; +import { StartDriver, StopDriver } from '../../../helpers/context/WithDriver'; + +export default function() { + beforeEach(async function() { + this.driver = await StartDriver(); + }); + + afterEach(async function() { + await StopDriver(this.driver); + }) + + it("should reset password for john", async function() { + await VisitPageAndWaitUrlIs(this.driver, "https://login.example.com:8080/"); + await ClickOnLink(this.driver, "Forgot password\?"); + await VerifyUrlIs(this.driver, "https://login.example.com:8080/forgot-password"); + await FillField(this.driver, "username", "john"); + await ClickOn(this.driver, SeleniumWebDriver.By.id('next-button')); + await VerifyUrlIs(this.driver, 'https://login.example.com:8080/confirmation-sent'); + + await this.driver.sleep(500); // Simulate the time it takes to receive the e-mail. + const link = await GetLinkFromEmail(); + await VisitPageAndWaitUrlIs(this.driver, link); + await FillField(this.driver, "password1", "newpass"); + await FillField(this.driver, "password2", "newpass"); + await ClickOn(this.driver, SeleniumWebDriver.By.id('reset-button')); + await VerifyUrlIs(this.driver, "https://login.example.com:8080/"); + await FillLoginPageAndClick(this.driver, "john", "newpass"); + + // The user reaches the second factor page using the new password. + await IsSecondFactorStage(this.driver); + }); + + it("should persuade reset password is initiated for unknown user", async function() { + await VisitPageAndWaitUrlIs(this.driver, "https://login.example.com:8080/"); + await ClickOnLink(this.driver, "Forgot password\?"); + await VerifyUrlIs(this.driver, "https://login.example.com:8080/forgot-password"); + await FillField(this.driver, "username", "unknown"); + await ClickOn(this.driver, SeleniumWebDriver.By.id('next-button')); + + // The malicious user thinks the confirmation has been sent. + await VerifyUrlIs(this.driver, 'https://login.example.com:8080/confirmation-sent'); + }); + + it("should notify passwords are different in reset form", async function() { + await VisitPageAndWaitUrlIs(this.driver, "https://login.example.com:8080/"); + await ClickOnLink(this.driver, "Forgot password\?"); + await VerifyUrlIs(this.driver, "https://login.example.com:8080/forgot-password"); + await FillField(this.driver, "username", "john"); + await ClickOn(this.driver, SeleniumWebDriver.By.id('next-button')); + await VerifyUrlIs(this.driver, 'https://login.example.com:8080/confirmation-sent'); + + await this.driver.sleep(500); // Simulate the time it takes to receive the e-mail. + const link = await GetLinkFromEmail(); + await VisitPageAndWaitUrlIs(this.driver, link); + await FillField(this.driver, "password1", "newpass"); + await FillField(this.driver, "password2", "badpass"); + await ClickOn(this.driver, SeleniumWebDriver.By.id('reset-button')); + await VerifyNotificationDisplayed(this.driver, "The passwords are different."); + }); +} diff --git a/test/suites/basic/scenarii/SimpleAuthentication.ts b/test/suites/basic/scenarii/SimpleAuthentication.ts new file mode 100644 index 000000000..78331b8de --- /dev/null +++ b/test/suites/basic/scenarii/SimpleAuthentication.ts @@ -0,0 +1,37 @@ +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import RegisterAndLoginTwoFactor from "../../../helpers/behaviors/RegisterAndLoginTwoFactor"; +import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs"; +import VisitPage from "../../../helpers/VisitPage"; + + +export default function() { + describe('The user is redirected to target url upon successful authentication', function() { + before(async function() { + this.driver = await StartDriver(); + await RegisterAndLoginTwoFactor(this.driver, 'john', "password", true, 'https://admin.example.com:8080/secret.html'); + }); + + after(async function() { + await StopDriver(this.driver); + }); + + it('should redirect the user', async function() { + await VerifyUrlIs(this.driver, 'https://admin.example.com:8080/secret.html'); + }); + }); + + describe('The target url is in "rd" parameter of the portal URL', function() { + before(async function() { + this.driver = await StartDriver(); + await VisitPage(this.driver, 'https://admin.example.com:8080/secret.html'); + }); + + after(async function() { + await StopDriver(this.driver); + }); + + it('should redirect the user', async function() { + await VerifyUrlIs(this.driver, 'https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html'); + }); + }) +} \ No newline at end of file diff --git a/test/suites/basic/scenarii/TOTPValidation.ts b/test/suites/basic/scenarii/TOTPValidation.ts new file mode 100644 index 000000000..f5cbbbbda --- /dev/null +++ b/test/suites/basic/scenarii/TOTPValidation.ts @@ -0,0 +1,65 @@ +import FillLoginPageWithUserAndPasswordAndClick from '../../../helpers/FillLoginPageAndClick'; +import ValidateTotp from '../../../helpers/ValidateTotp'; +import VerifySecretObserved from "../../../helpers/assertions/VerifySecretObserved"; +import LoginAndRegisterTotp from '../../../helpers/LoginAndRegisterTotp'; +import { AUTHENTICATION_TOTP_FAILED } from '../../../../shared/UserMessages'; +import VisitPageAndWaitUrlIs from '../../../helpers/behaviors/VisitPageAndWaitUrlIs'; +import VerifyNotificationDisplayed from '../../../helpers/assertions/VerifyNotificationDisplayed'; +import VerifyUrlIs from '../../../helpers/assertions/VerifyUrlIs'; +import { StartDriver, StopDriver } from '../../../helpers/context/WithDriver'; + +export default function() { + /** + * Given john has registered a TOTP secret, + * When he validates the TOTP second factor, + * Then he has access to secret page. + */ + describe('Successfully pass second factor with TOTP', function() { + before(async function() { + this.driver = await StartDriver(); + const secret = await LoginAndRegisterTotp(this.driver, "john", "password", true); + if (!secret) throw new Error('No secret!'); + + await VisitPageAndWaitUrlIs(this.driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + await FillLoginPageWithUserAndPasswordAndClick(this.driver, 'john', 'password'); + await ValidateTotp(this.driver, secret); + }); + + after(async function() { + await StopDriver(this.driver); + }); + + it("should be automatically redirected to secret page", async function() { + await VerifyUrlIs(this.driver, "https://admin.example.com:8080/secret.html"); + }); + + it("should access the secret", async function() { + await VerifySecretObserved(this.driver); + }); + }); + + /** + * Given john has registered a TOTP secret, + * When he fails the TOTP challenge, + * Then he gets a notification message. + */ + describe('Fail validation of second factor with TOTP', function() { + before(async function() { + this.driver = await StartDriver(); + await LoginAndRegisterTotp(this.driver, "john", "password", true); + const BAD_TOKEN = "125478"; + + await VisitPageAndWaitUrlIs(this.driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + await FillLoginPageWithUserAndPasswordAndClick(this.driver, 'john', 'password'); + await ValidateTotp(this.driver, BAD_TOKEN); + }); + + after(async function() { + await StopDriver(this.driver); + }); + + it("get a notification message", async function() { + await VerifyNotificationDisplayed(this.driver, AUTHENTICATION_TOTP_FAILED); + }); + }); +} diff --git a/test/suites/basic/scenarii/VerifyEndpoint.ts b/test/suites/basic/scenarii/VerifyEndpoint.ts new file mode 100644 index 000000000..1629d6792 --- /dev/null +++ b/test/suites/basic/scenarii/VerifyEndpoint.ts @@ -0,0 +1,16 @@ +import { GET_Expect401, GET_ExpectRedirect } from "../../../helpers/utils/Requests"; + +export default function() { + describe('Query without authenticated cookie', function() { + it('should get a 401 on GET to https://authelia.example.com:8080/api/verify', async function() { + await GET_Expect401('https://login.example.com:8080/api/verify'); + }); + + describe('Parameter `rd` required by Kubernetes ingress controller', async function() { + it('should redirect to https://login.example.com:8080', async function() { + await GET_ExpectRedirect('https://login.example.com:8080/api/verify?rd=https://login.example.com:8080', + 'https://login.example.com:8080'); + }); + }); + }); +} \ No newline at end of file diff --git a/test/suites/basic/test.ts b/test/suites/basic/test.ts new file mode 100644 index 000000000..fa432390f --- /dev/null +++ b/test/suites/basic/test.ts @@ -0,0 +1,29 @@ +import AutheliaSuite from "../../helpers/context/AutheliaSuite"; +import BadPassword from "./scenarii/BadPassword"; +import RegisterTotp from './scenarii/RegisterTotp'; +import ResetPassword from './scenarii/ResetPassword'; +import TOTPValidation from './scenarii/TOTPValidation'; +import BackendProtection from './scenarii/BackendProtection'; +import VerifyEndpoint from './scenarii/VerifyEndpoint'; +import RequiredTwoFactor from './scenarii/RequiredTwoFactor'; +import LogoutRedirectToAlreadyLoggedIn from './scenarii/LogoutRedirectToAlreadyLoggedIn'; +import SimpleAuthentication from './scenarii/SimpleAuthentication'; +import { exec } from '../../helpers/utils/exec'; + +AutheliaSuite(__dirname, function() { + this.timeout(10000); + + beforeEach(async function() { + await exec(`cp ${__dirname}/users_database.yml ${__dirname}/users_database.test.yml`); + }); + + describe('Simple authentication', SimpleAuthentication); + describe('Backend protection', BackendProtection); + describe('Verify API endpoint', VerifyEndpoint); + describe('Bad password', BadPassword); + describe('Reset password', ResetPassword); + describe('TOTP Registration', RegisterTotp); + describe('TOTP Validation', TOTPValidation); + describe('Required two factor', RequiredTwoFactor); + describe('Logout endpoint redirect to already logged in page', LogoutRedirectToAlreadyLoggedIn); +}); \ No newline at end of file diff --git a/users_database.yml b/test/suites/basic/users_database.yml similarity index 100% rename from users_database.yml rename to test/suites/basic/users_database.yml diff --git a/test/suites/dockerhub/README.md b/test/suites/dockerhub/README.md new file mode 100644 index 000000000..153268559 --- /dev/null +++ b/test/suites/dockerhub/README.md @@ -0,0 +1,13 @@ +# Dockerhub suite + +This suite is made to quickly test that the Docker image of Authelia runs properly when spawned. +It can also be used for you to test Authelia without building it since the latest image will be +pulled from Dockerhub. + +## Components + +This suite will spawn an highly-available setup with nginx, mongo, redis, OpenLDAP, etc... + +## Tests + +Check if the image runs and does not crash unexpectedly and do a simple authentication with 2FA. \ No newline at end of file diff --git a/test/suites/dockerhub/config.yml b/test/suites/dockerhub/config.yml new file mode 100644 index 000000000..f88b207f2 --- /dev/null +++ b/test/suites/dockerhub/config.yml @@ -0,0 +1,262 @@ +############################################################### +# Authelia configuration # +############################################################### + +# The port to listen on +port: 9091 + +# Log level +# +# Level of verbosity for logs +logs_level: debug + +# Default redirection URL +# +# If user tries to authenticate without any referer, Authelia +# does not know where to redirect the user to at the end of the +# authentication process. +# This parameter allows you to specify the default redirection +# URL Authelia will use in such a case. +# +# Note: this parameter is optional. If not provided, user won't +# be redirected upon successful authentication. +default_redirection_url: https://home.example.com:8080/ + +# TOTP Issuer Name +# +# This will be the issuer name displayed in Google Authenticator +# See: https://github.com/google/google-authenticator/wiki/Key-Uri-Format for more info on issuer names +totp: + issuer: authelia.com + +# The authentication backend to use for verifying user passwords +# and retrieve information such as email address and groups +# users belong to. +# +# There are two supported backends: `ldap` and `file`. +authentication_backend: + # LDAP backend configuration. + # + # This backend allows Authelia to be scaled to more + # than one instance and therefore is recommended for + # production. + ldap: + # The url of the ldap server + url: ldap://openldap + + # The base dn for every entries + base_dn: dc=example,dc=com + + # An additional dn to define the scope to all users + additional_users_dn: ou=users + + # The users filter used to find the user DN + # {0} is a matcher replaced by username. + # 'cn={0}' by default. + users_filter: cn={0} + + # An additional dn to define the scope of groups + additional_groups_dn: ou=groups + + # The groups filter used for retrieving groups of a given user. + # {0} is a matcher replaced by username. + # {dn} is a matcher replaced by user DN. + # 'member={dn}' by default. + groups_filter: (&(member={dn})(objectclass=groupOfNames)) + + # The attribute holding the name of the group + group_name_attribute: cn + + # The attribute holding the mail address of the user + mail_attribute: mail + + # The username and password of the admin user. + user: cn=admin,dc=example,dc=com + password: password + + # File backend configuration. + # + # With this backend, the users database is stored in a file + # which is updated when users reset their passwords. + # Therefore, this backend is meant to be used in a dev environment + # and not in production since it prevents Authelia to be scaled to + # more than one instance. + # + ## file: + ## path: ./users_database.yml + + +# Access Control +# +# Access control is a list of rules defining the authorizations applied for one +# resource to users or group of users. +# +# If 'access_control' is not defined, ACL rules are disabled and the `bypass` +# rule is applied, i.e., access is allowed to anyone. Otherwise restrictions follow +# the rules defined. +# +# Note: One can use the wildcard * to match any subdomain. +# It must stand at the beginning of the pattern. (example: *.mydomain.com) +# +# Note: You must put patterns containing wildcards between simple quotes for the YAML +# to be syntaxically correct. +# +# Definition: A `rule` is an object with the following keys: `domain`, `subject`, +# `policy` and `resources`. +# +# - `domain` defines which domain or set of domains the rule applies to. +# +# - `subject` defines the subject to apply authorizations to. This parameter is +# optional and matching any user if not provided. If provided, the parameter +# represents either a user or a group. It should be of the form 'user:' +# or 'group:'. +# +# - `policy` is the policy to apply to resources. It must be either `bypass`, +# `one_factor`, `two_factor` or `deny`. +# +# - `resources` is a list of regular expressions that matches a set of resources to +# apply the policy to. This parameter is optional and matches any resource if not +# provided. +# +# Note: the order of the rules is important. The first policy matching +# (domain, resource, subject) applies. +access_control: + # Default policy can either be `bypass`, `one_factor`, `two_factor` or `deny`. + # It is the policy applied to any resource if there is no policy to be applied + # to the user. + default_policy: deny + + rules: + # Rules applied to everyone + - domain: public.example.com + policy: two_factor + - domain: single_factor.example.com + policy: one_factor + + # Rules applied to 'admin' group + - domain: 'mx2.mail.example.com' + subject: 'group:admin' + policy: deny + - domain: '*.example.com' + subject: 'group:admin' + policy: two_factor + + # Rules applied to 'dev' group + - domain: dev.example.com + resources: + - '^/groups/dev/.*$' + subject: 'group:dev' + policy: two_factor + + # Rules applied to user 'john' + - domain: dev.example.com + resources: + - '^/users/john/.*$' + subject: 'user:john' + policy: two_factor + + + # Rules applied to user 'harry' + - domain: dev.example.com + resources: + - '^/users/harry/.*$' + subject: 'user:harry' + policy: two_factor + + # Rules applied to user 'bob' + - domain: '*.mail.example.com' + subject: 'user:bob' + policy: two_factor + - domain: 'dev.example.com' + resources: + - '^/users/bob/.*$' + subject: 'user:bob' + policy: two_factor + + +# Configuration of session cookies +# +# The session cookies identify the user once logged in. +session: + # The name of the session cookie. (default: authelia_session). + name: authelia_session + + # The secret to encrypt the session cookie. + secret: unsecure_session_secret + + # The time in ms before the cookie expires and session is reset. + expiration: 3600000 # 1 hour + + # The inactivity time in ms before the session is reset. + inactivity: 300000 # 5 minutes + + # The domain to protect. + # Note: the authenticator must also be in that domain. If empty, the cookie + # is restricted to the subdomain of the issuer. + domain: example.com + + # The redis connection details + redis: + host: redis + port: 6379 + password: authelia + +# Configuration of the authentication regulation mechanism. +# +# This mechanism prevents attackers from brute forcing the first factor. +# It bans the user if too many attempts are done in a short period of +# time. +regulation: + # The number of failed login attempts before user is banned. + # Set it to 0 to disable regulation. + max_retries: 3 + + # The time range during which the user can attempt login before being banned. + # The user is banned if the authenticaction failed `max_retries` times in a `find_time` seconds window. + find_time: 15 + + # The length of time before a banned user can login again. + ban_time: 5 + +# Configuration of the storage backend used to store data and secrets. +# +# You must use only an available configuration: local, mongo +storage: + # The directory where the DB files will be saved + ## local: + ## path: /var/lib/authelia/store + + # Settings to connect to mongo server + mongo: + url: mongodb://mongo + database: authelia + auth: + username: authelia + password: authelia + +# Configuration of the notification system. +# +# Notifications are sent to users when they require a password reset, a u2f +# registration or a TOTP registration. +# Use only an available configuration: filesystem, gmail +notifier: + # For testing purpose, notifications can be sent in a file + ## filesystem: + ## filename: /tmp/authelia/notification.txt + + # Use your email account to send the notifications. You can use an app password. + # List of valid services can be found here: https://nodemailer.com/smtp/well-known/ + ## email: + ## username: user@example.com + ## password: yourpassword + ## sender: admin@example.com + ## service: gmail + + # Use a SMTP server for sending notifications + smtp: + username: test + password: password + secure: false + host: smtp + port: 1025 + sender: admin@example.com diff --git a/test/suites/dockerhub/environment.ts b/test/suites/dockerhub/environment.ts new file mode 100644 index 000000000..b8213ef3d --- /dev/null +++ b/test/suites/dockerhub/environment.ts @@ -0,0 +1,28 @@ +import DockerEnvironment from "../../helpers/context/DockerEnvironment"; +import { exec } from "../../helpers/utils/exec"; + +const composeFiles = [ + 'docker-compose.yml', + 'example/compose/authelia/docker-compose.dockerhub.yml', + 'example/compose/mongo/docker-compose.yml', + 'example/compose/redis/docker-compose.yml', + 'example/compose/nginx/backend/docker-compose.yml', + 'example/compose/nginx/portal/docker-compose.yml', + 'example/compose/smtp/docker-compose.yml', + 'example/compose/httpbin/docker-compose.yml', + 'example/compose/ldap/docker-compose.admin.yml', // This is just used for administration, not for testing. + 'example/compose/ldap/docker-compose.yml' +] + +const dockerEnv = new DockerEnvironment(composeFiles); + +async function setup() { + await exec('./example/compose/nginx/portal/render.js --production http://authelia:9091'); + await dockerEnv.start(); +} + +async function teardown() { + await dockerEnv.stop(); +} + +export { setup, teardown, composeFiles }; \ No newline at end of file diff --git a/test/suites/dockerhub/scenarii/SimpleAuthentication.ts b/test/suites/dockerhub/scenarii/SimpleAuthentication.ts new file mode 100644 index 000000000..7d42298ab --- /dev/null +++ b/test/suites/dockerhub/scenarii/SimpleAuthentication.ts @@ -0,0 +1,20 @@ +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import RegisterAndLoginTwoFactor from "../../../helpers/behaviors/RegisterAndLoginTwoFactor"; +import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs"; + +export default function () { + describe('The user is redirected to target url upon successful authentication', function() { + before(async function() { + this.driver = await StartDriver(); + await RegisterAndLoginTwoFactor(this.driver, 'john', "password", true, 'https://admin.example.com:8080/secret.html'); + }); + + after(async function() { + await StopDriver(this.driver); + }); + + it('should redirect the user', async function() { + await VerifyUrlIs(this.driver, 'https://admin.example.com:8080/secret.html'); + }); + }); +} \ No newline at end of file diff --git a/test/suites/dockerhub/test.ts b/test/suites/dockerhub/test.ts new file mode 100644 index 000000000..5faed631f --- /dev/null +++ b/test/suites/dockerhub/test.ts @@ -0,0 +1,25 @@ +import AutheliaSuite from '../../helpers/context/AutheliaSuite'; +import DockerCompose from '../../helpers/context/DockerCompose'; +import { composeFiles } from './environment'; +import Assert from 'assert'; +import SimpleAuthentication from './scenarii/SimpleAuthentication'; + +AutheliaSuite(__dirname, function() { + this.timeout(15000); + const dockerCompose = new DockerCompose(composeFiles); + + describe('Check the container', function() { + it('should be running', async function() { + const stdout = await dockerCompose.ps(); + const lines = stdout.split("\n"); + const autheliaLine = lines.filter(l => l.indexOf('authelia_1') > -1); + if (autheliaLine.length != 1) { + throw new Error('Authelia container not found...'); + } + // check if the container is up. + Assert(autheliaLine[0].indexOf(' Up ') > -1); + }); + }); + + describe('Simple authentication', SimpleAuthentication); +}); \ No newline at end of file diff --git a/test/suites/high-availability/README.md b/test/suites/high-availability/README.md new file mode 100644 index 000000000..e2c34e022 --- /dev/null +++ b/test/suites/high-availability/README.md @@ -0,0 +1,15 @@ +# High-availability suite + +This suite is made to test Authelia in a *complete* environment, that is, with +all components making Authelia highly available. + +## Components + +This suite will spawn nginx as the edge reverse proxy, redis and mongo for storing +user sessions and configurations, LDAP for storing user accounts and authenticating, +as well as a few helpers such as a fake webmail to receive e-mails sent by Authelia +and httpbin to check headers forwarded by Authelia. + +## Tests + +There is broad range of tests in this suite. Check out in the *scenarii* directory. \ No newline at end of file diff --git a/test/suites/high-availability/config.yml b/test/suites/high-availability/config.yml new file mode 100644 index 000000000..6cbf82a19 --- /dev/null +++ b/test/suites/high-availability/config.yml @@ -0,0 +1,262 @@ +############################################################### +# Authelia configuration # +############################################################### + +# The port to listen on +port: 9091 + +# Log level +# +# Level of verbosity for logs +logs_level: debug + +# Default redirection URL +# +# If user tries to authenticate without any referer, Authelia +# does not know where to redirect the user to at the end of the +# authentication process. +# This parameter allows you to specify the default redirection +# URL Authelia will use in such a case. +# +# Note: this parameter is optional. If not provided, user won't +# be redirected upon successful authentication. +default_redirection_url: https://home.example.com:8080/ + +# TOTP Issuer Name +# +# This will be the issuer name displayed in Google Authenticator +# See: https://github.com/google/google-authenticator/wiki/Key-Uri-Format for more info on issuer names +totp: + issuer: authelia.com + +# The authentication backend to use for verifying user passwords +# and retrieve information such as email address and groups +# users belong to. +# +# There are two supported backends: `ldap` and `file`. +authentication_backend: + # LDAP backend configuration. + # + # This backend allows Authelia to be scaled to more + # than one instance and therefore is recommended for + # production. + ldap: + # The url of the ldap server + url: ldap://127.0.0.1 + + # The base dn for every entries + base_dn: dc=example,dc=com + + # An additional dn to define the scope to all users + additional_users_dn: ou=users + + # The users filter used to find the user DN + # {0} is a matcher replaced by username. + # 'cn={0}' by default. + users_filter: cn={0} + + # An additional dn to define the scope of groups + additional_groups_dn: ou=groups + + # The groups filter used for retrieving groups of a given user. + # {0} is a matcher replaced by username. + # {dn} is a matcher replaced by user DN. + # 'member={dn}' by default. + groups_filter: (&(member={dn})(objectclass=groupOfNames)) + + # The attribute holding the name of the group + group_name_attribute: cn + + # The attribute holding the mail address of the user + mail_attribute: mail + + # The username and password of the admin user. + user: cn=admin,dc=example,dc=com + password: password + + # File backend configuration. + # + # With this backend, the users database is stored in a file + # which is updated when users reset their passwords. + # Therefore, this backend is meant to be used in a dev environment + # and not in production since it prevents Authelia to be scaled to + # more than one instance. + # + ## file: + ## path: ./users_database.yml + + +# Access Control +# +# Access control is a list of rules defining the authorizations applied for one +# resource to users or group of users. +# +# If 'access_control' is not defined, ACL rules are disabled and the `bypass` +# rule is applied, i.e., access is allowed to anyone. Otherwise restrictions follow +# the rules defined. +# +# Note: One can use the wildcard * to match any subdomain. +# It must stand at the beginning of the pattern. (example: *.mydomain.com) +# +# Note: You must put patterns containing wildcards between simple quotes for the YAML +# to be syntaxically correct. +# +# Definition: A `rule` is an object with the following keys: `domain`, `subject`, +# `policy` and `resources`. +# +# - `domain` defines which domain or set of domains the rule applies to. +# +# - `subject` defines the subject to apply authorizations to. This parameter is +# optional and matching any user if not provided. If provided, the parameter +# represents either a user or a group. It should be of the form 'user:' +# or 'group:'. +# +# - `policy` is the policy to apply to resources. It must be either `bypass`, +# `one_factor`, `two_factor` or `deny`. +# +# - `resources` is a list of regular expressions that matches a set of resources to +# apply the policy to. This parameter is optional and matches any resource if not +# provided. +# +# Note: the order of the rules is important. The first policy matching +# (domain, resource, subject) applies. +access_control: + # Default policy can either be `bypass`, `one_factor`, `two_factor` or `deny`. + # It is the policy applied to any resource if there is no policy to be applied + # to the user. + default_policy: deny + + rules: + # Rules applied to everyone + - domain: public.example.com + policy: two_factor + - domain: single_factor.example.com + policy: one_factor + + # Rules applied to 'admin' group + - domain: 'mx2.mail.example.com' + subject: 'group:admin' + policy: deny + - domain: '*.example.com' + subject: 'group:admin' + policy: two_factor + + # Rules applied to 'dev' group + - domain: dev.example.com + resources: + - '^/groups/dev/.*$' + subject: 'group:dev' + policy: two_factor + + # Rules applied to user 'john' + - domain: dev.example.com + resources: + - '^/users/john/.*$' + subject: 'user:john' + policy: two_factor + + + # Rules applied to user 'harry' + - domain: dev.example.com + resources: + - '^/users/harry/.*$' + subject: 'user:harry' + policy: two_factor + + # Rules applied to user 'bob' + - domain: '*.mail.example.com' + subject: 'user:bob' + policy: two_factor + - domain: 'dev.example.com' + resources: + - '^/users/bob/.*$' + subject: 'user:bob' + policy: two_factor + + +# Configuration of session cookies +# +# The session cookies identify the user once logged in. +session: + # The name of the session cookie. (default: authelia_session). + name: authelia_session + + # The secret to encrypt the session cookie. + secret: unsecure_session_secret + + # The time in ms before the cookie expires and session is reset. + expiration: 3600000 # 1 hour + + # The inactivity time in ms before the session is reset. + inactivity: 300000 # 5 minutes + + # The domain to protect. + # Note: the authenticator must also be in that domain. If empty, the cookie + # is restricted to the subdomain of the issuer. + domain: example.com + + # The redis connection details + redis: + host: 127.0.0.1 + port: 6379 + password: authelia + +# Configuration of the authentication regulation mechanism. +# +# This mechanism prevents attackers from brute forcing the first factor. +# It bans the user if too many attempts are done in a short period of +# time. +regulation: + # The number of failed login attempts before user is banned. + # Set it to 0 to disable regulation. + max_retries: 3 + + # The time range during which the user can attempt login before being banned. + # The user is banned if the authenticaction failed `max_retries` times in a `find_time` seconds window. + find_time: 15 + + # The length of time before a banned user can login again. + ban_time: 5 + +# Configuration of the storage backend used to store data and secrets. +# +# You must use only an available configuration: local, mongo +storage: + # The directory where the DB files will be saved + ## local: + ## path: /var/lib/authelia/store + + # Settings to connect to mongo server + mongo: + url: mongodb://127.0.0.1 + database: authelia + auth: + username: authelia + password: authelia + +# Configuration of the notification system. +# +# Notifications are sent to users when they require a password reset, a u2f +# registration or a TOTP registration. +# Use only an available configuration: filesystem, gmail +notifier: + # For testing purpose, notifications can be sent in a file + ## filesystem: + ## filename: /tmp/authelia/notification.txt + + # Use your email account to send the notifications. You can use an app password. + # List of valid services can be found here: https://nodemailer.com/smtp/well-known/ + ## email: + ## username: user@example.com + ## password: yourpassword + ## sender: admin@example.com + ## service: gmail + + # Use a SMTP server for sending notifications + smtp: + username: test + password: password + secure: false + host: 127.0.0.1 + port: 1025 + sender: admin@example.com diff --git a/test/suites/high-availability/environment.ts b/test/suites/high-availability/environment.ts new file mode 100644 index 000000000..de25d2f20 --- /dev/null +++ b/test/suites/high-availability/environment.ts @@ -0,0 +1,40 @@ +import DockerEnvironment from "../../helpers/context/DockerEnvironment"; +import AutheliaServer from "../../helpers/context/AutheliaServer"; +import { exec } from "../../helpers/utils/exec"; +import fs from 'fs'; + +const composeFiles = [ + 'docker-compose.yml', + 'example/compose/mongo/docker-compose.yml', + 'example/compose/redis/docker-compose.yml', + 'example/compose/nginx/backend/docker-compose.yml', + 'example/compose/nginx/portal/docker-compose.yml', + 'example/compose/smtp/docker-compose.yml', + 'example/compose/httpbin/docker-compose.yml', + 'example/compose/ldap/docker-compose.admin.yml', // This is just used for administration, not for testing. + 'example/compose/ldap/docker-compose.yml' +] + +const dockerEnv = new DockerEnvironment(composeFiles); +const autheliaServer = new AutheliaServer(__dirname + '/config.yml'); + +async function setup() { + // In dev mode Authelia has the server served on one port and the frontend on another port. + await exec('./example/compose/nginx/portal/render.js ' + (fs.existsSync('.suite') ? '': '--production')); + + console.log(`Prepare environment with docker-compose...`); + await dockerEnv.start(); + + console.log('Start Authelia server.'); + await autheliaServer.start(); +} + +async function teardown() { + console.log('Stop Authelia server.'); + await autheliaServer.stop(); + + console.log(`Cleanup environment with docker-compose...`); + await dockerEnv.stop(); +} + +export { setup, teardown, composeFiles }; \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/AccessControl.ts b/test/suites/high-availability/scenarii/AccessControl.ts new file mode 100644 index 000000000..225cb436e --- /dev/null +++ b/test/suites/high-availability/scenarii/AccessControl.ts @@ -0,0 +1,108 @@ +import LoginAndRegisterTotp from "../../../helpers/LoginAndRegisterTotp"; +import VisitPage from "../../../helpers/VisitPage"; +import VerifySecretObserved from "../../../helpers/assertions/VerifySecretObserved"; +import WithDriver from "../../../helpers/context/WithDriver"; +import FillLoginPageAndClick from "../../../helpers/FillLoginPageAndClick"; +import ValidateTotp from "../../../helpers/ValidateTotp"; +import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs"; +import Logout from "../../../helpers/Logout"; +import VisitPageAndWaitUrlIs from "../../../helpers/behaviors/VisitPageAndWaitUrlIs"; + +async function ShouldHaveAccessTo(url: string) { + it('should have access to ' + url, async function() { + await VisitPageAndWaitUrlIs(this.driver, url); + await VerifySecretObserved(this.driver); + }) +} + +async function ShouldNotHaveAccessTo(url: string) { + it('should not have access to ' + url, async function() { + await VisitPage(this.driver, url); + await VerifyUrlIs(this.driver, 'https://login.example.com:8080/'); + }) +} + +// we verify that the user has only access to want he is granted to. +export default function() { + + // We ensure that bob has access to what he is granted to + describe('Permissions of user john', function() { + after(async function() { + await Logout(this.driver); + }) + + WithDriver(); + + before(async function() { + const secret = await LoginAndRegisterTotp(this.driver, "john", "password", true); + await VisitPageAndWaitUrlIs(this.driver, 'https://login.example.com:8080/'); + await FillLoginPageAndClick(this.driver, 'john', 'password', false); + await ValidateTotp(this.driver, secret); + }) + + ShouldHaveAccessTo('https://public.example.com:8080/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/groups/admin/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/groups/dev/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/users/john/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/users/harry/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/users/bob/secret.html'); + ShouldHaveAccessTo('https://admin.example.com:8080/secret.html'); + ShouldHaveAccessTo('https://mx1.mail.example.com:8080/secret.html'); + ShouldHaveAccessTo('https://single_factor.example.com:8080/secret.html'); + ShouldNotHaveAccessTo('https://mx2.mail.example.com:8080/secret.html'); + }) + + // We ensure that bob has access to what he is granted to + describe('Permissions of user bob', function() { + after(async function() { + await Logout(this.driver); + }) + + WithDriver(); + + before(async function() { + const secret = await LoginAndRegisterTotp(this.driver, "bob", "password", true); + await VisitPageAndWaitUrlIs(this.driver, 'https://login.example.com:8080/'); + await FillLoginPageAndClick(this.driver, 'bob', 'password', false); + await ValidateTotp(this.driver, secret); + }) + + ShouldHaveAccessTo('https://public.example.com:8080/secret.html'); + ShouldNotHaveAccessTo('https://dev.example.com:8080/groups/admin/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/groups/dev/secret.html'); + ShouldNotHaveAccessTo('https://dev.example.com:8080/users/john/secret.html'); + ShouldNotHaveAccessTo('https://dev.example.com:8080/users/harry/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/users/bob/secret.html'); + ShouldNotHaveAccessTo('https://admin.example.com:8080/secret.html'); + ShouldHaveAccessTo('https://mx1.mail.example.com:8080/secret.html'); + ShouldHaveAccessTo('https://single_factor.example.com:8080/secret.html'); + ShouldHaveAccessTo('https://mx2.mail.example.com:8080/secret.html'); + }) + + // We ensure that harry has access to what he is granted to + describe('Permissions of user harry', function() { + after(async function() { + await Logout(this.driver); + }) + + WithDriver(); + + before(async function() { + const secret = await LoginAndRegisterTotp(this.driver, "harry", "password", true); + await VisitPageAndWaitUrlIs(this.driver, 'https://login.example.com:8080/'); + await FillLoginPageAndClick(this.driver, 'harry', 'password', false); + await ValidateTotp(this.driver, secret); + }) + + ShouldHaveAccessTo('https://public.example.com:8080/secret.html'); + ShouldNotHaveAccessTo('https://dev.example.com:8080/groups/admin/secret.html'); + ShouldNotHaveAccessTo('https://dev.example.com:8080/groups/dev/secret.html'); + ShouldNotHaveAccessTo('https://dev.example.com:8080/users/john/secret.html'); + ShouldHaveAccessTo('https://dev.example.com:8080/users/harry/secret.html'); + ShouldNotHaveAccessTo('https://dev.example.com:8080/users/bob/secret.html'); + ShouldNotHaveAccessTo('https://admin.example.com:8080/secret.html'); + ShouldNotHaveAccessTo('https://mx1.mail.example.com:8080/secret.html'); + ShouldHaveAccessTo('https://single_factor.example.com:8080/secret.html'); + ShouldNotHaveAccessTo('https://mx2.mail.example.com:8080/secret.html'); + }) +} \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/AutheliaRestart.ts b/test/suites/high-availability/scenarii/AutheliaRestart.ts new file mode 100644 index 000000000..c2cad8cbb --- /dev/null +++ b/test/suites/high-availability/scenarii/AutheliaRestart.ts @@ -0,0 +1,71 @@ +import Logout from "../../../helpers/Logout"; +import ChildProcess from 'child_process'; +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import VerifySecretObserved from "../../../helpers/assertions/VerifySecretObserved"; +import RegisterAndLoginTwoFactor from "../../../helpers/behaviors/RegisterAndLoginTwoFactor"; +import VisitPageAndWaitUrlIs from "../../../helpers/behaviors/VisitPageAndWaitUrlIs"; +import { GET_Expect502 } from "../../../helpers/utils/Requests"; +import LoginAndRegisterTotp from "../../../helpers/LoginAndRegisterTotp"; +import FullLogin from "../../../helpers/FullLogin"; + +export default function() { + describe('Session is still valid after Authelia restarts', function() { + before(async function() { + // Be sure to start fresh + ChildProcess.execSync('rm -f .authelia-interrupt'); + + this.driver = await StartDriver(); + await RegisterAndLoginTwoFactor(this.driver, 'john', "password", true, 'https://admin.example.com:8080/secret.html'); + await VisitPageAndWaitUrlIs(this.driver, 'https://home.example.com:8080/'); + }); + + after(async function() { + await Logout(this.driver); + await StopDriver(this.driver); + + // Be sure to cleanup + ChildProcess.execSync('rm -f .authelia-interrupt'); + }); + + it("should still access the secret after Authelia restarted", async function() { + ChildProcess.execSync('touch .authelia-interrupt'); + await GET_Expect502('https://login.example.com:8080/api/state'); + await this.driver.sleep(1000); + ChildProcess.execSync('rm .authelia-interrupt'); + await this.driver.sleep(4000); + + await VisitPageAndWaitUrlIs(this.driver, 'https://admin.example.com:8080/secret.html'); + await VerifySecretObserved(this.driver); + }); + }); + + describe('Secrets are persisted even if Authelia restarts', function() { + before(async function() { + // Be sure to start fresh + ChildProcess.execSync('rm -f .authelia-interrupt'); + + this.driver = await StartDriver(); + this.secret = await LoginAndRegisterTotp(this.driver, 'john', "password", true); + await Logout(this.driver); + }); + + after(async function() { + await Logout(this.driver); + await StopDriver(this.driver); + + // Be sure to cleanup + ChildProcess.execSync('rm -f .authelia-interrupt'); + }); + + it("should still access the secret after Authelia restarted", async function() { + ChildProcess.execSync('touch .authelia-interrupt'); + await GET_Expect502('https://login.example.com:8080/api/state'); + await this.driver.sleep(1000); + ChildProcess.execSync('rm .authelia-interrupt'); + await this.driver.sleep(4000); + + // The user can re-authenticate with the secret. + await FullLogin(this.driver, 'john', this.secret, 'https://admin.example.com:8080/secret.html') + }); + }); +} \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/AuthenticationRegulation.ts b/test/suites/high-availability/scenarii/AuthenticationRegulation.ts new file mode 100644 index 000000000..99a092fc3 --- /dev/null +++ b/test/suites/high-availability/scenarii/AuthenticationRegulation.ts @@ -0,0 +1,36 @@ +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import LoginAs from "../../../helpers/LoginAs"; +import VerifyNotificationDisplayed from "../../../helpers/assertions/VerifyNotificationDisplayed"; +import VerifyIsSecondFactorStage from "../../../helpers/assertions/VerifyIsSecondFactorStage"; + +export default function() { + describe('Authelia regulates authentications when a hacker is brute forcing', function() { + this.timeout(15000); + beforeEach(async function() { + this.driver = await StartDriver(); + }); + + afterEach(async function() { + await StopDriver(this.driver); + }); + + it("should return an error message when providing correct credentials the 4th time.", async function() { + await LoginAs(this.driver, "blackhat", "bad-password"); + await VerifyNotificationDisplayed(this.driver, "Authentication failed. Please check your credentials."); + await LoginAs(this.driver, "blackhat", "bad-password"); + await VerifyNotificationDisplayed(this.driver, "Authentication failed. Please check your credentials."); + await LoginAs(this.driver, "blackhat", "bad-password"); + await VerifyNotificationDisplayed(this.driver, "Authentication failed. Please check your credentials."); + + // when providing good credentials, the hacker is regulated and see same message as previously. + await LoginAs(this.driver, "blackhat", "password"); + await VerifyNotificationDisplayed(this.driver, "Authentication failed. Please check your credentials."); + + // Wait the regulation ban time before retrying with correct credentials. + // It should authenticate normally. + await this.driver.sleep(6000); + await LoginAs(this.driver, "blackhat", "password"); + await VerifyIsSecondFactorStage(this.driver); + }); + }); +} \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/BasicAuthentication.ts b/test/suites/high-availability/scenarii/BasicAuthentication.ts new file mode 100644 index 000000000..941abfa69 --- /dev/null +++ b/test/suites/high-availability/scenarii/BasicAuthentication.ts @@ -0,0 +1,34 @@ +import Request from 'request-promise'; + +async function GetSecret(username: string, password: string) { + return await Request('https://single_factor.example.com:8080/secret.html', { + auth: { + username, + password + }, + rejectUnauthorized: false, + }); +} + +export default function() { + it("should retrieve secret when Authorization header is provided", async function() { + const res = await GetSecret('john', 'password'); + if (res.indexOf('This is a very important secret!') < 0) { + throw new Error('Cannot access secret.'); + } + }); + + it("should not retrieve secret when providing bad password", async function() { + const res = await GetSecret('john', 'bad-password'); + if (res.indexOf('This is a very important secret!') >= 0) { + throw new Error('Cannot access secret.'); + } + }); + + it("should not retrieve secret when authenticating with unexisting user", async function() { + const res = await GetSecret('dontexist', 'password'); + if (res.indexOf('This is a very important secret!') >= 0) { + throw new Error('Cannot access secret.'); + } + }); +} \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/CustomHeadersForwarded.ts b/test/suites/high-availability/scenarii/CustomHeadersForwarded.ts new file mode 100644 index 000000000..2fdc8d045 --- /dev/null +++ b/test/suites/high-availability/scenarii/CustomHeadersForwarded.ts @@ -0,0 +1,52 @@ +import Logout from "../../../helpers/Logout"; +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import RegisterAndLoginWith2FA from "../../../helpers/behaviors/RegisterAndLoginTwoFactor"; +import VerifyForwardedHeaderIs from "../../../helpers/assertions/VerifyForwardedHeaderIs"; +import LoginOneFactor from "../../../helpers/behaviors/LoginOneFactor"; +import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs"; + +export default function() { + describe("Custom-Forwarded-User and Custom-Forwarded-Groups are correctly forwarded to protected backend", function() { + this.timeout(10000); + + describe("With single factor", function() { + before(async function() { + this.driver = await StartDriver(); + await LoginOneFactor(this.driver, "john", "password", "https://single_factor.example.com:8080/headers"); + }); + + after(async function() { + await Logout(this.driver); + await StopDriver(this.driver); + }); + + it("should see header 'Custom-Forwarded-User' set to 'john'", async function() { + await VerifyForwardedHeaderIs(this.driver, 'Custom-Forwarded-User', 'john'); + }); + + it("should see header 'Custom-Forwarded-Groups' set to 'dev,admin'", async function() { + await VerifyForwardedHeaderIs(this.driver, 'Custom-Forwarded-Groups', 'dev,admin'); + }); + }); + + describe("With two factors", function() { + before(async function() { + this.driver = await StartDriver(); + await RegisterAndLoginWith2FA(this.driver, "john", "password", true, "https://public.example.com:8080/headers"); + }); + + after(async function() { + await Logout(this.driver); + await StopDriver(this.driver); + }); + + it("should see header 'Custom-Forwarded-User' set to 'john'", async function() { + await VerifyForwardedHeaderIs(this.driver, 'Custom-Forwarded-User', 'john'); + }); + + it("should see header 'Custom-Forwarded-Groups' set to 'dev,admin'", async function() { + await VerifyForwardedHeaderIs(this.driver, 'Custom-Forwarded-Groups', 'dev,admin'); + }); + }); + }); +} \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/EnforceInternalRedirectionsOnly.ts b/test/suites/high-availability/scenarii/EnforceInternalRedirectionsOnly.ts new file mode 100644 index 000000000..a8e01565d --- /dev/null +++ b/test/suites/high-availability/scenarii/EnforceInternalRedirectionsOnly.ts @@ -0,0 +1,70 @@ +import LoginAndRegisterTotp from "../../../helpers/LoginAndRegisterTotp"; +import FillLoginPageWithUserAndPasswordAndClick from '../../../helpers/FillLoginPageAndClick'; +import ValidateTotp from "../../../helpers/ValidateTotp"; +import Logout from "../../../helpers/Logout"; +import VerifyIsAlreadyAuthenticatedStage from "../../../helpers/assertions/VerifyIsAlreadyAuthenticatedStage"; +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import VisitPageAndWaitUrlIs from "../../../helpers/behaviors/VisitPageAndWaitUrlIs"; +import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs"; + +/* + * Authelia should not be vulnerable to open redirection. Otherwise it would aid an + * attacker in conducting a phishing attack. + * + * To avoid the issue, Authelia's client scans the URL and prevent any redirection if + * the URL is pointing to an external domain. + */ +export default function() { + describe("Only redirection to a subdomain of the protected domain should be allowed", function() { + this.timeout(10000); + let secret: string; + + beforeEach(async function() { + this.driver = await StartDriver(); + secret = await LoginAndRegisterTotp(this.driver, "john", "password", true) + }); + + afterEach(async function() { + await Logout(this.driver); + await StopDriver(this.driver); + }) + + function CannotRedirectTo(url: string) { + it(`should redirect to already authenticated page when requesting ${url}`, async function() { + await VisitPageAndWaitUrlIs(this.driver, `https://login.example.com:8080/?rd=${url}`); + await FillLoginPageWithUserAndPasswordAndClick(this.driver, 'john', 'password'); + await ValidateTotp(this.driver, secret); + await VerifyIsAlreadyAuthenticatedStage(this.driver); + }); + } + + function CanRedirectTo(url: string) { + it(`should redirect to ${url}`, async function() { + await VisitPageAndWaitUrlIs(this.driver, `https://login.example.com:8080/?rd=${url}`); + await FillLoginPageWithUserAndPasswordAndClick(this.driver, 'john', 'password'); + await ValidateTotp(this.driver, secret); + await VerifyUrlIs(this.driver, url); + }); + } + + describe('Cannot redirect to https://www.google.fr', function() { + // Do not redirect to another domain than example.com + CannotRedirectTo("https://www.google.fr"); + }); + + describe('Cannot redirect to https://public.example.com.a:8080', function() { + // Do not redirect to another domain than example.com + CannotRedirectTo("https://public.example.com.a:8080"); + }); + + describe('Cannot redirect to http://public.example.com:8080', function() { + // Do not redirect to http website + CannotRedirectTo("http://public.example.com:8080"); + }); + + describe('Can redirect to https://public.example.com:8080/', function() { + // Can redirect to any subdomain of the domain protected by Authelia. + CanRedirectTo("https://public.example.com:8080/"); + }); + }); +} \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/MongoConnectionRecovery.ts b/test/suites/high-availability/scenarii/MongoConnectionRecovery.ts new file mode 100644 index 000000000..db72213dd --- /dev/null +++ b/test/suites/high-availability/scenarii/MongoConnectionRecovery.ts @@ -0,0 +1,24 @@ +import LoginAndRegisterTotp from "../../../helpers/LoginAndRegisterTotp"; +import FullLogin from "../../../helpers/FullLogin"; +import child_process from 'child_process'; +import WithDriver from "../../../helpers/context/WithDriver"; +import Logout from "../../../helpers/Logout"; +import { composeFiles } from '../environment'; +import DockerCompose from "../../../helpers/context/DockerCompose"; + +export default function() { + after(async function() { + await Logout(this.driver); + }) + + WithDriver(); + + it("should be able to login after mongo restarts", async function() { + this.timeout(30000); + + const secret = await LoginAndRegisterTotp(this.driver, "john", "password", true); + const dockerCompose = new DockerCompose(composeFiles); + await dockerCompose.restart('mongo'); + await FullLogin(this.driver, "john", secret, "https://admin.example.com:8080/secret.html"); + }); +} \ No newline at end of file diff --git a/test/suites/high-availability/scenarii/SingleFactorAuthentication.ts b/test/suites/high-availability/scenarii/SingleFactorAuthentication.ts new file mode 100644 index 000000000..a31887a5e --- /dev/null +++ b/test/suites/high-availability/scenarii/SingleFactorAuthentication.ts @@ -0,0 +1,37 @@ +import Logout from "../../../helpers/Logout"; +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; +import LoginOneFactor from "../../../helpers/behaviors/LoginOneFactor"; +import VerifySecretObserved from "../../../helpers/assertions/VerifySecretObserved"; +import VisitPage from "../../../helpers/VisitPage"; +import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs"; +import VerifyIsSecondFactorStage from "../../../helpers/assertions/VerifyIsSecondFactorStage"; + +/* + * Those tests are related to single factor protected resources. + */ +export default function() { + beforeEach(async function() { + this.driver = await StartDriver(); + }); + + afterEach(async function() { + await Logout(this.driver); + await StopDriver(this.driver); + }); + + it("should redirect user after first stage", async function() { + await LoginOneFactor(this.driver, "john", "password", "https://single_factor.example.com:8080/secret.html"); + await VerifySecretObserved(this.driver); + }); + + it("should redirect to portal if not enough authorized", async function() { + await LoginOneFactor(this.driver, "john", "password", "https://single_factor.example.com:8080/secret.html"); + await VisitPage(this.driver, "https://admin.example.com:8080/secret.html"); + + // the url should be the one from the portal. + await VerifyUrlIs(this.driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + + // And the user should end up on the second factor page. + await VerifyIsSecondFactorStage(this.driver); + }); +} \ No newline at end of file diff --git a/test/suites/high-availability/test.ts b/test/suites/high-availability/test.ts new file mode 100644 index 000000000..25d5c951c --- /dev/null +++ b/test/suites/high-availability/test.ts @@ -0,0 +1,23 @@ +import AutheliaSuite from "../../helpers/context/AutheliaSuite"; +import MongoConnectionRecovery from "./scenarii/MongoConnectionRecovery"; +import EnforceInternalRedirectionsOnly from "./scenarii/EnforceInternalRedirectionsOnly"; +import AccessControl from "./scenarii/AccessControl"; +import CustomHeadersForwarded from "./scenarii/CustomHeadersForwarded"; +import SingleFactorAuthentication from "./scenarii/SingleFactorAuthentication"; +import BasicAuthentication from "./scenarii/BasicAuthentication"; +import AutheliaRestart from "./scenarii/AutheliaRestart"; +import AuthenticationRegulation from "./scenarii/AuthenticationRegulation"; + +AutheliaSuite(__dirname, function() { + this.timeout(10000); + + describe('Custom headers forwarded to backend', CustomHeadersForwarded); + describe('Access control', AccessControl); + + describe('Mongo broken connection recovery', MongoConnectionRecovery); + describe('Enforce internal redirections only', EnforceInternalRedirectionsOnly); + describe('Single factor authentication', SingleFactorAuthentication); + describe('Basic authentication', BasicAuthentication); + describe('Authelia restart', AutheliaRestart); + describe('Authentication regulation', AuthenticationRegulation); +}); \ No newline at end of file diff --git a/test/suites/short-timeouts/README.md b/test/suites/short-timeouts/README.md new file mode 100644 index 000000000..049cd5745 --- /dev/null +++ b/test/suites/short-timeouts/README.md @@ -0,0 +1,12 @@ +# Short timeouts suite + +This suite has been created to configure Authelia with short timeouts for sessions expiration +in order to test the inactivity feature and the remember me feature. + +## Components + +Authelia, nginx and a fake webmail for registering a device. + +## Tests + +Related to user inactivity. \ No newline at end of file diff --git a/config.minimal.yml b/test/suites/short-timeouts/config.yml similarity index 90% rename from config.minimal.yml rename to test/suites/short-timeouts/config.yml index 8da7bc5e1..992f5b903 100644 --- a/config.minimal.yml +++ b/test/suites/short-timeouts/config.yml @@ -2,18 +2,26 @@ # Authelia minimal configuration # ############################################################### +port: 9091 + +logs_level: debug + +default_redirection_url: https://home.example.com:8080/ + authentication_backend: file: - path: /etc/authelia/users_database.yml + path: ./test/suites/short-timeouts/users_database.test.yml session: secret: unsecure_session_secret domain: example.com + inactivity: 5000 + expiration: 8000 # Configuration of the storage backend used to store data and secrets. i.e. totp data storage: local: - path: /etc/authelia/storage + path: /tmp/authelia/db # TOTP Issuer Name # @@ -67,10 +75,10 @@ regulation: max_retries: 3 # The user is banned if the authenticaction failed `max_retries` times in a `find_time` seconds window. - find_time: 120 + find_time: 10 # The length of time before a banned user can login again. - ban_time: 300 + ban_time: 5 # Default redirection URL # @@ -96,7 +104,7 @@ notifier: username: test password: password secure: false - host: 'smtp' + host: 127.0.0.1 port: 1025 sender: admin@example.com diff --git a/test/suites/short-timeouts/environment.ts b/test/suites/short-timeouts/environment.ts new file mode 100644 index 000000000..6d865c6a9 --- /dev/null +++ b/test/suites/short-timeouts/environment.ts @@ -0,0 +1,28 @@ +import fs from 'fs'; +import { exec } from "../../helpers/utils/exec"; +import AutheliaServer from "../../helpers/context/AutheliaServer"; +import DockerEnvironment from "../../helpers/context/DockerEnvironment"; + +const autheliaServer = new AutheliaServer(__dirname + '/config.yml'); +const dockerEnv = new DockerEnvironment([ + 'docker-compose.yml', + 'example/compose/nginx/backend/docker-compose.yml', + 'example/compose/nginx/portal/docker-compose.yml', + 'example/compose/smtp/docker-compose.yml', +]) + +async function setup() { + await exec(`cp ${__dirname}/users_database.yml ${__dirname}/users_database.test.yml`); + await exec('mkdir -p /tmp/authelia/db'); + await exec('./example/compose/nginx/portal/render.js ' + (fs.existsSync('.suite') ? '': '--production')); + await dockerEnv.start(); + await autheliaServer.start(); +} + +async function teardown() { + await dockerEnv.stop(); + await autheliaServer.stop(); + await exec('rm -r /tmp/authelia/db'); +} + +export { setup, teardown }; \ No newline at end of file diff --git a/test/suites/short-timeouts/scenarii/Inactivity.ts b/test/suites/short-timeouts/scenarii/Inactivity.ts new file mode 100644 index 000000000..a3a9172c5 --- /dev/null +++ b/test/suites/short-timeouts/scenarii/Inactivity.ts @@ -0,0 +1,66 @@ +import LoginAndRegisterTotp from "../../../helpers/LoginAndRegisterTotp"; +import FillLoginPageWithUserAndPasswordAndClick from "../../../helpers/FillLoginPageAndClick"; +import ValidateTotp from "../../../helpers/ValidateTotp"; +import { WebDriver } from "selenium-webdriver"; +import VisitPageAndWaitUrlIs from "../../../helpers/behaviors/VisitPageAndWaitUrlIs"; +import VisitPage from "../../../helpers/VisitPage"; +import VerifyUrlIs from "../../../helpers/assertions/VerifyUrlIs"; +import { StartDriver, StopDriver } from "../../../helpers/context/WithDriver"; + +export default function(this: Mocha.ISuiteCallbackContext) { + this.timeout(20000); + + beforeEach(async function() { + this.driver = await StartDriver(); + this.secret = await LoginAndRegisterTotp(this.driver, "john", "password", true); + }); + + afterEach(async function() { + await StopDriver(this.driver); + }) + + it("should disconnect user after inactivity period", async function() { + const driver = this.driver as WebDriver; + await VisitPageAndWaitUrlIs(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + await FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password', false); + await ValidateTotp(driver, this.secret); + await VerifyUrlIs(driver, "https://admin.example.com:8080/secret.html"); + await VisitPageAndWaitUrlIs(driver, "https://home.example.com:8080/"); + await driver.sleep(6000); + await driver.get("https://admin.example.com:8080/secret.html"); + await VerifyUrlIs(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + }); + + it('should disconnect user after cookie expiration', async function() { + const driver = this.driver as WebDriver; + await VisitPageAndWaitUrlIs(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + await FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password', false); + await ValidateTotp(driver, this.secret); + await VerifyUrlIs(driver, "https://admin.example.com:8080/secret.html"); + await VisitPageAndWaitUrlIs(driver, "https://home.example.com:8080/"); + + await driver.sleep(4000); + await driver.get("https://admin.example.com:8080/secret.html"); + await driver.sleep(2000); + await driver.get("https://admin.example.com:8080/secret.html"); + + await driver.sleep(2000); + await driver.get("https://admin.example.com:8080/secret.html"); + await VerifyUrlIs(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + + }); + + describe('With remember me checkbox checked', function() { + it("should keep user logged in after inactivity period", async function() { + const driver = this.driver as WebDriver; + await VisitPageAndWaitUrlIs(driver, "https://login.example.com:8080/?rd=https://admin.example.com:8080/secret.html"); + await FillLoginPageWithUserAndPasswordAndClick(driver, 'john', 'password', true); + await ValidateTotp(driver, this.secret); + await VerifyUrlIs(driver, "https://admin.example.com:8080/secret.html"); + await VisitPageAndWaitUrlIs(driver, "https://home.example.com:8080/"); + await driver.sleep(6000); + await VisitPage(driver, "https://admin.example.com:8080/secret.html"); + await VerifyUrlIs(driver, "https://admin.example.com:8080/secret.html"); + }); + }); +} \ No newline at end of file diff --git a/test/suites/short-timeouts/test.ts b/test/suites/short-timeouts/test.ts new file mode 100644 index 000000000..a12d72a14 --- /dev/null +++ b/test/suites/short-timeouts/test.ts @@ -0,0 +1,7 @@ +import AutheliaSuite from "../../helpers/context/AutheliaSuite"; +import Inactivity from './scenarii/Inactivity'; + +AutheliaSuite(__dirname, function() { + this.timeout(10000); + describe('Inactivity period', Inactivity); +}); \ No newline at end of file diff --git a/test/suites/short-timeouts/users_database.yml b/test/suites/short-timeouts/users_database.yml new file mode 100644 index 000000000..7832e85b3 --- /dev/null +++ b/test/suites/short-timeouts/users_database.yml @@ -0,0 +1,29 @@ +############################################################### +# Users Database # +############################################################### + +# This file can be used if you do not have an LDAP set up. + +# List of users +users: + john: + password: "{CRYPT}$6$rounds=500000$jgiCMRyGXzoqpxS3$w2pJeZnnH8bwW3zzvoMWtTRfQYsHbWbD/hquuQ5vUeIyl9gdwBIt6RWk2S6afBA0DPakbeWgD/4SZPiS0hYtU/" + email: john.doe@authelia.com + groups: + - admins + - dev + + harry: + password: "{CRYPT}$6$rounds=500000$jgiCMRyGXzoqpxS3$w2pJeZnnH8bwW3zzvoMWtTRfQYsHbWbD/hquuQ5vUeIyl9gdwBIt6RWk2S6afBA0DPakbeWgD/4SZPiS0hYtU/" + emails: harry.potter@authelia.com + groups: [] + + bob: + password: "{CRYPT}$6$rounds=500000$jgiCMRyGXzoqpxS3$w2pJeZnnH8bwW3zzvoMWtTRfQYsHbWbD/hquuQ5vUeIyl9gdwBIt6RWk2S6afBA0DPakbeWgD/4SZPiS0hYtU/" + email: bob.dylan@authelia.com + groups: + - dev + + james: + password: "{CRYPT}$6$rounds=500000$jgiCMRyGXzoqpxS3$w2pJeZnnH8bwW3zzvoMWtTRfQYsHbWbD/hquuQ5vUeIyl9gdwBIt6RWk2S6afBA0DPakbeWgD/4SZPiS0hYtU/" + email: james.dean@authelia.com \ No newline at end of file diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 000000000..66fabf625 --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es6", + "allowJs": true, + "skipLibCheck": false, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": false, + "noEmit": true, + "lib": [ + "esnext" + ] + } +} diff --git a/themes/README b/themes/README deleted file mode 100644 index 86bb0c1d5..000000000 --- a/themes/README +++ /dev/null @@ -1,17 +0,0 @@ -In order to build a specific Theme you need to run: - -grunt --theme= - -Available themes are: default, black, matrix, squares, triangles - -Ex. grunt --theme=black - -By default the original theme will be built. - -If you want to create a new theme: -- Use the themes/default as source material -- Make a copy in themes folder with a new name -- Add your theme folder name on line 237,239 and 242 -- And then build as above, with your theme folder/name. - -That's it! diff --git a/themes/black/client/src/css/.directory b/themes/black/client/src/css/.directory deleted file mode 100644 index 6e4b3f639..000000000 --- a/themes/black/client/src/css/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,56,41 -Version=3 -ViewMode=1 diff --git a/themes/black/client/src/css/00-bootstrap.min.css b/themes/black/client/src/css/00-bootstrap.min.css deleted file mode 100644 index dfeacbb88..000000000 --- a/themes/black/client/src/css/00-bootstrap.min.css +++ /dev/null @@ -1,5768 +0,0 @@ -/*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html{ - font-family:sans-serif; - -webkit-text-size-adjust:100%; - -ms-text-size-adjust:100% -} -body{ - margin:0 -} -article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{ - display:block -} -audio,canvas,progress,video{ - display:inline-block; - vertical-align:baseline -} -audio:not([controls]){ - display:none; - height:0 -} -[hidden],template{ - display:none -} -a{ - background-color:transparent -} -a:active,a:hover{ - outline:0 -} -abbr[title]{ - border-bottom:1px dotted -} -b,strong{ - font-weight:700 -} -dfn{ - font-style:italic -} -h1{ - margin:.67em 0; - font-size:2em -} -mark{ - color:#000; - background:#ff0 -} -small{ - font-size:80% -} -sub,sup{ - position:relative; - font-size:75%; - line-height:0; - vertical-align:baseline -} -sup{ - top:-.5em -} -sub{ - bottom:-.25em -} -img{ - border:0 -} -svg:not(:root){ - overflow:hidden -} -figure{ - margin:1em 40px -} -hr{ - height:0; - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box -} -pre{ - overflow:auto -} -code,kbd,pre,samp{ - font-family:monospace,monospace; - font-size:1em -} -button,input,optgroup,select,textarea{ - margin:0; - font:inherit; - color:inherit -} -button{ - overflow:visible -} -button,select{ - text-transform:none -} -button,html input[type=button],input[type=reset],input[type=submit]{ - -webkit-appearance:button; - cursor:pointer -} -button[disabled],html input[disabled]{ - cursor:default -} -button::-moz-focus-inner,input::-moz-focus-inner{ - padding:0; - border:0 -} -input{ - line-height:normal -} -input[type=checkbox],input[type=radio]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - padding:0 -} -input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{ - height:auto -} -input[type=search]{ - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box; - -webkit-appearance:textfield -} -input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{ - -webkit-appearance:none -} -fieldset{ - padding:.35em .625em .75em; - margin:0 2px; - border:1px solid silver -} -legend{ - padding:0; - border:0 -} -textarea{ - overflow:auto -} -optgroup{ - font-weight:700 -} -table{ - border-spacing:0; - border-collapse:collapse -} -td,th{ - padding:0 -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print{ - *,:after,:before{ - color:#000!important; - text-shadow:none!important; - background:0 0!important; - -webkit-box-shadow:none!important; - box-shadow:none!important - } - a,a:visited{ - text-decoration:underline - } - a[href]:after{ - content:" (" attr(href) ")" - } - abbr[title]:after{ - content:" (" attr(title) ")" - } - a[href^="javascript:"]:after,a[href^="#"]:after{ - content:"" - } - blockquote,pre{ - border:1px solid #999; - page-break-inside:avoid - } - thead{ - display:table-header-group - } - img,tr{ - page-break-inside:avoid - } - img{ - max-width:100%!important - } - h2,h3,p{ - orphans:3; - widows:3 - } - h2,h3{ - page-break-after:avoid - } - .navbar{ - display:none - } - .btn>.caret,.dropup>.btn>.caret{ - border-top-color:#000!important - } - .label{ - border:1px solid #000 - } - .table{ - border-collapse:collapse!important - } - .table td,.table th{ - background-color:#fff!important - } - .table-bordered td,.table-bordered th{ - border:1px solid #ddd!important - } -} -@font-face{ - font-family:'Glyphicons Halflings'; - src:url(../fonts/glyphicons-halflings-regular.eot); - src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg') -} -.glyphicon{ - position:relative; - top:1px; - display:inline-block; - font-family:'Glyphicons Halflings'; - font-style:normal; - font-weight:400; - line-height:1; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale -} -.glyphicon-asterisk:before{ - content:"\002a" -} -.glyphicon-plus:before{ - content:"\002b" -} -.glyphicon-eur:before,.glyphicon-euro:before{ - content:"\20ac" -} -.glyphicon-minus:before{ - content:"\2212" -} -.glyphicon-cloud:before{ - content:"\2601" -} -.glyphicon-envelope:before{ - content:"\2709" -} -.glyphicon-pencil:before{ - content:"\270f" -} -.glyphicon-glass:before{ - content:"\e001" -} -.glyphicon-music:before{ - content:"\e002" -} -.glyphicon-search:before{ - content:"\e003" -} -.glyphicon-heart:before{ - content:"\e005" -} -.glyphicon-star:before{ - content:"\e006" -} -.glyphicon-star-empty:before{ - content:"\e007" -} -.glyphicon-user:before{ - content:"\e008" -} -.glyphicon-film:before{ - content:"\e009" -} -.glyphicon-th-large:before{ - content:"\e010" -} -.glyphicon-th:before{ - content:"\e011" -} -.glyphicon-th-list:before{ - content:"\e012" -} -.glyphicon-ok:before{ - content:"\e013" -} -.glyphicon-remove:before{ - content:"\e014" -} -.glyphicon-zoom-in:before{ - content:"\e015" -} -.glyphicon-zoom-out:before{ - content:"\e016" -} -.glyphicon-off:before{ - content:"\e017" -} -.glyphicon-signal:before{ - content:"\e018" -} -.glyphicon-cog:before{ - content:"\e019" -} -.glyphicon-trash:before{ - content:"\e020" -} -.glyphicon-home:before{ - content:"\e021" -} -.glyphicon-file:before{ - content:"\e022" -} -.glyphicon-time:before{ - content:"\e023" -} -.glyphicon-road:before{ - content:"\e024" -} -.glyphicon-download-alt:before{ - content:"\e025" -} -.glyphicon-download:before{ - content:"\e026" -} -.glyphicon-upload:before{ - content:"\e027" -} -.glyphicon-inbox:before{ - content:"\e028" -} -.glyphicon-play-circle:before{ - content:"\e029" -} -.glyphicon-repeat:before{ - content:"\e030" -} -.glyphicon-refresh:before{ - content:"\e031" -} -.glyphicon-list-alt:before{ - content:"\e032" -} -.glyphicon-lock:before{ - content:"\e033" -} -.glyphicon-flag:before{ - content:"\e034" -} -.glyphicon-headphones:before{ - content:"\e035" -} -.glyphicon-volume-off:before{ - content:"\e036" -} -.glyphicon-volume-down:before{ - content:"\e037" -} -.glyphicon-volume-up:before{ - content:"\e038" -} -.glyphicon-qrcode:before{ - content:"\e039" -} -.glyphicon-barcode:before{ - content:"\e040" -} -.glyphicon-tag:before{ - content:"\e041" -} -.glyphicon-tags:before{ - content:"\e042" -} -.glyphicon-book:before{ - content:"\e043" -} -.glyphicon-bookmark:before{ - content:"\e044" -} -.glyphicon-print:before{ - content:"\e045" -} -.glyphicon-camera:before{ - content:"\e046" -} -.glyphicon-font:before{ - content:"\e047" -} -.glyphicon-bold:before{ - content:"\e048" -} -.glyphicon-italic:before{ - content:"\e049" -} -.glyphicon-text-height:before{ - content:"\e050" -} -.glyphicon-text-width:before{ - content:"\e051" -} -.glyphicon-align-left:before{ - content:"\e052" -} -.glyphicon-align-center:before{ - content:"\e053" -} -.glyphicon-align-right:before{ - content:"\e054" -} -.glyphicon-align-justify:before{ - content:"\e055" -} -.glyphicon-list:before{ - content:"\e056" -} -.glyphicon-indent-left:before{ - content:"\e057" -} -.glyphicon-indent-right:before{ - content:"\e058" -} -.glyphicon-facetime-video:before{ - content:"\e059" -} -.glyphicon-picture:before{ - content:"\e060" -} -.glyphicon-map-marker:before{ - content:"\e062" -} -.glyphicon-adjust:before{ - content:"\e063" -} -.glyphicon-tint:before{ - content:"\e064" -} -.glyphicon-edit:before{ - content:"\e065" -} -.glyphicon-share:before{ - content:"\e066" -} -.glyphicon-check:before{ - content:"\e067" -} -.glyphicon-move:before{ - content:"\e068" -} -.glyphicon-step-backward:before{ - content:"\e069" -} -.glyphicon-fast-backward:before{ - content:"\e070" -} -.glyphicon-backward:before{ - content:"\e071" -} -.glyphicon-play:before{ - content:"\e072" -} -.glyphicon-pause:before{ - content:"\e073" -} -.glyphicon-stop:before{ - content:"\e074" -} -.glyphicon-forward:before{ - content:"\e075" -} -.glyphicon-fast-forward:before{ - content:"\e076" -} -.glyphicon-step-forward:before{ - content:"\e077" -} -.glyphicon-eject:before{ - content:"\e078" -} -.glyphicon-chevron-left:before{ - content:"\e079" -} -.glyphicon-chevron-right:before{ - content:"\e080" -} -.glyphicon-plus-sign:before{ - content:"\e081" -} -.glyphicon-minus-sign:before{ - content:"\e082" -} -.glyphicon-remove-sign:before{ - content:"\e083" -} -.glyphicon-ok-sign:before{ - content:"\e084" -} -.glyphicon-question-sign:before{ - content:"\e085" -} -.glyphicon-info-sign:before{ - content:"\e086" -} -.glyphicon-screenshot:before{ - content:"\e087" -} -.glyphicon-remove-circle:before{ - content:"\e088" -} -.glyphicon-ok-circle:before{ - content:"\e089" -} -.glyphicon-ban-circle:before{ - content:"\e090" -} -.glyphicon-arrow-left:before{ - content:"\e091" -} -.glyphicon-arrow-right:before{ - content:"\e092" -} -.glyphicon-arrow-up:before{ - content:"\e093" -} -.glyphicon-arrow-down:before{ - content:"\e094" -} -.glyphicon-share-alt:before{ - content:"\e095" -} -.glyphicon-resize-full:before{ - content:"\e096" -} -.glyphicon-resize-small:before{ - content:"\e097" -} -.glyphicon-exclamation-sign:before{ - content:"\e101" -} -.glyphicon-gift:before{ - content:"\e102" -} -.glyphicon-leaf:before{ - content:"\e103" -} -.glyphicon-fire:before{ - content:"\e104" -} -.glyphicon-eye-open:before{ - content:"\e105" -} -.glyphicon-eye-close:before{ - content:"\e106" -} -.glyphicon-warning-sign:before{ - content:"\e107" -} -.glyphicon-plane:before{ - content:"\e108" -} -.glyphicon-calendar:before{ - content:"\e109" -} -.glyphicon-random:before{ - content:"\e110" -} -.glyphicon-comment:before{ - content:"\e111" -} -.glyphicon-magnet:before{ - content:"\e112" -} -.glyphicon-chevron-up:before{ - content:"\e113" -} -.glyphicon-chevron-down:before{ - content:"\e114" -} -.glyphicon-retweet:before{ - content:"\e115" -} -.glyphicon-shopping-cart:before{ - content:"\e116" -} -.glyphicon-folder-close:before{ - content:"\e117" -} -.glyphicon-folder-open:before{ - content:"\e118" -} -.glyphicon-resize-vertical:before{ - content:"\e119" -} -.glyphicon-resize-horizontal:before{ - content:"\e120" -} -.glyphicon-hdd:before{ - content:"\e121" -} -.glyphicon-bullhorn:before{ - content:"\e122" -} -.glyphicon-bell:before{ - content:"\e123" -} -.glyphicon-certificate:before{ - content:"\e124" -} -.glyphicon-thumbs-up:before{ - content:"\e125" -} -.glyphicon-thumbs-down:before{ - content:"\e126" -} -.glyphicon-hand-right:before{ - content:"\e127" -} -.glyphicon-hand-left:before{ - content:"\e128" -} -.glyphicon-hand-up:before{ - content:"\e129" -} -.glyphicon-hand-down:before{ - content:"\e130" -} -.glyphicon-circle-arrow-right:before{ - content:"\e131" -} -.glyphicon-circle-arrow-left:before{ - content:"\e132" -} -.glyphicon-circle-arrow-up:before{ - content:"\e133" -} -.glyphicon-circle-arrow-down:before{ - content:"\e134" -} -.glyphicon-globe:before{ - content:"\e135" -} -.glyphicon-wrench:before{ - content:"\e136" -} -.glyphicon-tasks:before{ - content:"\e137" -} -.glyphicon-filter:before{ - content:"\e138" -} -.glyphicon-briefcase:before{ - content:"\e139" -} -.glyphicon-fullscreen:before{ - content:"\e140" -} -.glyphicon-dashboard:before{ - content:"\e141" -} -.glyphicon-paperclip:before{ - content:"\e142" -} -.glyphicon-heart-empty:before{ - content:"\e143" -} -.glyphicon-link:before{ - content:"\e144" -} -.glyphicon-phone:before{ - content:"\e145" -} -.glyphicon-pushpin:before{ - content:"\e146" -} -.glyphicon-usd:before{ - content:"\e148" -} -.glyphicon-gbp:before{ - content:"\e149" -} -.glyphicon-sort:before{ - content:"\e150" -} -.glyphicon-sort-by-alphabet:before{ - content:"\e151" -} -.glyphicon-sort-by-alphabet-alt:before{ - content:"\e152" -} -.glyphicon-sort-by-order:before{ - content:"\e153" -} -.glyphicon-sort-by-order-alt:before{ - content:"\e154" -} -.glyphicon-sort-by-attributes:before{ - content:"\e155" -} -.glyphicon-sort-by-attributes-alt:before{ - content:"\e156" -} -.glyphicon-unchecked:before{ - content:"\e157" -} -.glyphicon-expand:before{ - content:"\e158" -} -.glyphicon-collapse-down:before{ - content:"\e159" -} -.glyphicon-collapse-up:before{ - content:"\e160" -} -.glyphicon-log-in:before{ - content:"\e161" -} -.glyphicon-flash:before{ - content:"\e162" -} -.glyphicon-log-out:before{ - content:"\e163" -} -.glyphicon-new-window:before{ - content:"\e164" -} -.glyphicon-record:before{ - content:"\e165" -} -.glyphicon-save:before{ - content:"\e166" -} -.glyphicon-open:before{ - content:"\e167" -} -.glyphicon-saved:before{ - content:"\e168" -} -.glyphicon-import:before{ - content:"\e169" -} -.glyphicon-export:before{ - content:"\e170" -} -.glyphicon-send:before{ - content:"\e171" -} -.glyphicon-floppy-disk:before{ - content:"\e172" -} -.glyphicon-floppy-saved:before{ - content:"\e173" -} -.glyphicon-floppy-remove:before{ - content:"\e174" -} -.glyphicon-floppy-save:before{ - content:"\e175" -} -.glyphicon-floppy-open:before{ - content:"\e176" -} -.glyphicon-credit-card:before{ - content:"\e177" -} -.glyphicon-transfer:before{ - content:"\e178" -} -.glyphicon-cutlery:before{ - content:"\e179" -} -.glyphicon-header:before{ - content:"\e180" -} -.glyphicon-compressed:before{ - content:"\e181" -} -.glyphicon-earphone:before{ - content:"\e182" -} -.glyphicon-phone-alt:before{ - content:"\e183" -} -.glyphicon-tower:before{ - content:"\e184" -} -.glyphicon-stats:before{ - content:"\e185" -} -.glyphicon-sd-video:before{ - content:"\e186" -} -.glyphicon-hd-video:before{ - content:"\e187" -} -.glyphicon-subtitles:before{ - content:"\e188" -} -.glyphicon-sound-stereo:before{ - content:"\e189" -} -.glyphicon-sound-dolby:before{ - content:"\e190" -} -.glyphicon-sound-5-1:before{ - content:"\e191" -} -.glyphicon-sound-6-1:before{ - content:"\e192" -} -.glyphicon-sound-7-1:before{ - content:"\e193" -} -.glyphicon-copyright-mark:before{ - content:"\e194" -} -.glyphicon-registration-mark:before{ - content:"\e195" -} -.glyphicon-cloud-download:before{ - content:"\e197" -} -.glyphicon-cloud-upload:before{ - content:"\e198" -} -.glyphicon-tree-conifer:before{ - content:"\e199" -} -.glyphicon-tree-deciduous:before{ - content:"\e200" -} -.glyphicon-cd:before{ - content:"\e201" -} -.glyphicon-save-file:before{ - content:"\e202" -} -.glyphicon-open-file:before{ - content:"\e203" -} -.glyphicon-level-up:before{ - content:"\e204" -} -.glyphicon-copy:before{ - content:"\e205" -} -.glyphicon-paste:before{ - content:"\e206" -} -.glyphicon-alert:before{ - content:"\e209" -} -.glyphicon-equalizer:before{ - content:"\e210" -} -.glyphicon-king:before{ - content:"\e211" -} -.glyphicon-queen:before{ - content:"\e212" -} -.glyphicon-pawn:before{ - content:"\e213" -} -.glyphicon-bishop:before{ - content:"\e214" -} -.glyphicon-knight:before{ - content:"\e215" -} -.glyphicon-baby-formula:before{ - content:"\e216" -} -.glyphicon-tent:before{ - content:"\26fa" -} -.glyphicon-blackboard:before{ - content:"\e218" -} -.glyphicon-bed:before{ - content:"\e219" -} -.glyphicon-apple:before{ - content:"\f8ff" -} -.glyphicon-erase:before{ - content:"\e221" -} -.glyphicon-hourglass:before{ - content:"\231b" -} -.glyphicon-lamp:before{ - content:"\e223" -} -.glyphicon-duplicate:before{ - content:"\e224" -} -.glyphicon-piggy-bank:before{ - content:"\e225" -} -.glyphicon-scissors:before{ - content:"\e226" -} -.glyphicon-bitcoin:before{ - content:"\e227" -} -.glyphicon-btc:before{ - content:"\e227" -} -.glyphicon-xbt:before{ - content:"\e227" -} -.glyphicon-yen:before{ - content:"\00a5" -} -.glyphicon-jpy:before{ - content:"\00a5" -} -.glyphicon-ruble:before{ - content:"\20bd" -} -.glyphicon-rub:before{ - content:"\20bd" -} -.glyphicon-scale:before{ - content:"\e230" -} -.glyphicon-ice-lolly:before{ - content:"\e231" -} -.glyphicon-ice-lolly-tasted:before{ - content:"\e232" -} -.glyphicon-education:before{ - content:"\e233" -} -.glyphicon-option-horizontal:before{ - content:"\e234" -} -.glyphicon-option-vertical:before{ - content:"\e235" -} -.glyphicon-menu-hamburger:before{ - content:"\e236" -} -.glyphicon-modal-window:before{ - content:"\e237" -} -.glyphicon-oil:before{ - content:"\e238" -} -.glyphicon-grain:before{ - content:"\e239" -} -.glyphicon-sunglasses:before{ - content:"\e240" -} -.glyphicon-text-size:before{ - content:"\e241" -} -.glyphicon-text-color:before{ - content:"\e242" -} -.glyphicon-text-background:before{ - content:"\e243" -} -.glyphicon-object-align-top:before{ - content:"\e244" -} -.glyphicon-object-align-bottom:before{ - content:"\e245" -} -.glyphicon-object-align-horizontal:before{ - content:"\e246" -} -.glyphicon-object-align-left:before{ - content:"\e247" -} -.glyphicon-object-align-vertical:before{ - content:"\e248" -} -.glyphicon-object-align-right:before{ - content:"\e249" -} -.glyphicon-triangle-right:before{ - content:"\e250" -} -.glyphicon-triangle-left:before{ - content:"\e251" -} -.glyphicon-triangle-bottom:before{ - content:"\e252" -} -.glyphicon-triangle-top:before{ - content:"\e253" -} -.glyphicon-console:before{ - content:"\e254" -} -.glyphicon-superscript:before{ - content:"\e255" -} -.glyphicon-subscript:before{ - content:"\e256" -} -.glyphicon-menu-left:before{ - content:"\e257" -} -.glyphicon-menu-right:before{ - content:"\e258" -} -.glyphicon-menu-down:before{ - content:"\e259" -} -.glyphicon-menu-up:before{ - content:"\e260" -} -*{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -:after,:before{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -html{ - font-size:10px; - -webkit-tap-highlight-color:rgba(0,0,0,0) -} -body{ - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - line-height:1.42857143; - color:#333; - background-color:#fff -} -button,input,select,textarea{ - font-family:inherit; - font-size:inherit; - line-height:inherit -} -a{ - color:#337ab7; - text-decoration:none -} -a:focus,a:hover{ - color:#23527c; - text-decoration:underline -} -a:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -figure{ - margin:0 -} -img{ - vertical-align:middle -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{ - display:block; - max-width:100%; - height:auto -} -.img-rounded{ - border-radius:6px -} -.img-thumbnail{ - display:inline-block; - max-width:100%; - height:auto; - padding:4px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:all .2s ease-in-out; - -o-transition:all .2s ease-in-out; - transition:all .2s ease-in-out -} -.img-circle{ - border-radius:50% -} -hr{ - margin-top:20px; - margin-bottom:20px; - border:0; - border-top:1px solid #eee -} -.sr-only{ - position:absolute; - width:1px; - height:1px; - padding:0; - margin:-1px; - overflow:hidden; - clip:rect(0,0,0,0); - border:0 -} -.sr-only-focusable:active,.sr-only-focusable:focus{ - position:static; - width:auto; - height:auto; - margin:0; - overflow:visible; - clip:auto -} -[role=button]{ - cursor:pointer -} -.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{ - font-family:inherit; - font-weight:500; - line-height:1.1; - color:inherit -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-weight:400; - line-height:1; - color:#777 -} -.h1,.h2,.h3,h1,h2,h3{ - margin-top:20px; - margin-bottom:10px -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{ - font-size:65% -} -.h4,.h5,.h6,h4,h5,h6{ - margin-top:10px; - margin-bottom:10px -} -.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-size:75% -} -.h1,h1{ - font-size:36px -} -.h2,h2{ - font-size:30px -} -.h3,h3{ - font-size:24px -} -.h4,h4{ - font-size:18px -} -.h5,h5{ - font-size:14px -} -.h6,h6{ - font-size:12px -} -p{ - margin:0 0 10px -} -.lead{ - margin-bottom:20px; - font-size:16px; - font-weight:300; - line-height:1.4 -} -@media (min-width:768px){ - .lead{ - font-size:21px - } -} -.small,small{ - font-size:85% -} -.mark,mark{ - padding:.2em; - background-color:#fcf8e3 -} -.text-left{ - text-align:left -} -.text-right{ - text-align:right -} -.text-center{ - text-align:center -} -.text-justify{ - text-align:justify -} -.text-nowrap{ - white-space:nowrap -} -.text-lowercase{ - text-transform:lowercase -} -.text-uppercase{ - text-transform:uppercase -} -.text-capitalize{ - text-transform:capitalize -} -.text-muted{ - color:#777 -} -.text-primary{ - color:#337ab7 -} -a.text-primary:focus,a.text-primary:hover{ - color:#286090 -} -.text-success{ - color:#3c763d -} -a.text-success:focus,a.text-success:hover{ - color:#2b542c -} -.text-info{ - color:#31708f -} -a.text-info:focus,a.text-info:hover{ - color:#245269 -} -.text-warning{ - color:#8a6d3b -} -a.text-warning:focus,a.text-warning:hover{ - color:#66512c -} -.text-danger{ - color:#a94442 -} -a.text-danger:focus,a.text-danger:hover{ - color:#843534 -} -.bg-primary{ - color:#fff; - background-color:#337ab7 -} -a.bg-primary:focus,a.bg-primary:hover{ - background-color:#286090 -} -.bg-success{ - background-color:#dff0d8 -} -a.bg-success:focus,a.bg-success:hover{ - background-color:#c1e2b3 -} -.bg-info{ - background-color:#d9edf7 -} -a.bg-info:focus,a.bg-info:hover{ - background-color:#afd9ee -} -.bg-warning{ - background-color:#fcf8e3 -} -a.bg-warning:focus,a.bg-warning:hover{ - background-color:#f7ecb5 -} -.bg-danger{ - background-color:#f2dede -} -a.bg-danger:focus,a.bg-danger:hover{ - background-color:#e4b9b9 -} -.page-header{ - padding-bottom:9px; - margin:40px 0 20px; - border-bottom:1px solid #eee -} -ol,ul{ - margin-top:0; - margin-bottom:10px -} -ol ol,ol ul,ul ol,ul ul{ - margin-bottom:0 -} -.list-unstyled{ - padding-left:0; - list-style:none -} -.list-inline{ - padding-left:0; - margin-left:-5px; - list-style:none -} -.list-inline>li{ - display:inline-block; - padding-right:5px; - padding-left:5px -} -dl{ - margin-top:0; - margin-bottom:20px -} -dd,dt{ - line-height:1.42857143 -} -dt{ - font-weight:700 -} -dd{ - margin-left:0 -} -@media (min-width:768px){ - .dl-horizontal dt{ - float:left; - width:160px; - overflow:hidden; - clear:left; - text-align:right; - text-overflow:ellipsis; - white-space:nowrap - } - .dl-horizontal dd{ - margin-left:180px - } -} -abbr[data-original-title],abbr[title]{ - cursor:help; - border-bottom:1px dotted #777 -} -.initialism{ - font-size:90%; - text-transform:uppercase -} -blockquote{ - padding:10px 20px; - margin:0 0 20px; - font-size:17.5px; - border-left:5px solid #eee -} -blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{ - margin-bottom:0 -} -blockquote .small,blockquote footer,blockquote small{ - display:block; - font-size:80%; - line-height:1.42857143; - color:#777 -} -blockquote .small:before,blockquote footer:before,blockquote small:before{ - content:'\2014 \00A0' -} -.blockquote-reverse,blockquote.pull-right{ - padding-right:15px; - padding-left:0; - text-align:right; - border-right:5px solid #eee; - border-left:0 -} -.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{ - content:'' -} -.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{ - content:'\00A0 \2014' -} -address{ - margin-bottom:20px; - font-style:normal; - line-height:1.42857143 -} -code,kbd,pre,samp{ - font-family:Menlo,Monaco,Consolas,"Courier New",monospace -} -code{ - padding:2px 4px; - font-size:90%; - color:#c7254e; - background-color:#f9f2f4; - border-radius:4px -} -kbd{ - padding:2px 4px; - font-size:90%; - color:#fff; - background-color:#333; - border-radius:3px; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.25) -} -kbd kbd{ - padding:0; - font-size:100%; - font-weight:700; - -webkit-box-shadow:none; - box-shadow:none -} -pre{ - display:block; - padding:9.5px; - margin:0 0 10px; - font-size:13px; - line-height:1.42857143; - color:#333; - word-break:break-all; - word-wrap:break-word; - background-color:#f5f5f5; - border:1px solid #ccc; - border-radius:4px -} -pre code{ - padding:0; - font-size:inherit; - color:inherit; - white-space:pre-wrap; - background-color:transparent; - border-radius:0 -} -.pre-scrollable{ - max-height:340px; - overflow-y:scroll -} -.container{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -@media (min-width:768px){ - .container{ - width:750px - } -} -@media (min-width:992px){ - .container{ - width:970px - } -} -@media (min-width:1200px){ - .container{ - width:1170px - } -} -.container-fluid{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -.row{ - margin-right:-15px; - margin-left:-15px -} -.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - position:relative; - min-height:1px; - padding-right:15px; - padding-left:15px -} -.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - float:left -} -.col-xs-12{ - width:100% -} -.col-xs-11{ - width:91.66666667% -} -.col-xs-10{ - width:83.33333333% -} -.col-xs-9{ - width:75% -} -.col-xs-8{ - width:66.66666667% -} -.col-xs-7{ - width:58.33333333% -} -.col-xs-6{ - width:50% -} -.col-xs-5{ - width:41.66666667% -} -.col-xs-4{ - width:33.33333333% -} -.col-xs-3{ - width:25% -} -.col-xs-2{ - width:16.66666667% -} -.col-xs-1{ - width:8.33333333% -} -.col-xs-pull-12{ - right:100% -} -.col-xs-pull-11{ - right:91.66666667% -} -.col-xs-pull-10{ - right:83.33333333% -} -.col-xs-pull-9{ - right:75% -} -.col-xs-pull-8{ - right:66.66666667% -} -.col-xs-pull-7{ - right:58.33333333% -} -.col-xs-pull-6{ - right:50% -} -.col-xs-pull-5{ - right:41.66666667% -} -.col-xs-pull-4{ - right:33.33333333% -} -.col-xs-pull-3{ - right:25% -} -.col-xs-pull-2{ - right:16.66666667% -} -.col-xs-pull-1{ - right:8.33333333% -} -.col-xs-pull-0{ - right:auto -} -.col-xs-push-12{ - left:100% -} -.col-xs-push-11{ - left:91.66666667% -} -.col-xs-push-10{ - left:83.33333333% -} -.col-xs-push-9{ - left:75% -} -.col-xs-push-8{ - left:66.66666667% -} -.col-xs-push-7{ - left:58.33333333% -} -.col-xs-push-6{ - left:50% -} -.col-xs-push-5{ - left:41.66666667% -} -.col-xs-push-4{ - left:33.33333333% -} -.col-xs-push-3{ - left:25% -} -.col-xs-push-2{ - left:16.66666667% -} -.col-xs-push-1{ - left:8.33333333% -} -.col-xs-push-0{ - left:auto -} -.col-xs-offset-12{ - margin-left:100% -} -.col-xs-offset-11{ - margin-left:91.66666667% -} -.col-xs-offset-10{ - margin-left:83.33333333% -} -.col-xs-offset-9{ - margin-left:75% -} -.col-xs-offset-8{ - margin-left:66.66666667% -} -.col-xs-offset-7{ - margin-left:58.33333333% -} -.col-xs-offset-6{ - margin-left:50% -} -.col-xs-offset-5{ - margin-left:41.66666667% -} -.col-xs-offset-4{ - margin-left:33.33333333% -} -.col-xs-offset-3{ - margin-left:25% -} -.col-xs-offset-2{ - margin-left:16.66666667% -} -.col-xs-offset-1{ - margin-left:8.33333333% -} -.col-xs-offset-0{ - margin-left:0 -} -@media (min-width:768px){ - .col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{ - float:left - } - .col-sm-12{ - width:100% - } - .col-sm-11{ - width:91.66666667% - } - .col-sm-10{ - width:83.33333333% - } - .col-sm-9{ - width:75% - } - .col-sm-8{ - width:66.66666667% - } - .col-sm-7{ - width:58.33333333% - } - .col-sm-6{ - width:50% - } - .col-sm-5{ - width:41.66666667% - } - .col-sm-4{ - width:33.33333333% - } - .col-sm-3{ - width:25% - } - .col-sm-2{ - width:16.66666667% - } - .col-sm-1{ - width:8.33333333% - } - .col-sm-pull-12{ - right:100% - } - .col-sm-pull-11{ - right:91.66666667% - } - .col-sm-pull-10{ - right:83.33333333% - } - .col-sm-pull-9{ - right:75% - } - .col-sm-pull-8{ - right:66.66666667% - } - .col-sm-pull-7{ - right:58.33333333% - } - .col-sm-pull-6{ - right:50% - } - .col-sm-pull-5{ - right:41.66666667% - } - .col-sm-pull-4{ - right:33.33333333% - } - .col-sm-pull-3{ - right:25% - } - .col-sm-pull-2{ - right:16.66666667% - } - .col-sm-pull-1{ - right:8.33333333% - } - .col-sm-pull-0{ - right:auto - } - .col-sm-push-12{ - left:100% - } - .col-sm-push-11{ - left:91.66666667% - } - .col-sm-push-10{ - left:83.33333333% - } - .col-sm-push-9{ - left:75% - } - .col-sm-push-8{ - left:66.66666667% - } - .col-sm-push-7{ - left:58.33333333% - } - .col-sm-push-6{ - left:50% - } - .col-sm-push-5{ - left:41.66666667% - } - .col-sm-push-4{ - left:33.33333333% - } - .col-sm-push-3{ - left:25% - } - .col-sm-push-2{ - left:16.66666667% - } - .col-sm-push-1{ - left:8.33333333% - } - .col-sm-push-0{ - left:auto - } - .col-sm-offset-12{ - margin-left:100% - } - .col-sm-offset-11{ - margin-left:91.66666667% - } - .col-sm-offset-10{ - margin-left:83.33333333% - } - .col-sm-offset-9{ - margin-left:75% - } - .col-sm-offset-8{ - margin-left:66.66666667% - } - .col-sm-offset-7{ - margin-left:58.33333333% - } - .col-sm-offset-6{ - margin-left:50% - } - .col-sm-offset-5{ - margin-left:41.66666667% - } - .col-sm-offset-4{ - margin-left:33.33333333% - } - .col-sm-offset-3{ - margin-left:25% - } - .col-sm-offset-2{ - margin-left:16.66666667% - } - .col-sm-offset-1{ - margin-left:8.33333333% - } - .col-sm-offset-0{ - margin-left:0 - } -} -@media (min-width:992px){ - .col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{ - float:left - } - .col-md-12{ - width:100% - } - .col-md-11{ - width:91.66666667% - } - .col-md-10{ - width:83.33333333% - } - .col-md-9{ - width:75% - } - .col-md-8{ - width:66.66666667% - } - .col-md-7{ - width:58.33333333% - } - .col-md-6{ - width:50% - } - .col-md-5{ - width:41.66666667% - } - .col-md-4{ - width:33.33333333% - } - .col-md-3{ - width:25% - } - .col-md-2{ - width:16.66666667% - } - .col-md-1{ - width:8.33333333% - } - .col-md-pull-12{ - right:100% - } - .col-md-pull-11{ - right:91.66666667% - } - .col-md-pull-10{ - right:83.33333333% - } - .col-md-pull-9{ - right:75% - } - .col-md-pull-8{ - right:66.66666667% - } - .col-md-pull-7{ - right:58.33333333% - } - .col-md-pull-6{ - right:50% - } - .col-md-pull-5{ - right:41.66666667% - } - .col-md-pull-4{ - right:33.33333333% - } - .col-md-pull-3{ - right:25% - } - .col-md-pull-2{ - right:16.66666667% - } - .col-md-pull-1{ - right:8.33333333% - } - .col-md-pull-0{ - right:auto - } - .col-md-push-12{ - left:100% - } - .col-md-push-11{ - left:91.66666667% - } - .col-md-push-10{ - left:83.33333333% - } - .col-md-push-9{ - left:75% - } - .col-md-push-8{ - left:66.66666667% - } - .col-md-push-7{ - left:58.33333333% - } - .col-md-push-6{ - left:50% - } - .col-md-push-5{ - left:41.66666667% - } - .col-md-push-4{ - left:33.33333333% - } - .col-md-push-3{ - left:25% - } - .col-md-push-2{ - left:16.66666667% - } - .col-md-push-1{ - left:8.33333333% - } - .col-md-push-0{ - left:auto - } - .col-md-offset-12{ - margin-left:100% - } - .col-md-offset-11{ - margin-left:91.66666667% - } - .col-md-offset-10{ - margin-left:83.33333333% - } - .col-md-offset-9{ - margin-left:75% - } - .col-md-offset-8{ - margin-left:66.66666667% - } - .col-md-offset-7{ - margin-left:58.33333333% - } - .col-md-offset-6{ - margin-left:50% - } - .col-md-offset-5{ - margin-left:41.66666667% - } - .col-md-offset-4{ - margin-left:33.33333333% - } - .col-md-offset-3{ - margin-left:25% - } - .col-md-offset-2{ - margin-left:16.66666667% - } - .col-md-offset-1{ - margin-left:8.33333333% - } - .col-md-offset-0{ - margin-left:0 - } -} -@media (min-width:1200px){ - .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{ - float:left - } - .col-lg-12{ - width:100% - } - .col-lg-11{ - width:91.66666667% - } - .col-lg-10{ - width:83.33333333% - } - .col-lg-9{ - width:75% - } - .col-lg-8{ - width:66.66666667% - } - .col-lg-7{ - width:58.33333333% - } - .col-lg-6{ - width:50% - } - .col-lg-5{ - width:41.66666667% - } - .col-lg-4{ - width:33.33333333% - } - .col-lg-3{ - width:25% - } - .col-lg-2{ - width:16.66666667% - } - .col-lg-1{ - width:8.33333333% - } - .col-lg-pull-12{ - right:100% - } - .col-lg-pull-11{ - right:91.66666667% - } - .col-lg-pull-10{ - right:83.33333333% - } - .col-lg-pull-9{ - right:75% - } - .col-lg-pull-8{ - right:66.66666667% - } - .col-lg-pull-7{ - right:58.33333333% - } - .col-lg-pull-6{ - right:50% - } - .col-lg-pull-5{ - right:41.66666667% - } - .col-lg-pull-4{ - right:33.33333333% - } - .col-lg-pull-3{ - right:25% - } - .col-lg-pull-2{ - right:16.66666667% - } - .col-lg-pull-1{ - right:8.33333333% - } - .col-lg-pull-0{ - right:auto - } - .col-lg-push-12{ - left:100% - } - .col-lg-push-11{ - left:91.66666667% - } - .col-lg-push-10{ - left:83.33333333% - } - .col-lg-push-9{ - left:75% - } - .col-lg-push-8{ - left:66.66666667% - } - .col-lg-push-7{ - left:58.33333333% - } - .col-lg-push-6{ - left:50% - } - .col-lg-push-5{ - left:41.66666667% - } - .col-lg-push-4{ - left:33.33333333% - } - .col-lg-push-3{ - left:25% - } - .col-lg-push-2{ - left:16.66666667% - } - .col-lg-push-1{ - left:8.33333333% - } - .col-lg-push-0{ - left:auto - } - .col-lg-offset-12{ - margin-left:100% - } - .col-lg-offset-11{ - margin-left:91.66666667% - } - .col-lg-offset-10{ - margin-left:83.33333333% - } - .col-lg-offset-9{ - margin-left:75% - } - .col-lg-offset-8{ - margin-left:66.66666667% - } - .col-lg-offset-7{ - margin-left:58.33333333% - } - .col-lg-offset-6{ - margin-left:50% - } - .col-lg-offset-5{ - margin-left:41.66666667% - } - .col-lg-offset-4{ - margin-left:33.33333333% - } - .col-lg-offset-3{ - margin-left:25% - } - .col-lg-offset-2{ - margin-left:16.66666667% - } - .col-lg-offset-1{ - margin-left:8.33333333% - } - .col-lg-offset-0{ - margin-left:0 - } -} -table{ - background-color:transparent -} -caption{ - padding-top:8px; - padding-bottom:8px; - color:#777; - text-align:left -} -th{ - text-align:left -} -.table{ - width:100%; - max-width:100%; - margin-bottom:20px -} -.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{ - padding:8px; - line-height:1.42857143; - vertical-align:top; - border-top:1px solid #ddd -} -.table>thead>tr>th{ - vertical-align:bottom; - border-bottom:2px solid #ddd -} -.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{ - border-top:0 -} -.table>tbody+tbody{ - border-top:2px solid #ddd -} -.table .table{ - background-color:#fff -} -.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{ - padding:5px -} -.table-bordered{ - border:1px solid #ddd -} -.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border:1px solid #ddd -} -.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border-bottom-width:2px -} -.table-striped>tbody>tr:nth-of-type(odd){ - background-color:#f9f9f9 -} -.table-hover>tbody>tr:hover{ - background-color:#f5f5f5 -} -table col[class*=col-]{ - position:static; - display:table-column; - float:none -} -table td[class*=col-],table th[class*=col-]{ - position:static; - display:table-cell; - float:none -} -.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{ - background-color:#f5f5f5 -} -.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{ - background-color:#e8e8e8 -} -.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{ - background-color:#dff0d8 -} -.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{ - background-color:#d0e9c6 -} -.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{ - background-color:#d9edf7 -} -.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{ - background-color:#c4e3f3 -} -.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{ - background-color:#fcf8e3 -} -.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{ - background-color:#faf2cc -} -.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{ - background-color:#f2dede -} -.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{ - background-color:#ebcccc -} -.table-responsive{ - min-height:.01%; - overflow-x:auto -} -@media screen and (max-width:767px){ - .table-responsive{ - width:100%; - margin-bottom:15px; - overflow-y:hidden; - -ms-overflow-style:-ms-autohiding-scrollbar; - border:1px solid #ddd - } - .table-responsive>.table{ - margin-bottom:0 - } - .table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{ - white-space:nowrap - } - .table-responsive>.table-bordered{ - border:0 - } - .table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 - } - .table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 - } - .table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 - } -} -fieldset{ - min-width:0; - padding:0; - margin:0; - border:0 -} -legend{ - display:block; - width:100%; - padding:0; - margin-bottom:20px; - font-size:21px; - line-height:inherit; - color:#333; - border:0; - border-bottom:1px solid #e5e5e5 -} -label{ - display:inline-block; - max-width:100%; - margin-bottom:5px; - font-weight:700 -} -input[type=search]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -input[type=checkbox],input[type=radio]{ - margin:4px 0 0; - margin-top:1px\9; - line-height:normal -} -input[type=file]{ - display:block -} -input[type=range]{ - display:block; - width:100% -} -select[multiple],select[size]{ - height:auto -} -input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -output{ - display:block; - padding-top:7px; - font-size:14px; - line-height:1.42857143; - color:#555 -} -.form-control{ - display:block; - width:100%; - height:34px; - padding:6px 12px; - font-size:14px; - line-height:1.42857143; - color:#555; - background-color:#fff; - background-image:none; - border:1px solid #ccc; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - -webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; - -o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s; - transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s -} -.form-control:focus{ - border-color:#66afe9; - outline:0; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6) -} -.form-control::-moz-placeholder{ - color:#999; - opacity:1 -} -.form-control:-ms-input-placeholder{ - color:#999 -} -.form-control::-webkit-input-placeholder{ - color:#999 -} -.form-control::-ms-expand{ - background-color:transparent; - border:0 -} -.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{ - background-color:#eee; - opacity:1 -} -.form-control[disabled],fieldset[disabled] .form-control{ - cursor:not-allowed -} -textarea.form-control{ - height:auto -} -input[type=search]{ - -webkit-appearance:none -} -@media screen and (-webkit-min-device-pixel-ratio:0){ - input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{ - line-height:34px - } - .input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{ - line-height:30px - } - .input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{ - line-height:46px - } -} -.form-group{ - margin-bottom:15px -} -.checkbox,.radio{ - position:relative; - display:block; - margin-top:10px; - margin-bottom:10px -} -.checkbox label,.radio label{ - min-height:20px; - padding-left:20px; - margin-bottom:0; - font-weight:400; - cursor:pointer -} -.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{ - position:absolute; - margin-top:4px\9; - margin-left:-20px -} -.checkbox+.checkbox,.radio+.radio{ - margin-top:-5px -} -.checkbox-inline,.radio-inline{ - position:relative; - display:inline-block; - padding-left:20px; - margin-bottom:0; - font-weight:400; - vertical-align:middle; - cursor:pointer -} -.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{ - margin-top:0; - margin-left:10px -} -fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{ - cursor:not-allowed -} -.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{ - cursor:not-allowed -} -.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{ - cursor:not-allowed -} -.form-control-static{ - min-height:34px; - padding-top:7px; - padding-bottom:7px; - margin-bottom:0 -} -.form-control-static.input-lg,.form-control-static.input-sm{ - padding-right:0; - padding-left:0 -} -.input-sm{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-sm{ - height:30px; - line-height:30px -} -select[multiple].input-sm,textarea.input-sm{ - height:auto -} -.form-group-sm .form-control{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.form-group-sm select.form-control{ - height:30px; - line-height:30px -} -.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{ - height:auto -} -.form-group-sm .form-control-static{ - height:30px; - min-height:32px; - padding:6px 10px; - font-size:12px; - line-height:1.5 -} -.input-lg{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-lg{ - height:46px; - line-height:46px -} -select[multiple].input-lg,textarea.input-lg{ - height:auto -} -.form-group-lg .form-control{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.form-group-lg select.form-control{ - height:46px; - line-height:46px -} -.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{ - height:auto -} -.form-group-lg .form-control-static{ - height:46px; - min-height:38px; - padding:11px 16px; - font-size:18px; - line-height:1.3333333 -} -.has-feedback{ - position:relative -} -.has-feedback .form-control{ - padding-right:42.5px -} -.form-control-feedback{ - position:absolute; - top:0; - right:0; - z-index:2; - display:block; - width:34px; - height:34px; - line-height:34px; - text-align:center; - pointer-events:none -} -.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{ - width:46px; - height:46px; - line-height:46px -} -.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{ - width:30px; - height:30px; - line-height:30px -} -.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{ - color:#3c763d -} -.has-success .form-control{ - border-color:#3c763d; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-success .form-control:focus{ - border-color:#2b542c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168 -} -.has-success .input-group-addon{ - color:#3c763d; - background-color:#dff0d8; - border-color:#3c763d -} -.has-success .form-control-feedback{ - color:#3c763d -} -.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{ - color:#8a6d3b -} -.has-warning .form-control{ - border-color:#8a6d3b; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-warning .form-control:focus{ - border-color:#66512c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b -} -.has-warning .input-group-addon{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#8a6d3b -} -.has-warning .form-control-feedback{ - color:#8a6d3b -} -.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{ - color:#a94442 -} -.has-error .form-control{ - border-color:#a94442; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-error .form-control:focus{ - border-color:#843534; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483 -} -.has-error .input-group-addon{ - color:#a94442; - background-color:#f2dede; - border-color:#a94442 -} -.has-error .form-control-feedback{ - color:#a94442 -} -.has-feedback label~.form-control-feedback{ - top:25px -} -.has-feedback label.sr-only~.form-control-feedback{ - top:0 -} -.help-block{ - display:block; - margin-top:5px; - margin-bottom:10px; - color:#737373 -} -@media (min-width:768px){ - .form-inline .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .form-inline .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .form-inline .form-control-static{ - display:inline-block - } - .form-inline .input-group{ - display:inline-table; - vertical-align:middle - } - .form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{ - width:auto - } - .form-inline .input-group>.form-control{ - width:100% - } - .form-inline .control-label{ - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox,.form-inline .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox label,.form-inline .radio label{ - padding-left:0 - } - .form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .form-inline .has-feedback .form-control-feedback{ - top:0 - } -} -.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{ - padding-top:7px; - margin-top:0; - margin-bottom:0 -} -.form-horizontal .checkbox,.form-horizontal .radio{ - min-height:27px -} -.form-horizontal .form-group{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .form-horizontal .control-label{ - padding-top:7px; - margin-bottom:0; - text-align:right - } -} -.form-horizontal .has-feedback .form-control-feedback{ - right:15px -} -@media (min-width:768px){ - .form-horizontal .form-group-lg .control-label{ - padding-top:11px; - font-size:18px - } -} -@media (min-width:768px){ - .form-horizontal .form-group-sm .control-label{ - padding-top:6px; - font-size:12px - } -} -.btn{ - display:inline-block; - padding:6px 12px; - margin-bottom:0; - font-size:14px; - font-weight:400; - line-height:1.42857143; - text-align:center; - white-space:nowrap; - vertical-align:middle; - -ms-touch-action:manipulation; - touch-action:manipulation; - cursor:pointer; - -webkit-user-select:none; - -moz-user-select:none; - -ms-user-select:none; - user-select:none; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -.btn.focus,.btn:focus,.btn:hover{ - color:#333; - text-decoration:none -} -.btn.active,.btn:active{ - background-image:none; - outline:0; - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn.disabled,.btn[disabled],fieldset[disabled] .btn{ - cursor:not-allowed; - filter:alpha(opacity=65); - -webkit-box-shadow:none; - box-shadow:none; - opacity:.65 -} -a.btn.disabled,fieldset[disabled] a.btn{ - pointer-events:none -} -.btn-default{ - color:#333; - background-color:#fff; - border-color:#ccc -} -.btn-default.focus,.btn-default:focus{ - color:#333; - background-color:#e6e6e6; - border-color:#8c8c8c -} -.btn-default:hover{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{ - color:#333; - background-color:#d4d4d4; - border-color:#8c8c8c -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - background-image:none -} -.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{ - background-color:#fff; - border-color:#ccc -} -.btn-default .badge{ - color:#fff; - background-color:#333 -} -.btn-primary{ - color:#fff; - background-color:#d11010; - border-color:#c40f0f -} -.btn-primary.focus,.btn-primary:focus{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary:hover{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - background-image:none -} -.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{ - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary .badge{ - color:#337ab7; - background-color:#fff -} -.btn-success{ - color:#fff; - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success.focus,.btn-success:focus{ - color:#fff; - background-color:#449d44; - border-color:#255625 -} -.btn-success:hover{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{ - color:#fff; - background-color:#398439; - border-color:#255625 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - background-image:none -} -.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{ - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success .badge{ - color:#5cb85c; - background-color:#fff -} -.btn-info{ - color:#fff; - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info.focus,.btn-info:focus{ - color:#fff; - background-color:#31b0d5; - border-color:#1b6d85 -} -.btn-info:hover{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{ - color:#fff; - background-color:#269abc; - border-color:#1b6d85 -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - background-image:none -} -.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{ - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info .badge{ - color:#5bc0de; - background-color:#fff -} -.btn-warning{ - color:#fff; - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning.focus,.btn-warning:focus{ - color:#fff; - background-color:#ec971f; - border-color:#985f0d -} -.btn-warning:hover{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{ - color:#fff; - background-color:#d58512; - border-color:#985f0d -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - background-image:none -} -.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{ - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning .badge{ - color:#f0ad4e; - background-color:#fff -} -.btn-danger{ - color:#fff; - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger.focus,.btn-danger:focus{ - color:#fff; - background-color:#c9302c; - border-color:#761c19 -} -.btn-danger:hover{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{ - color:#fff; - background-color:#ac2925; - border-color:#761c19 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - background-image:none -} -.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{ - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger .badge{ - color:#d9534f; - background-color:#fff -} -.btn-link{ - font-weight:400; - color:#337ab7; - border-radius:0 -} -.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{ - background-color:transparent; - -webkit-box-shadow:none; - box-shadow:none -} -.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{ - border-color:transparent -} -.btn-link:focus,.btn-link:hover{ - color:#23527c; - text-decoration:underline; - background-color:transparent -} -.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{ - color:#777; - text-decoration:none -} -.btn-group-lg>.btn,.btn-lg{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.btn-group-sm>.btn,.btn-sm{ - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-group-xs>.btn,.btn-xs{ - padding:1px 5px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-block{ - display:block; - width:100% -} -.btn-block+.btn-block{ - margin-top:5px -} -input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{ - width:100% -} -.fade{ - opacity:0; - -webkit-transition:opacity .15s linear; - -o-transition:opacity .15s linear; - transition:opacity .15s linear -} -.fade.in{ - opacity:1 -} -.collapse{ - display:none -} -.collapse.in{ - display:block -} -tr.collapse.in{ - display:table-row -} -tbody.collapse.in{ - display:table-row-group -} -.collapsing{ - position:relative; - height:0; - overflow:hidden; - -webkit-transition-timing-function:ease; - -o-transition-timing-function:ease; - transition-timing-function:ease; - -webkit-transition-duration:.35s; - -o-transition-duration:.35s; - transition-duration:.35s; - -webkit-transition-property:height,visibility; - -o-transition-property:height,visibility; - transition-property:height,visibility -} -.caret{ - display:inline-block; - width:0; - height:0; - margin-left:2px; - vertical-align:middle; - border-top:4px dashed; - border-top:4px solid\9; - border-right:4px solid transparent; - border-left:4px solid transparent -} -.dropdown,.dropup{ - position:relative -} -.dropdown-toggle:focus{ - outline:0 -} -.dropdown-menu{ - position:absolute; - top:100%; - left:0; - z-index:1000; - display:none; - float:left; - min-width:160px; - padding:5px 0; - margin:2px 0 0; - font-size:14px; - text-align:left; - list-style:none; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.15); - border-radius:4px; - -webkit-box-shadow:0 6px 12px rgba(0,0,0,.175); - box-shadow:0 6px 12px rgba(0,0,0,.175) -} -.dropdown-menu.pull-right{ - right:0; - left:auto -} -.dropdown-menu .divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.dropdown-menu>li>a{ - display:block; - padding:3px 20px; - clear:both; - font-weight:400; - line-height:1.42857143; - color:#333; - white-space:nowrap -} -.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{ - color:#262626; - text-decoration:none; - background-color:#f5f5f5 -} -.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{ - color:#fff; - text-decoration:none; - background-color:#337ab7; - outline:0 -} -.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - color:#777 -} -.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - text-decoration:none; - cursor:not-allowed; - background-color:transparent; - background-image:none; - filter:progid:DXImageTransform.Microsoft.gradient(enabled=false) -} -.open>.dropdown-menu{ - display:block -} -.open>a{ - outline:0 -} -.dropdown-menu-right{ - right:0; - left:auto -} -.dropdown-menu-left{ - right:auto; - left:0 -} -.dropdown-header{ - display:block; - padding:3px 20px; - font-size:12px; - line-height:1.42857143; - color:#777; - white-space:nowrap -} -.dropdown-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:990 -} -.pull-right>.dropdown-menu{ - right:0; - left:auto -} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{ - content:""; - border-top:0; - border-bottom:4px dashed; - border-bottom:4px solid\9 -} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{ - top:auto; - bottom:100%; - margin-bottom:2px -} -@media (min-width:768px){ - .navbar-right .dropdown-menu{ - right:0; - left:auto - } - .navbar-right .dropdown-menu-left{ - right:auto; - left:0 - } -} -.btn-group,.btn-group-vertical{ - position:relative; - display:inline-block; - vertical-align:middle -} -.btn-group-vertical>.btn,.btn-group>.btn{ - position:relative; - float:left -} -.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{ - z-index:2 -} -.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{ - margin-left:-1px -} -.btn-toolbar{ - margin-left:-5px -} -.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{ - float:left -} -.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{ - margin-left:5px -} -.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){ - border-radius:0 -} -.btn-group>.btn:first-child{ - margin-left:0 -} -.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group>.btn-group{ - float:left -} -.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{ - outline:0 -} -.btn-group>.btn+.dropdown-toggle{ - padding-right:8px; - padding-left:8px -} -.btn-group>.btn-lg+.dropdown-toggle{ - padding-right:12px; - padding-left:12px -} -.btn-group.open .dropdown-toggle{ - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn-group.open .dropdown-toggle.btn-link{ - -webkit-box-shadow:none; - box-shadow:none -} -.btn .caret{ - margin-left:0 -} -.btn-lg .caret{ - border-width:5px 5px 0; - border-bottom-width:0 -} -.dropup .btn-lg .caret{ - border-width:0 5px 5px -} -.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{ - display:block; - float:none; - width:100%; - max-width:100% -} -.btn-group-vertical>.btn-group>.btn{ - float:none -} -.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{ - margin-top:-1px; - margin-left:0 -} -.btn-group-vertical>.btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.btn-group-vertical>.btn:first-child:not(:last-child){ - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn:last-child:not(:first-child){ - border-top-left-radius:0; - border-top-right-radius:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.btn-group-justified{ - display:table; - width:100%; - table-layout:fixed; - border-collapse:separate -} -.btn-group-justified>.btn,.btn-group-justified>.btn-group{ - display:table-cell; - float:none; - width:1% -} -.btn-group-justified>.btn-group .btn{ - width:100% -} -.btn-group-justified>.btn-group .dropdown-menu{ - left:auto -} -[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{ - position:absolute; - clip:rect(0,0,0,0); - pointer-events:none -} -.input-group{ - position:relative; - display:table; - border-collapse:separate -} -.input-group[class*=col-]{ - float:none; - padding-right:0; - padding-left:0 -} -.input-group .form-control{ - position:relative; - z-index:2; - float:left; - width:100%; - margin-bottom:0 -} -.input-group .form-control:focus{ - z-index:3 -} -.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{ - height:46px; - line-height:46px -} -select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{ - height:auto -} -.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{ - height:30px; - line-height:30px -} -select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{ - height:auto -} -.input-group .form-control,.input-group-addon,.input-group-btn{ - display:table-cell -} -.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.input-group-addon,.input-group-btn{ - width:1%; - white-space:nowrap; - vertical-align:middle -} -.input-group-addon{ - padding:6px 12px; - font-size:14px; - font-weight:400; - line-height:1; - color:#555; - text-align:center; - background-color:#eee; - border:1px solid #ccc; - border-radius:4px -} -.input-group-addon.input-sm{ - padding:5px 10px; - font-size:12px; - border-radius:3px -} -.input-group-addon.input-lg{ - padding:10px 16px; - font-size:18px; - border-radius:6px -} -.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{ - margin-top:0 -} -.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.input-group-addon:first-child{ - border-right:0 -} -.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.input-group-addon:last-child{ - border-left:0 -} -.input-group-btn{ - position:relative; - font-size:0; - white-space:nowrap -} -.input-group-btn>.btn{ - position:relative -} -.input-group-btn>.btn+.btn{ - margin-left:-1px -} -.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{ - z-index:2 -} -.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{ - margin-right:-1px -} -.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{ - z-index:2; - margin-left:-1px -} -.nav{ - padding-left:0; - margin-bottom:0; - list-style:none -} -.nav>li{ - position:relative; - display:block -} -.nav>li>a{ - position:relative; - display:block; - padding:10px 15px -} -.nav>li>a:focus,.nav>li>a:hover{ - text-decoration:none; - background-color:#eee -} -.nav>li.disabled>a{ - color:#777 -} -.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{ - color:#777; - text-decoration:none; - cursor:not-allowed; - background-color:transparent -} -.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{ - background-color:#eee; - border-color:#337ab7 -} -.nav .nav-divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.nav>li>a>img{ - max-width:none -} -.nav-tabs{ - border-bottom:1px solid #ddd -} -.nav-tabs>li{ - float:left; - margin-bottom:-1px -} -.nav-tabs>li>a{ - margin-right:2px; - line-height:1.42857143; - border:1px solid transparent; - border-radius:4px 4px 0 0 -} -.nav-tabs>li>a:hover{ - border-color:#eee #eee #ddd -} -.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{ - color:#555; - cursor:default; - background-color:#fff; - border:1px solid #ddd; - border-bottom-color:transparent -} -.nav-tabs.nav-justified{ - width:100%; - border-bottom:0 -} -.nav-tabs.nav-justified>li{ - float:none -} -.nav-tabs.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-tabs.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li{ - display:table-cell; - width:1% - } - .nav-tabs.nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs.nav-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.nav-pills>li{ - float:left -} -.nav-pills>li>a{ - border-radius:4px -} -.nav-pills>li+li{ - margin-left:2px -} -.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{ - color:#fff; - background-color:#337ab7 -} -.nav-stacked>li{ - float:none -} -.nav-stacked>li+li{ - margin-top:2px; - margin-left:0 -} -.nav-justified{ - width:100% -} -.nav-justified>li{ - float:none -} -.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-justified>li{ - display:table-cell; - width:1% - } - .nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs-justified{ - border-bottom:0 -} -.nav-tabs-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.tab-content>.tab-pane{ - display:none -} -.tab-content>.active{ - display:block -} -.nav-tabs .dropdown-menu{ - margin-top:-1px; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar{ - position:relative; - min-height:50px; - margin-bottom:20px; - border:1px solid transparent -} -@media (min-width:768px){ - .navbar{ - border-radius:4px - } -} -@media (min-width:768px){ - .navbar-header{ - float:left - } -} -.navbar-collapse{ - padding-right:15px; - padding-left:15px; - overflow-x:visible; - -webkit-overflow-scrolling:touch; - border-top:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1) -} -.navbar-collapse.in{ - overflow-y:auto -} -@media (min-width:768px){ - .navbar-collapse{ - width:auto; - border-top:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-collapse.collapse{ - display:block!important; - height:auto!important; - padding-bottom:0; - overflow:visible!important - } - .navbar-collapse.in{ - overflow-y:visible - } - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{ - padding-right:0; - padding-left:0 - } -} -.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:340px -} -@media (max-device-width:480px) and (orientation:landscape){ - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:200px - } -} -.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:0; - margin-left:0 - } -} -.navbar-static-top{ - z-index:1000; - border-width:0 0 1px -} -@media (min-width:768px){ - .navbar-static-top{ - border-radius:0 - } -} -.navbar-fixed-bottom,.navbar-fixed-top{ - position:fixed; - right:0; - left:0; - z-index:1030 -} -@media (min-width:768px){ - .navbar-fixed-bottom,.navbar-fixed-top{ - border-radius:0 - } -} -.navbar-fixed-top{ - top:0; - border-width:0 0 1px -} -.navbar-fixed-bottom{ - bottom:0; - margin-bottom:0; - border-width:1px 0 0 -} -.navbar-brand{ - float:left; - height:50px; - padding:15px 15px; - font-size:18px; - line-height:20px -} -.navbar-brand:focus,.navbar-brand:hover{ - text-decoration:none -} -.navbar-brand>img{ - display:block -} -@media (min-width:768px){ - .navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{ - margin-left:-15px - } -} -.navbar-toggle{ - position:relative; - float:right; - padding:9px 10px; - margin-top:8px; - margin-right:15px; - margin-bottom:8px; - background-color:transparent; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.navbar-toggle:focus{ - outline:0 -} -.navbar-toggle .icon-bar{ - display:block; - width:22px; - height:2px; - border-radius:1px -} -.navbar-toggle .icon-bar+.icon-bar{ - margin-top:4px -} -@media (min-width:768px){ - .navbar-toggle{ - display:none - } -} -.navbar-nav{ - margin:7.5px -15px -} -.navbar-nav>li>a{ - padding-top:10px; - padding-bottom:10px; - line-height:20px -} -@media (max-width:767px){ - .navbar-nav .open .dropdown-menu{ - position:static; - float:none; - width:auto; - margin-top:0; - background-color:transparent; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{ - padding:5px 15px 5px 25px - } - .navbar-nav .open .dropdown-menu>li>a{ - line-height:20px - } - .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{ - background-image:none - } -} -@media (min-width:768px){ - .navbar-nav{ - float:left; - margin:0 - } - .navbar-nav>li{ - float:left - } - .navbar-nav>li>a{ - padding-top:15px; - padding-bottom:15px - } -} -.navbar-form{ - padding:10px 15px; - margin-top:8px; - margin-right:-15px; - margin-bottom:8px; - margin-left:-15px; - border-top:1px solid transparent; - border-bottom:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1) -} -@media (min-width:768px){ - .navbar-form .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .navbar-form .form-control-static{ - display:inline-block - } - .navbar-form .input-group{ - display:inline-table; - vertical-align:middle - } - .navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{ - width:auto - } - .navbar-form .input-group>.form-control{ - width:100% - } - .navbar-form .control-label{ - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox,.navbar-form .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox label,.navbar-form .radio label{ - padding-left:0 - } - .navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .navbar-form .has-feedback .form-control-feedback{ - top:0 - } -} -@media (max-width:767px){ - .navbar-form .form-group{ - margin-bottom:5px - } - .navbar-form .form-group:last-child{ - margin-bottom:0 - } -} -@media (min-width:768px){ - .navbar-form{ - width:auto; - padding-top:0; - padding-bottom:0; - margin-right:0; - margin-left:0; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } -} -.navbar-nav>li>.dropdown-menu{ - margin-top:0; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{ - margin-bottom:0; - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.navbar-btn{ - margin-top:8px; - margin-bottom:8px -} -.navbar-btn.btn-sm{ - margin-top:10px; - margin-bottom:10px -} -.navbar-btn.btn-xs{ - margin-top:14px; - margin-bottom:14px -} -.navbar-text{ - margin-top:15px; - margin-bottom:15px -} -@media (min-width:768px){ - .navbar-text{ - float:left; - margin-right:15px; - margin-left:15px - } -} -@media (min-width:768px){ - .navbar-left{ - float:left!important - } - .navbar-right{ - float:right!important; - margin-right:-15px - } - .navbar-right~.navbar-right{ - margin-right:0 - } -} -.navbar-default{ - background-color:#f8f8f8; - border-color:#e7e7e7 -} -.navbar-default .navbar-brand{ - color:#777 -} -.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{ - color:#5e5e5e; - background-color:transparent -} -.navbar-default .navbar-text{ - color:#777 -} -.navbar-default .navbar-nav>li>a{ - color:#777 -} -.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{ - color:#333; - background-color:transparent -} -.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{ - color:#555; - background-color:#e7e7e7 -} -.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{ - color:#ccc; - background-color:transparent -} -.navbar-default .navbar-toggle{ - border-color:#ddd -} -.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{ - background-color:#ddd -} -.navbar-default .navbar-toggle .icon-bar{ - background-color:#888 -} -.navbar-default .navbar-collapse,.navbar-default .navbar-form{ - border-color:#e7e7e7 -} -.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{ - color:#555; - background-color:#e7e7e7 -} -@media (max-width:767px){ - .navbar-default .navbar-nav .open .dropdown-menu>li>a{ - color:#777 - } - .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#333; - background-color:transparent - } - .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#555; - background-color:#e7e7e7 - } - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#ccc; - background-color:transparent - } -} -.navbar-default .navbar-link{ - color:#777 -} -.navbar-default .navbar-link:hover{ - color:#333 -} -.navbar-default .btn-link{ - color:#777 -} -.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{ - color:#333 -} -.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{ - color:#ccc -} -.navbar-inverse{ - background-color:#222; - border-color:#080808 -} -.navbar-inverse .navbar-brand{ - color:#9d9d9d -} -.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-text{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{ - color:#fff; - background-color:#080808 -} -.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{ - color:#444; - background-color:transparent -} -.navbar-inverse .navbar-toggle{ - border-color:#333 -} -.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{ - background-color:#333 -} -.navbar-inverse .navbar-toggle .icon-bar{ - background-color:#fff -} -.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{ - border-color:#101010 -} -.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{ - color:#fff; - background-color:#080808 -} -@media (max-width:767px){ - .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{ - border-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider{ - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{ - color:#9d9d9d - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#fff; - background-color:transparent - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#fff; - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#444; - background-color:transparent - } -} -.navbar-inverse .navbar-link{ - color:#9d9d9d -} -.navbar-inverse .navbar-link:hover{ - color:#fff -} -.navbar-inverse .btn-link{ - color:#9d9d9d -} -.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{ - color:#fff -} -.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{ - color:#444 -} -.breadcrumb{ - padding:8px 15px; - margin-bottom:20px; - list-style:none; - background-color:#f5f5f5; - border-radius:4px -} -.breadcrumb>li{ - display:inline-block -} -.breadcrumb>li+li:before{ - padding:0 5px; - color:#ccc; - content:"/\00a0" -} -.breadcrumb>.active{ - color:#777 -} -.pagination{ - display:inline-block; - padding-left:0; - margin:20px 0; - border-radius:4px -} -.pagination>li{ - display:inline -} -.pagination>li>a,.pagination>li>span{ - position:relative; - float:left; - padding:6px 12px; - margin-left:-1px; - line-height:1.42857143; - color:#337ab7; - text-decoration:none; - background-color:#fff; - border:1px solid #ddd -} -.pagination>li:first-child>a,.pagination>li:first-child>span{ - margin-left:0; - border-top-left-radius:4px; - border-bottom-left-radius:4px -} -.pagination>li:last-child>a,.pagination>li:last-child>span{ - border-top-right-radius:4px; - border-bottom-right-radius:4px -} -.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{ - z-index:2; - color:#23527c; - background-color:#eee; - border-color:#ddd -} -.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{ - z-index:3; - color:#fff; - cursor:default; - background-color:#337ab7; - border-color:#337ab7 -} -.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{ - color:#777; - cursor:not-allowed; - background-color:#fff; - border-color:#ddd -} -.pagination-lg>li>a,.pagination-lg>li>span{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333 -} -.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{ - border-top-left-radius:6px; - border-bottom-left-radius:6px -} -.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{ - border-top-right-radius:6px; - border-bottom-right-radius:6px -} -.pagination-sm>li>a,.pagination-sm>li>span{ - padding:5px 10px; - font-size:12px; - line-height:1.5 -} -.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{ - border-top-left-radius:3px; - border-bottom-left-radius:3px -} -.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{ - border-top-right-radius:3px; - border-bottom-right-radius:3px -} -.pager{ - padding-left:0; - margin:20px 0; - text-align:center; - list-style:none -} -.pager li{ - display:inline -} -.pager li>a,.pager li>span{ - display:inline-block; - padding:5px 14px; - background-color:#fff; - border:1px solid #ddd; - border-radius:15px -} -.pager li>a:focus,.pager li>a:hover{ - text-decoration:none; - background-color:#eee -} -.pager .next>a,.pager .next>span{ - float:right -} -.pager .previous>a,.pager .previous>span{ - float:left -} -.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{ - color:#777; - cursor:not-allowed; - background-color:#fff -} -.label{ - display:inline; - padding:.2em .6em .3em; - font-size:75%; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:baseline; - border-radius:.25em -} -a.label:focus,a.label:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.label:empty{ - display:none -} -.btn .label{ - position:relative; - top:-1px -} -.label-default{ - background-color:#777 -} -.label-default[href]:focus,.label-default[href]:hover{ - background-color:#5e5e5e -} -.label-primary{ - background-color:#337ab7 -} -.label-primary[href]:focus,.label-primary[href]:hover{ - background-color:#286090 -} -.label-success{ - background-color:#5cb85c -} -.label-success[href]:focus,.label-success[href]:hover{ - background-color:#449d44 -} -.label-info{ - background-color:#5bc0de -} -.label-info[href]:focus,.label-info[href]:hover{ - background-color:#31b0d5 -} -.label-warning{ - background-color:#f0ad4e -} -.label-warning[href]:focus,.label-warning[href]:hover{ - background-color:#ec971f -} -.label-danger{ - background-color:#d9534f -} -.label-danger[href]:focus,.label-danger[href]:hover{ - background-color:#c9302c -} -.badge{ - display:inline-block; - min-width:10px; - padding:3px 7px; - font-size:12px; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:middle; - background-color:#777; - border-radius:10px -} -.badge:empty{ - display:none -} -.btn .badge{ - position:relative; - top:-1px -} -.btn-group-xs>.btn .badge,.btn-xs .badge{ - top:0; - padding:1px 5px -} -a.badge:focus,a.badge:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.list-group-item.active>.badge,.nav-pills>.active>a>.badge{ - color:#337ab7; - background-color:#fff -} -.list-group-item>.badge{ - float:right -} -.list-group-item>.badge+.badge{ - margin-right:5px -} -.nav-pills>li>a>.badge{ - margin-left:3px -} -.jumbotron{ - padding-top:30px; - padding-bottom:30px; - margin-bottom:30px; - color:inherit; - background-color:#eee -} -.jumbotron .h1,.jumbotron h1{ - color:inherit -} -.jumbotron p{ - margin-bottom:15px; - font-size:21px; - font-weight:200 -} -.jumbotron>hr{ - border-top-color:#d5d5d5 -} -.container .jumbotron,.container-fluid .jumbotron{ - padding-right:15px; - padding-left:15px; - border-radius:6px -} -.jumbotron .container{ - max-width:100% -} -@media screen and (min-width:768px){ - .jumbotron{ - padding-top:48px; - padding-bottom:48px - } - .container .jumbotron,.container-fluid .jumbotron{ - padding-right:60px; - padding-left:60px - } - .jumbotron .h1,.jumbotron h1{ - font-size:63px - } -} -.thumbnail{ - display:block; - padding:4px; - margin-bottom:20px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:border .2s ease-in-out; - -o-transition:border .2s ease-in-out; - transition:border .2s ease-in-out -} -.thumbnail a>img,.thumbnail>img{ - margin-right:auto; - margin-left:auto -} -a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{ - border-color:#337ab7 -} -.thumbnail .caption{ - padding:9px; - color:#333 -} -.alert{ - padding:15px; - margin-bottom:20px; - border:1px solid transparent; - border-radius:4px -} -.alert h4{ - margin-top:0; - color:inherit -} -.alert .alert-link{ - font-weight:700 -} -.alert>p,.alert>ul{ - margin-bottom:0 -} -.alert>p+p{ - margin-top:5px -} -.alert-dismissable,.alert-dismissible{ - padding-right:35px -} -.alert-dismissable .close,.alert-dismissible .close{ - position:relative; - top:-2px; - right:-21px; - color:inherit -} -.alert-success{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.alert-success hr{ - border-top-color:#c9e2b3 -} -.alert-success .alert-link{ - color:#2b542c -} -.alert-info{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.alert-info hr{ - border-top-color:#a6e1ec -} -.alert-info .alert-link{ - color:#245269 -} -.alert-warning{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.alert-warning hr{ - border-top-color:#f7e1b5 -} -.alert-warning .alert-link{ - color:#66512c -} -.alert-danger{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.alert-danger hr{ - border-top-color:#e4b9c0 -} -.alert-danger .alert-link{ - color:#843534 -} -@-webkit-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@-o-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -.progress{ - height:20px; - margin-bottom:20px; - overflow:hidden; - background-color:#f5f5f5; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1); - box-shadow:inset 0 1px 2px rgba(0,0,0,.1) -} -.progress-bar{ - float:left; - width:0; - height:100%; - font-size:12px; - line-height:20px; - color:#fff; - text-align:center; - background-color:#337ab7; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - -webkit-transition:width .6s ease; - -o-transition:width .6s ease; - transition:width .6s ease -} -.progress-bar-striped,.progress-striped .progress-bar{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - -webkit-background-size:40px 40px; - background-size:40px 40px -} -.progress-bar.active,.progress.active .progress-bar{ - -webkit-animation:progress-bar-stripes 2s linear infinite; - -o-animation:progress-bar-stripes 2s linear infinite; - animation:progress-bar-stripes 2s linear infinite -} -.progress-bar-success{ - background-color:#5cb85c -} -.progress-striped .progress-bar-success{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-info{ - background-color:#5bc0de -} -.progress-striped .progress-bar-info{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-warning{ - background-color:#f0ad4e -} -.progress-striped .progress-bar-warning{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-danger{ - background-color:#d9534f -} -.progress-striped .progress-bar-danger{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.media{ - margin-top:15px -} -.media:first-child{ - margin-top:0 -} -.media,.media-body{ - overflow:hidden; - zoom:1 -} -.media-body{ - width:10000px -} -.media-object{ - display:block -} -.media-object.img-thumbnail{ - max-width:none -} -.media-right,.media>.pull-right{ - padding-left:10px -} -.media-left,.media>.pull-left{ - padding-right:10px -} -.media-body,.media-left,.media-right{ - display:table-cell; - vertical-align:top -} -.media-middle{ - vertical-align:middle -} -.media-bottom{ - vertical-align:bottom -} -.media-heading{ - margin-top:0; - margin-bottom:5px -} -.media-list{ - padding-left:0; - list-style:none -} -.list-group{ - padding-left:0; - margin-bottom:20px -} -.list-group-item{ - position:relative; - display:block; - padding:10px 15px; - margin-bottom:-1px; - background-color:#fff; - border:1px solid #ddd -} -.list-group-item:first-child{ - border-top-left-radius:4px; - border-top-right-radius:4px -} -.list-group-item:last-child{ - margin-bottom:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -a.list-group-item,button.list-group-item{ - color:#555 -} -a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{ - color:#333 -} -a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{ - color:#555; - text-decoration:none; - background-color:#f5f5f5 -} -button.list-group-item{ - width:100%; - text-align:left -} -.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{ - color:#777; - cursor:not-allowed; - background-color:#eee -} -.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{ - color:inherit -} -.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{ - color:#777 -} -.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{ - z-index:2; - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{ - color:inherit -} -.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{ - color:#c7ddef -} -.list-group-item-success{ - color:#3c763d; - background-color:#dff0d8 -} -a.list-group-item-success,button.list-group-item-success{ - color:#3c763d -} -a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{ - color:inherit -} -a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{ - color:#3c763d; - background-color:#d0e9c6 -} -a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{ - color:#fff; - background-color:#3c763d; - border-color:#3c763d -} -.list-group-item-info{ - color:#31708f; - background-color:#d9edf7 -} -a.list-group-item-info,button.list-group-item-info{ - color:#31708f -} -a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{ - color:inherit -} -a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{ - color:#31708f; - background-color:#c4e3f3 -} -a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{ - color:#fff; - background-color:#31708f; - border-color:#31708f -} -.list-group-item-warning{ - color:#8a6d3b; - background-color:#fcf8e3 -} -a.list-group-item-warning,button.list-group-item-warning{ - color:#8a6d3b -} -a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{ - color:inherit -} -a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{ - color:#8a6d3b; - background-color:#faf2cc -} -a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{ - color:#fff; - background-color:#8a6d3b; - border-color:#8a6d3b -} -.list-group-item-danger{ - color:#a94442; - background-color:#f2dede -} -a.list-group-item-danger,button.list-group-item-danger{ - color:#a94442 -} -a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{ - color:inherit -} -a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{ - color:#a94442; - background-color:#ebcccc -} -a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{ - color:#fff; - background-color:#a94442; - border-color:#a94442 -} -.list-group-item-heading{ - margin-top:0; - margin-bottom:5px -} -.list-group-item-text{ - margin-bottom:0; - line-height:1.3 -} -.panel{ - margin-bottom:20px; - background-color:#fff; - border:1px solid transparent; - border-radius:4px; - -webkit-box-shadow:0 1px 1px rgba(0,0,0,.05); - box-shadow:0 1px 1px rgba(0,0,0,.05) -} -.panel-body{ - padding:15px -} -.panel-heading{ - padding:10px 15px; - border-bottom:1px solid transparent; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel-heading>.dropdown .dropdown-toggle{ - color:inherit -} -.panel-title{ - margin-top:0; - margin-bottom:0; - font-size:16px; - color:inherit -} -.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{ - color:inherit -} -.panel-footer{ - padding:10px 15px; - background-color:#f5f5f5; - border-top:1px solid #ddd; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.list-group,.panel>.panel-collapse>.list-group{ - margin-bottom:0 -} -.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{ - border-width:1px 0; - border-radius:0 -} -.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{ - border-top:0; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{ - border-bottom:0; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.panel-heading+.list-group .list-group-item:first-child{ - border-top-width:0 -} -.list-group+.panel-footer{ - border-top-width:0 -} -.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{ - margin-bottom:0 -} -.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{ - padding-right:15px; - padding-left:15px -} -.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{ - border-top-left-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{ - border-top-right-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{ - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{ - border-bottom-right-radius:3px -} -.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{ - border-top:1px solid #ddd -} -.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{ - border-top:0 -} -.panel>.table-bordered,.panel>.table-responsive>.table-bordered{ - border:0 -} -.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 -} -.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 -} -.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{ - border-bottom:0 -} -.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 -} -.panel>.table-responsive{ - margin-bottom:0; - border:0 -} -.panel-group{ - margin-bottom:20px -} -.panel-group .panel{ - margin-bottom:0; - border-radius:4px -} -.panel-group .panel+.panel{ - margin-top:5px -} -.panel-group .panel-heading{ - border-bottom:0 -} -.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{ - border-top:1px solid #ddd -} -.panel-group .panel-footer{ - border-top:0 -} -.panel-group .panel-footer+.panel-collapse .panel-body{ - border-bottom:1px solid #ddd -} -.panel-default{ - border-color:#ddd -} -.panel-default>.panel-heading{ - color:#333; - background-color:#f5f5f5; - border-color:#ddd -} -.panel-default>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ddd -} -.panel-default>.panel-heading .badge{ - color:#f5f5f5; - background-color:#333 -} -.panel-default>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ddd -} -.panel-primary{ - border-color:#337ab7 -} -.panel-primary>.panel-heading{ - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.panel-primary>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#337ab7 -} -.panel-primary>.panel-heading .badge{ - color:#337ab7; - background-color:#fff -} -.panel-primary>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#337ab7 -} -.panel-success{ - border-color:#d6e9c6 -} -.panel-success>.panel-heading{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.panel-success>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#d6e9c6 -} -.panel-success>.panel-heading .badge{ - color:#dff0d8; - background-color:#3c763d -} -.panel-success>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#d6e9c6 -} -.panel-info{ - border-color:#bce8f1 -} -.panel-info>.panel-heading{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.panel-info>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#bce8f1 -} -.panel-info>.panel-heading .badge{ - color:#d9edf7; - background-color:#31708f -} -.panel-info>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#bce8f1 -} -.panel-warning{ - border-color:#faebcc -} -.panel-warning>.panel-heading{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.panel-warning>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#faebcc -} -.panel-warning>.panel-heading .badge{ - color:#fcf8e3; - background-color:#8a6d3b -} -.panel-warning>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#faebcc -} -.panel-danger{ - border-color:#ebccd1 -} -.panel-danger>.panel-heading{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.panel-danger>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ebccd1 -} -.panel-danger>.panel-heading .badge{ - color:#f2dede; - background-color:#a94442 -} -.panel-danger>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ebccd1 -} -.embed-responsive{ - position:relative; - display:block; - height:0; - padding:0; - overflow:hidden -} -.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{ - position:absolute; - top:0; - bottom:0; - left:0; - width:100%; - height:100%; - border:0 -} -.embed-responsive-16by9{ - padding-bottom:56.25% -} -.embed-responsive-4by3{ - padding-bottom:75% -} -.well{ - min-height:20px; - padding:19px; - margin-bottom:20px; - background-color:#f5f5f5; - border:1px solid #e3e3e3; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05); - box-shadow:inset 0 1px 1px rgba(0,0,0,.05) -} -.well blockquote{ - border-color:#ddd; - border-color:rgba(0,0,0,.15) -} -.well-lg{ - padding:24px; - border-radius:6px -} -.well-sm{ - padding:9px; - border-radius:3px -} -.close{ - float:right; - font-size:21px; - font-weight:700; - line-height:1; - color:#000; - text-shadow:0 1px 0 #fff; - filter:alpha(opacity=20); - opacity:.2 -} -.close:focus,.close:hover{ - color:#000; - text-decoration:none; - cursor:pointer; - filter:alpha(opacity=50); - opacity:.5 -} -button.close{ - -webkit-appearance:none; - padding:0; - cursor:pointer; - background:0 0; - border:0 -} -.modal-open{ - overflow:hidden -} -.modal{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1050; - display:none; - overflow:hidden; - -webkit-overflow-scrolling:touch; - outline:0 -} -.modal.fade .modal-dialog{ - -webkit-transition:-webkit-transform .3s ease-out; - -o-transition:-o-transform .3s ease-out; - transition:transform .3s ease-out; - -webkit-transform:translate(0,-25%); - -ms-transform:translate(0,-25%); - -o-transform:translate(0,-25%); - transform:translate(0,-25%) -} -.modal.in .modal-dialog{ - -webkit-transform:translate(0,0); - -ms-transform:translate(0,0); - -o-transform:translate(0,0); - transform:translate(0,0) -} -.modal-open .modal{ - overflow-x:hidden; - overflow-y:auto -} -.modal-dialog{ - position:relative; - width:auto; - margin:10px -} -.modal-content{ - position:relative; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #999; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - outline:0; - -webkit-box-shadow:0 3px 9px rgba(0,0,0,.5); - box-shadow:0 3px 9px rgba(0,0,0,.5) -} -.modal-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1040; - background-color:#000 -} -.modal-backdrop.fade{ - filter:alpha(opacity=0); - opacity:0 -} -.modal-backdrop.in{ - filter:alpha(opacity=50); - opacity:.5 -} -.modal-header{ - padding:15px; - border-bottom:1px solid #e5e5e5 -} -.modal-header .close{ - margin-top:-2px -} -.modal-title{ - margin:0; - line-height:1.42857143 -} -.modal-body{ - position:relative; - padding:15px -} -.modal-footer{ - padding:15px; - text-align:right; - border-top:1px solid #e5e5e5 -} -.modal-footer .btn+.btn{ - margin-bottom:0; - margin-left:5px -} -.modal-footer .btn-group .btn+.btn{ - margin-left:-1px -} -.modal-footer .btn-block+.btn-block{ - margin-left:0 -} -.modal-scrollbar-measure{ - position:absolute; - top:-9999px; - width:50px; - height:50px; - overflow:scroll -} -@media (min-width:768px){ - .modal-dialog{ - width:600px; - margin:30px auto - } - .modal-content{ - -webkit-box-shadow:0 5px 15px rgba(0,0,0,.5); - box-shadow:0 5px 15px rgba(0,0,0,.5) - } - .modal-sm{ - width:300px - } -} -@media (min-width:992px){ - .modal-lg{ - width:900px - } -} -.tooltip{ - position:absolute; - z-index:1070; - display:block; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:12px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - filter:alpha(opacity=0); - opacity:0; - line-break:auto -} -.tooltip.in{ - filter:alpha(opacity=90); - opacity:.9 -} -.tooltip.top{ - padding:5px 0; - margin-top:-3px -} -.tooltip.right{ - padding:0 5px; - margin-left:3px -} -.tooltip.bottom{ - padding:5px 0; - margin-top:3px -} -.tooltip.left{ - padding:0 5px; - margin-left:-3px -} -.tooltip-inner{ - max-width:200px; - padding:3px 8px; - color:#fff; - text-align:center; - background-color:#000; - border-radius:4px -} -.tooltip-arrow{ - position:absolute; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.tooltip.top .tooltip-arrow{ - bottom:0; - left:50%; - margin-left:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-left .tooltip-arrow{ - right:5px; - bottom:0; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-right .tooltip-arrow{ - bottom:0; - left:5px; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.right .tooltip-arrow{ - top:50%; - left:0; - margin-top:-5px; - border-width:5px 5px 5px 0; - border-right-color:#000 -} -.tooltip.left .tooltip-arrow{ - top:50%; - right:0; - margin-top:-5px; - border-width:5px 0 5px 5px; - border-left-color:#000 -} -.tooltip.bottom .tooltip-arrow{ - top:0; - left:50%; - margin-left:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-left .tooltip-arrow{ - top:0; - right:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-right .tooltip-arrow{ - top:0; - left:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.popover{ - position:absolute; - top:0; - left:0; - z-index:1060; - display:none; - max-width:276px; - padding:1px; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - -webkit-box-shadow:0 5px 10px rgba(0,0,0,.2); - box-shadow:0 5px 10px rgba(0,0,0,.2); - line-break:auto -} -.popover.top{ - margin-top:-10px -} -.popover.right{ - margin-left:10px -} -.popover.bottom{ - margin-top:10px -} -.popover.left{ - margin-left:-10px -} -.popover-title{ - padding:8px 14px; - margin:0; - font-size:14px; - background-color:#f7f7f7; - border-bottom:1px solid #ebebeb; - border-radius:5px 5px 0 0 -} -.popover-content{ - padding:9px 14px -} -.popover>.arrow,.popover>.arrow:after{ - position:absolute; - display:block; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.popover>.arrow{ - border-width:11px -} -.popover>.arrow:after{ - content:""; - border-width:10px -} -.popover.top>.arrow{ - bottom:-11px; - left:50%; - margin-left:-11px; - border-top-color:#999; - border-top-color:rgba(0,0,0,.25); - border-bottom-width:0 -} -.popover.top>.arrow:after{ - bottom:1px; - margin-left:-10px; - content:" "; - border-top-color:#fff; - border-bottom-width:0 -} -.popover.right>.arrow{ - top:50%; - left:-11px; - margin-top:-11px; - border-right-color:#999; - border-right-color:rgba(0,0,0,.25); - border-left-width:0 -} -.popover.right>.arrow:after{ - bottom:-10px; - left:1px; - content:" "; - border-right-color:#fff; - border-left-width:0 -} -.popover.bottom>.arrow{ - top:-11px; - left:50%; - margin-left:-11px; - border-top-width:0; - border-bottom-color:#999; - border-bottom-color:rgba(0,0,0,.25) -} -.popover.bottom>.arrow:after{ - top:1px; - margin-left:-10px; - content:" "; - border-top-width:0; - border-bottom-color:#fff -} -.popover.left>.arrow{ - top:50%; - right:-11px; - margin-top:-11px; - border-right-width:0; - border-left-color:#999; - border-left-color:rgba(0,0,0,.25) -} -.popover.left>.arrow:after{ - right:1px; - bottom:-10px; - content:" "; - border-right-width:0; - border-left-color:#fff -} -.carousel{ - position:relative -} -.carousel-inner{ - position:relative; - width:100%; - overflow:hidden -} -.carousel-inner>.item{ - position:relative; - display:none; - -webkit-transition:.6s ease-in-out left; - -o-transition:.6s ease-in-out left; - transition:.6s ease-in-out left -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img{ - line-height:1 -} -@media all and (transform-3d),(-webkit-transform-3d){ - .carousel-inner>.item{ - -webkit-transition:-webkit-transform .6s ease-in-out; - -o-transition:-o-transform .6s ease-in-out; - transition:transform .6s ease-in-out; - -webkit-backface-visibility:hidden; - backface-visibility:hidden; - -webkit-perspective:1000px; - perspective:1000px - } - .carousel-inner>.item.active.right,.carousel-inner>.item.next{ - left:0; - -webkit-transform:translate3d(100%,0,0); - transform:translate3d(100%,0,0) - } - .carousel-inner>.item.active.left,.carousel-inner>.item.prev{ - left:0; - -webkit-transform:translate3d(-100%,0,0); - transform:translate3d(-100%,0,0) - } - .carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{ - left:0; - -webkit-transform:translate3d(0,0,0); - transform:translate3d(0,0,0) - } -} -.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{ - display:block -} -.carousel-inner>.active{ - left:0 -} -.carousel-inner>.next,.carousel-inner>.prev{ - position:absolute; - top:0; - width:100% -} -.carousel-inner>.next{ - left:100% -} -.carousel-inner>.prev{ - left:-100% -} -.carousel-inner>.next.left,.carousel-inner>.prev.right{ - left:0 -} -.carousel-inner>.active.left{ - left:-100% -} -.carousel-inner>.active.right{ - left:100% -} -.carousel-control{ - position:absolute; - top:0; - bottom:0; - left:0; - width:15%; - font-size:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6); - background-color:rgba(0,0,0,0); - filter:alpha(opacity=50); - opacity:.5 -} -.carousel-control.left{ - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001))); - background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control.right{ - right:0; - left:auto; - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5))); - background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control:focus,.carousel-control:hover{ - color:#fff; - text-decoration:none; - filter:alpha(opacity=90); - outline:0; - opacity:.9 -} -.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - position:absolute; - top:50%; - z-index:5; - display:inline-block; - margin-top:-10px -} -.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - left:50%; - margin-left:-10px -} -.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - right:50%; - margin-right:-10px -} -.carousel-control .icon-next,.carousel-control .icon-prev{ - width:20px; - height:20px; - font-family:serif; - line-height:1 -} -.carousel-control .icon-prev:before{ - content:'\2039' -} -.carousel-control .icon-next:before{ - content:'\203a' -} -.carousel-indicators{ - position:absolute; - bottom:10px; - left:50%; - z-index:15; - width:60%; - padding-left:0; - margin-left:-30%; - text-align:center; - list-style:none -} -.carousel-indicators li{ - display:inline-block; - width:10px; - height:10px; - margin:1px; - text-indent:-999px; - cursor:pointer; - background-color:#000\9; - background-color:rgba(0,0,0,0); - border:1px solid #fff; - border-radius:10px -} -.carousel-indicators .active{ - width:12px; - height:12px; - margin:0; - background-color:#fff -} -.carousel-caption{ - position:absolute; - right:15%; - bottom:20px; - left:15%; - z-index:10; - padding-top:20px; - padding-bottom:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6) -} -.carousel-caption .btn{ - text-shadow:none -} -@media screen and (min-width:768px){ - .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - width:30px; - height:30px; - margin-top:-10px; - font-size:30px - } - .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - margin-left:-10px - } - .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - margin-right:-10px - } - .carousel-caption{ - right:20%; - left:20%; - padding-bottom:30px - } - .carousel-indicators{ - bottom:20px - } -} -.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{ - display:table; - content:" " -} -.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{ - clear:both -} -.center-block{ - display:block; - margin-right:auto; - margin-left:auto -} -.pull-right{ - float:right!important -} -.pull-left{ - float:left!important -} -.hide{ - display:none!important -} -.show{ - display:block!important -} -.invisible{ - visibility:hidden -} -.text-hide{ - font:0/0 a; - color:transparent; - text-shadow:none; - background-color:transparent; - border:0 -} -.hidden{ - display:none!important -} -.affix{ - position:fixed -} -@-ms-viewport{ - width:device-width -} -.visible-lg,.visible-md,.visible-sm,.visible-xs{ - display:none!important -} -.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{ - display:none!important -} -@media (max-width:767px){ - .visible-xs{ - display:block!important - } - table.visible-xs{ - display:table!important - } - tr.visible-xs{ - display:table-row!important - } - td.visible-xs,th.visible-xs{ - display:table-cell!important - } -} -@media (max-width:767px){ - .visible-xs-block{ - display:block!important - } -} -@media (max-width:767px){ - .visible-xs-inline{ - display:inline!important - } -} -@media (max-width:767px){ - .visible-xs-inline-block{ - display:inline-block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm{ - display:block!important - } - table.visible-sm{ - display:table!important - } - tr.visible-sm{ - display:table-row!important - } - td.visible-sm,th.visible-sm{ - display:table-cell!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-block{ - display:block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline{ - display:inline!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline-block{ - display:inline-block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md{ - display:block!important - } - table.visible-md{ - display:table!important - } - tr.visible-md{ - display:table-row!important - } - td.visible-md,th.visible-md{ - display:table-cell!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-block{ - display:block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline{ - display:inline!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline-block{ - display:inline-block!important - } -} -@media (min-width:1200px){ - .visible-lg{ - display:block!important - } - table.visible-lg{ - display:table!important - } - tr.visible-lg{ - display:table-row!important - } - td.visible-lg,th.visible-lg{ - display:table-cell!important - } -} -@media (min-width:1200px){ - .visible-lg-block{ - display:block!important - } -} -@media (min-width:1200px){ - .visible-lg-inline{ - display:inline!important - } -} -@media (min-width:1200px){ - .visible-lg-inline-block{ - display:inline-block!important - } -} -@media (max-width:767px){ - .hidden-xs{ - display:none!important - } -} -@media (min-width:768px) and (max-width:991px){ - .hidden-sm{ - display:none!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .hidden-md{ - display:none!important - } -} -@media (min-width:1200px){ - .hidden-lg{ - display:none!important - } -} -.visible-print{ - display:none!important -} -@media print{ - .visible-print{ - display:block!important - } - table.visible-print{ - display:table!important - } - tr.visible-print{ - display:table-row!important - } - td.visible-print,th.visible-print{ - display:table-cell!important - } -} -.visible-print-block{ - display:none!important -} -@media print{ - .visible-print-block{ - display:block!important - } -} -.visible-print-inline{ - display:none!important -} -@media print{ - .visible-print-inline{ - display:inline!important - } -} -.visible-print-inline-block{ - display:none!important -} -@media print{ - .visible-print-inline-block{ - display:inline-block!important - } -} -@media print{ - .hidden-print{ - display:none!important - } -} -/*# sourceMappingURL=bootstrap.min.css.map */ - diff --git a/themes/black/client/src/css/01-main.css b/themes/black/client/src/css/01-main.css deleted file mode 100644 index e62ff8dd0..000000000 --- a/themes/black/client/src/css/01-main.css +++ /dev/null @@ -1,77 +0,0 @@ -body { - /*background-image: url("//*img//*LargeTriangles.svg");*/ - /*background-image: url("//*img//*RandomizedPattern.svg");*/ - /*background-image: url("//*img//*background.svg");*/ - background-color:#000000; -} -canvas{ - position:absolute; - top:0; - left:0; -} -.authelia-brand { - font-weight: bold; - font-style: italic; - color: #ffffff -} -.poweredby-block { - margin: 0px 30px; - margin-top: 10px; - padding-top: 15px; - border-top: 1px solid rgba(0, 0, 0, 0.15); - -} -.poweredby { - font-size: 0.7em; - color: white; -} -/* notifications */ -.notification { - padding: 10px; - margin: 15px 0px; - border-radius: 6px; - display: none; - position: absolute; -} -.notification img { - width: 24px; - margin-right: 10px; -} -.notification i, -.notification span { - display:table-cell; - vertical-align:middle; -} -.info { - border: 1px solid #9cb1ff; - background-color: rgb(192, 220, 255); -} -.success { - border: 1px solid #65ec7c; - background-color: rgb(163, 255, 157); -} -.error { - border: 1px solid #ffa3a3; - background-color: rgb(255, 175, 175); -} -.warning { - border: 1px solid #ffd743; - background-color: rgb(255, 230, 143); -} -.bottom-right-links { - text-align: right; - margin-top: 10px; - font-size: 0.8em; - color: white; -} -.header { - background-color: #000000; - color: white; - margin: 0px; -} -.body { - padding: 10px; -} -h1 { - font-size: 25px; -} diff --git a/themes/black/client/src/css/02-login.css b/themes/black/client/src/css/02-login.css deleted file mode 100644 index a6984267b..000000000 --- a/themes/black/client/src/css/02-login.css +++ /dev/null @@ -1,136 +0,0 @@ -.form-signin -{ - margin: 0 auto; -} - -.form-signin .form-signin-heading, .form-signin .checkbox -{ - margin-bottom: 10px; -} - -.form-signin .checkbox -{ - font-weight: normal; -} - -.form-signin .form-control -{ - position: relative; - font-size: 16px; - height: auto; - padding: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-signin .form-control:focus -{ - z-index: 2; -} -.form-signin input[type="text"] -{ - margin-bottom: -1px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.form-signin input[type="password"] -{ - /* margin-bottom: 10px; */ - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.account-wall -{ - border: 1px solid #000; - margin-top: 20px; - padding-bottom: 20px; - background-color: #000000; - -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); -} -.account-wall h1 -{ - margin-bottom: 15px; - margin-top: 15px; - font-weight: 800; - display: block; - text-align: center; -} -.account-wall h3 -{ - display: block; - text-align: center; -} -.account-wall p -{ - text-align: center; - margin: 10px; - color: white; -} -.account-wall .form-inputs -{ - margin-bottom: 10px; - border-color: #b20c0c; -} -.account-wall hr { - border-color: #c5c5c5; -} - -.header-img -{ - width: 96px; - height: 96px; - margin: 0 auto 10px; - display: block; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - border-radius: 50%; -} - -.link -{ - margin-top: 10px; - color: white; -} - -.btn-primary.totp -{ - background-color: rgb(102, 135, 162); -} - -.btn-primary.u2f -{ - background-color: rgb(83, 149, 204); -} - -.u2f-token { - text-align: center; -} - -.u2f-token img { - width: 70px; -} - -.keep-me-logged-in { - margin-top: 10px; - font-size: 0.8em; - color: white; -} - -.keep-me-logged-in input[type=checkbox] { - transform: scale(0.8); - margin: 0; - margin-right: 4px; -} - -.keep-me-logged-in label { - font-weight: 300; -} - -.keep-me-logged-in input, -.keep-me-logged-in label { - display: inline-block; - margin-bottom: 0; /* I added this after I posted my reply */ - vertical-align: middle; /* Fixes any weird issues in Firefox and IE */ -} diff --git a/themes/black/client/src/css/03-errors.css b/themes/black/client/src/css/03-errors.css deleted file mode 100644 index e9f97f33b..000000000 --- a/themes/black/client/src/css/03-errors.css +++ /dev/null @@ -1,12 +0,0 @@ - -.error-401 .header-img { - border-radius: 0%; -} - -.error-403 .header-img { - border-radius: 0%; -} - -.error-404 .header-img { - border-radius: 0%; -} \ No newline at end of file diff --git a/themes/black/client/src/css/03-password-reset-form.css b/themes/black/client/src/css/03-password-reset-form.css deleted file mode 100644 index 34066bc24..000000000 --- a/themes/black/client/src/css/03-password-reset-form.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-form .header-img { - border-radius: 0%; -} diff --git a/themes/black/client/src/css/03-password-reset-request.css b/themes/black/client/src/css/03-password-reset-request.css deleted file mode 100644 index 1a2ad4df8..000000000 --- a/themes/black/client/src/css/03-password-reset-request.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-request .header-img { - border-radius: 0%; -} diff --git a/themes/black/client/src/css/03-totp-register.css b/themes/black/client/src/css/03-totp-register.css deleted file mode 100644 index cb76720ad..000000000 --- a/themes/black/client/src/css/03-totp-register.css +++ /dev/null @@ -1,22 +0,0 @@ -.totp-register #secret { - background-color: white; - font-size: 0.9em; - font-weight: bold; - padding: 5px; - border: 1px solid #c7c7c7; - word-wrap: break-word; -} -.totp-register #qrcode img { - margin: 10px auto; -} -.totp-register .need-google-authenticator { - text-align: center; - margin-top: 20px; -} -.totp-register .store-badges { - margin-top: 5px; -} -.totp-register .store-badge { - width: 110px; - height: 30px; -} \ No newline at end of file diff --git a/themes/black/client/src/css/03-u2f-register.css b/themes/black/client/src/css/03-u2f-register.css deleted file mode 100644 index e54cddf89..000000000 --- a/themes/black/client/src/css/03-u2f-register.css +++ /dev/null @@ -1,5 +0,0 @@ - -.u2f-register img { - display: block; - margin: 20px auto; -} \ No newline at end of file diff --git a/themes/black/client/src/img/RandomizedPattern.svg b/themes/black/client/src/img/RandomizedPattern.svg deleted file mode 100644 index 51afee6d6..000000000 --- a/themes/black/client/src/img/RandomizedPattern.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/themes/black/client/src/img/background.jpg b/themes/black/client/src/img/background.jpg deleted file mode 100644 index 974ea273f..000000000 Binary files a/themes/black/client/src/img/background.jpg and /dev/null differ diff --git a/themes/black/client/src/img/icon.png b/themes/black/client/src/img/icon.png deleted file mode 100644 index 040d10c1a..000000000 Binary files a/themes/black/client/src/img/icon.png and /dev/null differ diff --git a/themes/black/client/src/img/mail.png b/themes/black/client/src/img/mail.png deleted file mode 100644 index 834bfce91..000000000 Binary files a/themes/black/client/src/img/mail.png and /dev/null differ diff --git a/themes/black/client/src/img/notifications/.directory b/themes/black/client/src/img/notifications/.directory deleted file mode 100644 index 7c8b80541..000000000 --- a/themes/black/client/src/img/notifications/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,35 -Version=3 -ViewMode=1 diff --git a/themes/black/client/src/img/notifications/error.png b/themes/black/client/src/img/notifications/error.png deleted file mode 100644 index bf64d28f7..000000000 Binary files a/themes/black/client/src/img/notifications/error.png and /dev/null differ diff --git a/themes/black/client/src/img/notifications/info.png b/themes/black/client/src/img/notifications/info.png deleted file mode 100644 index 67928e88c..000000000 Binary files a/themes/black/client/src/img/notifications/info.png and /dev/null differ diff --git a/themes/black/client/src/img/notifications/success.png b/themes/black/client/src/img/notifications/success.png deleted file mode 100644 index d3998392d..000000000 Binary files a/themes/black/client/src/img/notifications/success.png and /dev/null differ diff --git a/themes/black/client/src/img/notifications/warning.png b/themes/black/client/src/img/notifications/warning.png deleted file mode 100644 index ab8b54ffc..000000000 Binary files a/themes/black/client/src/img/notifications/warning.png and /dev/null differ diff --git a/themes/black/client/src/img/padlock.png b/themes/black/client/src/img/padlock.png deleted file mode 100644 index 31abbaeef..000000000 Binary files a/themes/black/client/src/img/padlock.png and /dev/null differ diff --git a/themes/black/client/src/img/password_white.png b/themes/black/client/src/img/password_white.png deleted file mode 100644 index 0b93ef3fb..000000000 Binary files a/themes/black/client/src/img/password_white.png and /dev/null differ diff --git a/themes/black/client/src/img/pendrive.png b/themes/black/client/src/img/pendrive.png deleted file mode 100644 index fa49178c3..000000000 Binary files a/themes/black/client/src/img/pendrive.png and /dev/null differ diff --git a/themes/black/client/src/img/sharingan.png b/themes/black/client/src/img/sharingan.png deleted file mode 100644 index 526787d3b..000000000 Binary files a/themes/black/client/src/img/sharingan.png and /dev/null differ diff --git a/themes/black/client/src/img/stores/.directory b/themes/black/client/src/img/stores/.directory deleted file mode 100644 index 7bdc8daf8..000000000 --- a/themes/black/client/src/img/stores/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,25 -Version=3 -ViewMode=1 diff --git a/themes/black/client/src/img/stores/applestore-badge.svg b/themes/black/client/src/img/stores/applestore-badge.svg deleted file mode 100644 index ac111e597..000000000 --- a/themes/black/client/src/img/stores/applestore-badge.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/black/client/src/img/stores/googleplay-badge.svg b/themes/black/client/src/img/stores/googleplay-badge.svg deleted file mode 100644 index 9e33e3aa2..000000000 --- a/themes/black/client/src/img/stores/googleplay-badge.svg +++ /dev/null @@ -1,429 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/themes/black/client/src/img/success.png b/themes/black/client/src/img/success.png deleted file mode 100644 index ee9d6841b..000000000 Binary files a/themes/black/client/src/img/success.png and /dev/null differ diff --git a/themes/black/client/src/img/user.png b/themes/black/client/src/img/user.png deleted file mode 100644 index 00941399d..000000000 Binary files a/themes/black/client/src/img/user.png and /dev/null differ diff --git a/themes/black/client/src/img/warning.png b/themes/black/client/src/img/warning.png deleted file mode 100644 index c6acd953b..000000000 Binary files a/themes/black/client/src/img/warning.png and /dev/null differ diff --git a/themes/black/client/src/thirdparties/qrcode.min.js b/themes/black/client/src/thirdparties/qrcode.min.js deleted file mode 100644 index 993e88f39..000000000 --- a/themes/black/client/src/thirdparties/qrcode.min.js +++ /dev/null @@ -1 +0,0 @@ -var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/themes/black/client/src/thirdparties/u2f-api.js b/themes/black/client/src/thirdparties/u2f-api.js deleted file mode 100644 index 8c7801e3b..000000000 --- a/themes/black/client/src/thirdparties/u2f-api.js +++ /dev/null @@ -1,749 +0,0 @@ -//Copyright 2014-2015 Google Inc. All rights reserved. - -//Use of this source code is governed by a BSD-style -//license that can be found in the LICENSE file or at -//https://developers.google.com/open-source/licenses/bsd - -/** - * @fileoverview The U2F api. - */ -'use strict'; - - -/** - * Namespace for the U2F api. - * @type {Object} - */ -var u2f = u2f || {}; - -/** - * FIDO U2F Javascript API Version - * @number - */ -var js_api_version; - -/** - * The U2F extension id - * @const {string} - */ -// The Chrome packaged app extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the package Chrome app and does not require installing the U2F Chrome extension. - u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd'; -// The U2F Chrome extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the U2F Chrome extension to authenticate. -// u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne'; - - -/** - * Message types for messsages to/from the extension - * @const - * @enum {string} - */ -u2f.MessageTypes = { - 'U2F_REGISTER_REQUEST': 'u2f_register_request', - 'U2F_REGISTER_RESPONSE': 'u2f_register_response', - 'U2F_SIGN_REQUEST': 'u2f_sign_request', - 'U2F_SIGN_RESPONSE': 'u2f_sign_response', - 'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request', - 'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response' -}; - - -/** - * Response status codes - * @const - * @enum {number} - */ -u2f.ErrorCodes = { - 'OK': 0, - 'OTHER_ERROR': 1, - 'BAD_REQUEST': 2, - 'CONFIGURATION_UNSUPPORTED': 3, - 'DEVICE_INELIGIBLE': 4, - 'TIMEOUT': 5 -}; - - -/** - * A message for registration requests - * @typedef {{ - * type: u2f.MessageTypes, - * appId: ?string, - * timeoutSeconds: ?number, - * requestId: ?number - * }} - */ -u2f.U2fRequest; - - -/** - * A message for registration responses - * @typedef {{ - * type: u2f.MessageTypes, - * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse), - * requestId: ?number - * }} - */ -u2f.U2fResponse; - - -/** - * An error object for responses - * @typedef {{ - * errorCode: u2f.ErrorCodes, - * errorMessage: ?string - * }} - */ -u2f.Error; - -/** - * Data object for a single sign request. - * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}} - */ -u2f.Transport; - - -/** - * Data object for a single sign request. - * @typedef {Array} - */ -u2f.Transports; - -/** - * Data object for a single sign request. - * @typedef {{ - * version: string, - * challenge: string, - * keyHandle: string, - * appId: string - * }} - */ -u2f.SignRequest; - - -/** - * Data object for a sign response. - * @typedef {{ - * keyHandle: string, - * signatureData: string, - * clientData: string - * }} - */ -u2f.SignResponse; - - -/** - * Data object for a registration request. - * @typedef {{ - * version: string, - * challenge: string - * }} - */ -u2f.RegisterRequest; - - -/** - * Data object for a registration response. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: Transports, - * appId: string - * }} - */ -u2f.RegisterResponse; - - -/** - * Data object for a registered key. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: ?Transports, - * appId: ?string - * }} - */ -u2f.RegisteredKey; - - -/** - * Data object for a get API register response. - * @typedef {{ - * js_api_version: number - * }} - */ -u2f.GetJsApiVersionResponse; - - -//Low level MessagePort API support - -/** - * Sets up a MessagePort to the U2F extension using the - * available mechanisms. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - */ -u2f.getMessagePort = function(callback) { - if (typeof chrome != 'undefined' && chrome.runtime) { - // The actual message here does not matter, but we need to get a reply - // for the callback to run. Thus, send an empty signature request - // in order to get a failure response. - var msg = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: [] - }; - chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() { - if (!chrome.runtime.lastError) { - // We are on a whitelisted origin and can talk directly - // with the extension. - u2f.getChromeRuntimePort_(callback); - } else { - // chrome.runtime was available, but we couldn't message - // the extension directly, use iframe - u2f.getIframePort_(callback); - } - }); - } else if (u2f.isAndroidChrome_()) { - u2f.getAuthenticatorPort_(callback); - } else if (u2f.isIosChrome_()) { - u2f.getIosPort_(callback); - } else { - // chrome.runtime was not available at all, which is normal - // when this origin doesn't have access to any extensions. - u2f.getIframePort_(callback); - } -}; - -/** - * Detect chrome running on android based on the browser's useragent. - * @private - */ -u2f.isAndroidChrome_ = function() { - var userAgent = navigator.userAgent; - return userAgent.indexOf('Chrome') != -1 && - userAgent.indexOf('Android') != -1; -}; - -/** - * Detect chrome running on iOS based on the browser's platform. - * @private - */ -u2f.isIosChrome_ = function() { - return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1; -}; - -/** - * Connects directly to the extension via chrome.runtime.connect. - * @param {function(u2f.WrappedChromeRuntimePort_)} callback - * @private - */ -u2f.getChromeRuntimePort_ = function(callback) { - var port = chrome.runtime.connect(u2f.EXTENSION_ID, - {'includeTlsChannelId': true}); - setTimeout(function() { - callback(new u2f.WrappedChromeRuntimePort_(port)); - }, 0); -}; - -/** - * Return a 'port' abstraction to the Authenticator app. - * @param {function(u2f.WrappedAuthenticatorPort_)} callback - * @private - */ -u2f.getAuthenticatorPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedAuthenticatorPort_()); - }, 0); -}; - -/** - * Return a 'port' abstraction to the iOS client app. - * @param {function(u2f.WrappedIosPort_)} callback - * @private - */ -u2f.getIosPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedIosPort_()); - }, 0); -}; - -/** - * A wrapper for chrome.runtime.Port that is compatible with MessagePort. - * @param {Port} port - * @constructor - * @private - */ -u2f.WrappedChromeRuntimePort_ = function(port) { - this.port_ = port; -}; - -/** - * Format and return a sign request compliant with the JS API version supported by the extension. - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatSignRequest_ = - function(appId, challenge, registeredKeys, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: challenge, - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: signRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - appId: appId, - challenge: challenge, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - -/** - * Format and return a register request compliant with the JS API version supported by the extension.. - * @param {Array} signRequests - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatRegisterRequest_ = - function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - for (var i = 0; i < registerRequests.length; i++) { - registerRequests[i].appId = appId; - } - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: registerRequests[0], - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - signRequests: signRequests, - registerRequests: registerRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - appId: appId, - registerRequests: registerRequests, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - - -/** - * Posts a message on the underlying channel. - * @param {Object} message - */ -u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) { - this.port_.postMessage(message); -}; - - -/** - * Emulates the HTML 5 addEventListener interface. Works only for the - * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedChromeRuntimePort_.prototype.addEventListener = - function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message' || name == 'onmessage') { - this.port_.onMessage.addListener(function(message) { - // Emulate a minimal MessageEvent object - handler({'data': message}); - }); - } else { - console.error('WrappedChromeRuntimePort only supports onMessage'); - } -}; - -/** - * Wrap the Authenticator app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedAuthenticatorPort_ = function() { - this.requestId_ = -1; - this.requestObject_ = null; -} - -/** - * Launch the Authenticator intent. - * @param {Object} message - */ -u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) { - var intentUrl = - u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ + - ';S.request=' + encodeURIComponent(JSON.stringify(message)) + - ';end'; - document.location = intentUrl; -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() { - return "WrappedAuthenticatorPort_"; -}; - - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message') { - var self = this; - /* Register a callback to that executes when - * chrome injects the response. */ - window.addEventListener( - 'message', self.onRequestUpdate_.bind(self, handler), false); - } else { - console.error('WrappedAuthenticatorPort only supports message'); - } -}; - -/** - * Callback invoked when a response is received from the Authenticator. - * @param function({data: Object}) callback - * @param {Object} message message Object - */ -u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ = - function(callback, message) { - var messageObject = JSON.parse(message.data); - var intentUrl = messageObject['intentURL']; - - var errorCode = messageObject['errorCode']; - var responseObject = null; - if (messageObject.hasOwnProperty('data')) { - responseObject = /** @type {Object} */ ( - JSON.parse(messageObject['data'])); - } - - callback({'data': responseObject}); -}; - -/** - * Base URL for intents to Authenticator. - * @const - * @private - */ -u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ = - 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE'; - -/** - * Wrap the iOS client app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedIosPort_ = function() {}; - -/** - * Launch the iOS client app request - * @param {Object} message - */ -u2f.WrappedIosPort_.prototype.postMessage = function(message) { - var str = JSON.stringify(message); - var url = "u2f://auth?" + encodeURI(str); - location.replace(url); -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedIosPort_.prototype.getPortType = function() { - return "WrappedIosPort_"; -}; - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name !== 'message') { - console.error('WrappedIosPort only supports message'); - } -}; - -/** - * Sets up an embedded trampoline iframe, sourced from the extension. - * @param {function(MessagePort)} callback - * @private - */ -u2f.getIframePort_ = function(callback) { - // Create the iframe - var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID; - var iframe = document.createElement('iframe'); - iframe.src = iframeOrigin + '/u2f-comms.html'; - iframe.setAttribute('style', 'display:none'); - document.body.appendChild(iframe); - - var channel = new MessageChannel(); - var ready = function(message) { - if (message.data == 'ready') { - channel.port1.removeEventListener('message', ready); - callback(channel.port1); - } else { - console.error('First event on iframe port was not "ready"'); - } - }; - channel.port1.addEventListener('message', ready); - channel.port1.start(); - - iframe.addEventListener('load', function() { - // Deliver the port to the iframe and initialize - iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]); - }); -}; - - -//High-level JS API - -/** - * Default extension response timeout in seconds. - * @const - */ -u2f.EXTENSION_TIMEOUT_SEC = 30; - -/** - * A singleton instance for a MessagePort to the extension. - * @type {MessagePort|u2f.WrappedChromeRuntimePort_} - * @private - */ -u2f.port_ = null; - -/** - * Callbacks waiting for a port - * @type {Array} - * @private - */ -u2f.waitingForPort_ = []; - -/** - * A counter for requestIds. - * @type {number} - * @private - */ -u2f.reqCounter_ = 0; - -/** - * A map from requestIds to client callbacks - * @type {Object.} - * @private - */ -u2f.callbackMap_ = {}; - -/** - * Creates or retrieves the MessagePort singleton to use. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - * @private - */ -u2f.getPortSingleton_ = function(callback) { - if (u2f.port_) { - callback(u2f.port_); - } else { - if (u2f.waitingForPort_.length == 0) { - u2f.getMessagePort(function(port) { - u2f.port_ = port; - u2f.port_.addEventListener('message', - /** @type {function(Event)} */ (u2f.responseHandler_)); - - // Careful, here be async callbacks. Maybe. - while (u2f.waitingForPort_.length) - u2f.waitingForPort_.shift()(u2f.port_); - }); - } - u2f.waitingForPort_.push(callback); - } -}; - -/** - * Handles response messages from the extension. - * @param {MessageEvent.} message - * @private - */ -u2f.responseHandler_ = function(message) { - var response = message.data; - var reqId = response['requestId']; - if (!reqId || !u2f.callbackMap_[reqId]) { - console.error('Unknown or missing requestId in response.'); - return; - } - var cb = u2f.callbackMap_[reqId]; - delete u2f.callbackMap_[reqId]; - cb(response['responseData']); -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the sign request. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual sign request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual sign request in the supported API version. - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the register request. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual register request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual register request in the supported API version. - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatRegisterRequest_( - appId, registeredKeys, registerRequests, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - - -/** - * Dispatches a message to the extension to find out the supported - * JS API version. - * If the user is on a mobile phone and is thus using Google Authenticator instead - * of the Chrome extension, don't send the request and simply return 0. - * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.getApiVersion = function(callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - // If we are using Android Google Authenticator or iOS client app, - // do not fire an intent to ask which JS API version to use. - if (port.getPortType) { - var apiVersion; - switch (port.getPortType()) { - case 'WrappedIosPort_': - case 'WrappedAuthenticatorPort_': - apiVersion = 1.1; - break; - - default: - apiVersion = 0; - break; - } - callback({ 'js_api_version': apiVersion }); - return; - } - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); -}; - diff --git a/themes/black/server/.directory b/themes/black/server/.directory deleted file mode 100644 index b7754766c..000000000 --- a/themes/black/server/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,58,20 -Version=3 -ViewMode=1 diff --git a/themes/black/server/src/resources/email-template.ejs b/themes/black/server/src/resources/email-template.ejs deleted file mode 100644 index f59c2f944..000000000 --- a/themes/black/server/src/resources/email-template.ejs +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - Simples-Minimalistic Responsive Template - - - - - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - -
-

<%= title %>

-
- -
 
-
-
- - - - - - - - -
- - - - - - -
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - - - - - - - - - - - - -
- This email has been sent to you in order to validate your identity. Please ignore it if you do not know why you received it. -
 
- <%= button_title %> -
-
 
-
-
- - - - - - - - -
- - - - - - - - - - - - -
 
 
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - -
- Please ignore this email if you did not initiate the process. -
-
-
- - - - - diff --git a/themes/black/server/src/views/already-logged-in.pug b/themes/black/server/src/views/already-logged-in.pug deleted file mode 100644 index 137bbea30..000000000 --- a/themes/black/server/src/views/already-logged-in.pug +++ /dev/null @@ -1,14 +0,0 @@ -extends layout/layout.pug - -block form-header - h1 Sign in - -block content - img(class="header-img" src="/img/success.png" alt="success") - if redirection_url - p You are already logged in as #{ username }.

- | If you are not redirected in few seconds, click
here.

- | Otherwise, click here to log off. - else - p You are already logged in as #{ username }.

- | Click here to log off. diff --git a/themes/black/server/src/views/errors/.directory b/themes/black/server/src/views/errors/.directory deleted file mode 100644 index 33f71bea4..000000000 --- a/themes/black/server/src/views/errors/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,59,57 -Version=3 -ViewMode=1 diff --git a/themes/black/server/src/views/errors/401.pug b/themes/black/server/src/views/errors/401.pug deleted file mode 100644 index b7a222ad0..000000000 --- a/themes/black/server/src/views/errors/401.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-401"; - -block form-header - h1 Error 401 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You are not authorized to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You are not authorized to access this resource. \ No newline at end of file diff --git a/themes/black/server/src/views/errors/403.pug b/themes/black/server/src/views/errors/403.pug deleted file mode 100644 index f4b5ca8a2..000000000 --- a/themes/black/server/src/views/errors/403.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-403"; - -block form-header - h1 Error 403 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You don't have enough privileges to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You don't have enough privileges to access this resource. diff --git a/themes/black/server/src/views/errors/404.pug b/themes/black/server/src/views/errors/404.pug deleted file mode 100644 index 06d6375fc..000000000 --- a/themes/black/server/src/views/errors/404.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-404"; - -block form-header -

Error 404

- -block content - img(class="header-img" src="/img/warning.png" alt="warning") - p Page not found. diff --git a/themes/black/server/src/views/firstfactor.pug b/themes/black/server/src/views/firstfactor.pug deleted file mode 100644 index 574470710..000000000 --- a/themes/black/server/src/views/firstfactor.pug +++ /dev/null @@ -1,23 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "firstfactor"; - -block form-header - h1 Sign in - -block content - div(class="notification") - img(class="header-img" src="/img/sharingan.png" alt="user profile") - p Enter your credentials to sign in - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" id="username" placeholder="Username" required autofocus) - input(type="password" class="form-control" id="password" placeholder="Password" required) - button(id="signin" class="btn btn-lg btn-primary btn-block" type="submit") Sign in - div(class="keep-me-logged-in pull-left") - input(type="checkbox" id="keep_me_logged_in" name="keep_me_logged_in" value="true") - label(for="keep_me_logged_in") Keep me logged in - div(class="bottom-right-links pull-right") - a(href=reset_password_request_endpoint, class="link forgot-password") Forgot password? - span(class="clearfix") diff --git a/themes/black/server/src/views/layout/layout.pug b/themes/black/server/src/views/layout/layout.pug deleted file mode 100644 index 43247436d..000000000 --- a/themes/black/server/src/views/layout/layout.pug +++ /dev/null @@ -1,28 +0,0 @@ -block variables - -doctype html -html - head - title Authelia - 2FA - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="robots", content="noindex, nofollow, nosnippet, noarchive") - meta(http-equiv="Content-Security-Policy", content="default-src 'self'; img-src 'self' data:;") - link(rel="icon", href="/img/icon.png" type="image/png" sizes="32x32") - link(rel="stylesheet", type="text/css", href="/css/authelia.css") - if redirection_url - meta(http-equiv="refresh" content="4;url=" + redirection_url) - body - div(class="container") - div(class="row") - div(class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3") - div(class="account-wall " + page_classname) - div(class="row header") - block form-header - div(class="row body") - div(class="form col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2") - block content - div(class="row footer poweredby-block") - div(class="poweredby col-xs-6 col-xs-offset-4 col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4") - | Powered by Authelia - block entrypoint - script(src="/js/authelia.js", type="text/javascript") diff --git a/themes/black/server/src/views/need-identity-validation.pug b/themes/black/server/src/views/need-identity-validation.pug deleted file mode 100644 index 4cfd62717..000000000 --- a/themes/black/server/src/views/need-identity-validation.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "identity-validation"; - -block form-header - h1 Registration - -block content - img(class="header-img" src="/img/mail.png" alt="mail") - p A confirmation email has been sent to your mailbox. - | Please open it and click on the link within 15 minutes to confirm the registration. diff --git a/themes/black/server/src/views/password-reset-form.pug b/themes/black/server/src/views/password-reset-form.pug deleted file mode 100644 index fd9311892..000000000 --- a/themes/black/server/src/views/password-reset-form.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-form"; - -block form-header - h1 Reset password - -block content - div(class="notification") - img(class="header-img" src="/img/password_white.png" alt="password") - p Set your new password and confirm it. - form(class="form-signin") - div(class="form-inputs") - input(class="form-control" type="password" name="password1" id="password1" placeholder="New password" required="required") - input(class="form-control" type="password" name="password2" id="password2" placeholder="Password confirmation" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/black/server/src/views/password-reset-request.pug b/themes/black/server/src/views/password-reset-request.pug deleted file mode 100644 index 855b5998b..000000000 --- a/themes/black/server/src/views/password-reset-request.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-request"; - -block form-header - h1 Reset password - -block content - div(class="notification") - div - img(class="header-img" src="/img/password_white.png" alt="password") - p After giving your username, you will receive an email to change your password. - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" name="username" id="username" placeholder="Your username" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/black/server/src/views/secondfactor.pug b/themes/black/server/src/views/secondfactor.pug deleted file mode 100644 index 87b578185..000000000 --- a/themes/black/server/src/views/secondfactor.pug +++ /dev/null @@ -1,31 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "secondfactor"; - -block form-header - h1 Sign in - -block content - div - div(class="notification notification-totp") - h3 Hi #{username} - div(class="row") - div(class="u2f-token") - img(src="/img/pendrive.png", alt="security key") - p - | Please, touch your security key
- b Or
- | Get a one-time password - form(class="form-signin totp") - div(class="form-inputs") - input(type="text" autocomplete="off" class="form-control" id="token" placeholder="Token" required autofocus) - button(class="btn btn-lg btn-primary btn-block totp-button" type="submit") Sign in - div(class="pull-right bottom-right-links") - div Need to register? - div - a(href=u2f_identity_start_endpoint, class="link register-u2f", data-toggle="tooltip", title="A security key is required to register.") Security key - | | - a(href=totp_identity_start_endpoint, class="link register-totp") Google Authenticator - span(class="clearfix") - script(src="/js/u2f-api.js", type="text/javascript") diff --git a/themes/black/server/src/views/totp-register.pug b/themes/black/server/src/views/totp-register.pug deleted file mode 100644 index 1b4d98354..000000000 --- a/themes/black/server/src/views/totp-register.pug +++ /dev/null @@ -1,25 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "totp-register"; - -block form-header - h1 One-time passwords - -block content - p Open Google Authenticator and add this entry - p(id="secret") #{ base32_secret } - p or scan this barcode - div(id="qrcode") #{ otpauth_url } - p - a(href=login_endpoint, id="login-button") Login - div(class="need-google-authenticator") - | Need Google Authenticator? - div(class="store-badges") - a(href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1', target="_blank") - img(alt='Get it on Google Play', src='/img/stores/googleplay-badge.svg', class="store-badge") - a(href='https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8', target="_blank") - img(alt='Get it on Apple Store' src='/img/stores/applestore-badge.svg' class="store-badge") - -block entrypoint - script(src="/js/qrcode.min.js", type="text/javascript" ) diff --git a/themes/black/server/src/views/u2f-register.pug b/themes/black/server/src/views/u2f-register.pug deleted file mode 100644 index d52eba6ca..000000000 --- a/themes/black/server/src/views/u2f-register.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "u2f-register"; - -block form-header - h1 Register your security key - -block content - p Touch the token to register your security key. - img(src="/img/pendrive.png" alt="pendrive") - script(src="/js/u2f-api.js", type="text/javascript") \ No newline at end of file diff --git a/themes/default/client/src/css/.directory b/themes/default/client/src/css/.directory deleted file mode 100644 index eca81829c..000000000 --- a/themes/default/client/src/css/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,56,39 -Version=3 -ViewMode=1 diff --git a/themes/default/client/src/css/00-bootstrap.min.css b/themes/default/client/src/css/00-bootstrap.min.css deleted file mode 100644 index ed3905e0e..000000000 --- a/themes/default/client/src/css/00-bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/themes/default/client/src/css/01-main.css b/themes/default/client/src/css/01-main.css deleted file mode 100644 index ead0852a7..000000000 --- a/themes/default/client/src/css/01-main.css +++ /dev/null @@ -1,67 +0,0 @@ -body { - background-image: url("/img/background.svg"); -} -.authelia-brand { - font-weight: bold; - font-style: italic; - color: #648caf -} -.poweredby-block { - margin: 0px 30px; - margin-top: 10px; - padding-top: 15px; - border-top: 1px solid rgba(0, 0, 0, 0.15); -} -.poweredby { - font-size: 0.7em; - color: #6b6b6b; -} -/* notifications */ -.notification { - padding: 10px; - margin: 15px 0px; - border-radius: 6px; - display: none; - position: absolute; -} -.notification img { - width: 24px; - margin-right: 10px; -} -.notification i, -.notification span { - display:table-cell; - vertical-align:middle; -} -.info { - border: 1px solid #9cb1ff; - background-color: rgb(192, 220, 255); -} -.success { - border: 1px solid #65ec7c; - background-color: rgb(163, 255, 157); -} -.error { - border: 1px solid #ffa3a3; - background-color: rgb(255, 175, 175); -} -.warning { - border: 1px solid #ffd743; - background-color: rgb(255, 230, 143); -} -.bottom-right-links { - text-align: right; - margin-top: 10px; - font-size: 0.8em; -} -.header { - background-color: #778dab; - color: white; - margin: 0px; -} -.body { - padding: 10px; -} -h1 { - font-size: 25px; -} diff --git a/themes/default/client/src/css/02-login.css b/themes/default/client/src/css/02-login.css deleted file mode 100644 index aa59733d3..000000000 --- a/themes/default/client/src/css/02-login.css +++ /dev/null @@ -1,132 +0,0 @@ -.form-signin -{ - margin: 0 auto; -} - -.form-signin .form-signin-heading, .form-signin .checkbox -{ - margin-bottom: 10px; -} - -.form-signin .checkbox -{ - font-weight: normal; -} - -.form-signin .form-control -{ - position: relative; - font-size: 16px; - height: auto; - padding: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-signin .form-control:focus -{ - z-index: 2; -} -.form-signin input[type="text"] -{ - margin-bottom: -1px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.form-signin input[type="password"] -{ - /* margin-bottom: 10px; */ - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.account-wall -{ - border: 1px solid #DDD; - margin-top: 20px; - padding-bottom: 20px; - background-color: #f7f7f7; - -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); - box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); -} -.account-wall h1 -{ - margin-bottom: 15px; - margin-top: 15px; - font-weight: 800; - display: block; - text-align: center; -} -.account-wall h3 -{ - display: block; - text-align: center; -} -.account-wall p -{ - text-align: center; - margin: 10px; -} -.account-wall .form-inputs -{ - margin-bottom: 10px; -} -.account-wall hr { - border-color: #c5c5c5; -} - -.header-img -{ - width: 96px; - height: 96px; - margin: 0 auto 10px; - display: block; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - border-radius: 50%; -} - -.link -{ - margin-top: 10px; -} - -.btn-primary.totp -{ - background-color: rgb(102, 135, 162); -} - -.btn-primary.u2f -{ - background-color: rgb(83, 149, 204); -} - -.u2f-token { - text-align: center; -} - -.u2f-token img { - width: 70px; -} - -.keep-me-logged-in { - margin-top: 10px; - font-size: 0.8em; -} - -.keep-me-logged-in input[type=checkbox] { - transform: scale(0.8); - margin: 0; - margin-right: 4px; -} - -.keep-me-logged-in label { - font-weight: 300; -} - -.keep-me-logged-in input, -.keep-me-logged-in label { - display: inline-block; - margin-bottom: 0; /* I added this after I posted my reply */ - vertical-align: middle; /* Fixes any weird issues in Firefox and IE */ -} \ No newline at end of file diff --git a/themes/default/client/src/css/03-errors.css b/themes/default/client/src/css/03-errors.css deleted file mode 100644 index e9f97f33b..000000000 --- a/themes/default/client/src/css/03-errors.css +++ /dev/null @@ -1,12 +0,0 @@ - -.error-401 .header-img { - border-radius: 0%; -} - -.error-403 .header-img { - border-radius: 0%; -} - -.error-404 .header-img { - border-radius: 0%; -} \ No newline at end of file diff --git a/themes/default/client/src/css/03-password-reset-form.css b/themes/default/client/src/css/03-password-reset-form.css deleted file mode 100644 index 34066bc24..000000000 --- a/themes/default/client/src/css/03-password-reset-form.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-form .header-img { - border-radius: 0%; -} diff --git a/themes/default/client/src/css/03-password-reset-request.css b/themes/default/client/src/css/03-password-reset-request.css deleted file mode 100644 index 1a2ad4df8..000000000 --- a/themes/default/client/src/css/03-password-reset-request.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-request .header-img { - border-radius: 0%; -} diff --git a/themes/default/client/src/css/03-totp-register.css b/themes/default/client/src/css/03-totp-register.css deleted file mode 100644 index cb76720ad..000000000 --- a/themes/default/client/src/css/03-totp-register.css +++ /dev/null @@ -1,22 +0,0 @@ -.totp-register #secret { - background-color: white; - font-size: 0.9em; - font-weight: bold; - padding: 5px; - border: 1px solid #c7c7c7; - word-wrap: break-word; -} -.totp-register #qrcode img { - margin: 10px auto; -} -.totp-register .need-google-authenticator { - text-align: center; - margin-top: 20px; -} -.totp-register .store-badges { - margin-top: 5px; -} -.totp-register .store-badge { - width: 110px; - height: 30px; -} \ No newline at end of file diff --git a/themes/default/client/src/css/03-u2f-register.css b/themes/default/client/src/css/03-u2f-register.css deleted file mode 100644 index e54cddf89..000000000 --- a/themes/default/client/src/css/03-u2f-register.css +++ /dev/null @@ -1,5 +0,0 @@ - -.u2f-register img { - display: block; - margin: 20px auto; -} \ No newline at end of file diff --git a/themes/default/client/src/img/background.svg b/themes/default/client/src/img/background.svg deleted file mode 100644 index 93b00339b..000000000 --- a/themes/default/client/src/img/background.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/themes/default/client/src/img/icon.png b/themes/default/client/src/img/icon.png deleted file mode 100644 index 040d10c1a..000000000 Binary files a/themes/default/client/src/img/icon.png and /dev/null differ diff --git a/themes/default/client/src/img/mail.png b/themes/default/client/src/img/mail.png deleted file mode 100644 index 834bfce91..000000000 Binary files a/themes/default/client/src/img/mail.png and /dev/null differ diff --git a/themes/default/client/src/img/notifications/.directory b/themes/default/client/src/img/notifications/.directory deleted file mode 100644 index 24d68ea36..000000000 --- a/themes/default/client/src/img/notifications/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,31 -Version=3 -ViewMode=1 diff --git a/themes/default/client/src/img/notifications/error.png b/themes/default/client/src/img/notifications/error.png deleted file mode 100644 index bf64d28f7..000000000 Binary files a/themes/default/client/src/img/notifications/error.png and /dev/null differ diff --git a/themes/default/client/src/img/notifications/info.png b/themes/default/client/src/img/notifications/info.png deleted file mode 100644 index 67928e88c..000000000 Binary files a/themes/default/client/src/img/notifications/info.png and /dev/null differ diff --git a/themes/default/client/src/img/notifications/success.png b/themes/default/client/src/img/notifications/success.png deleted file mode 100644 index d3998392d..000000000 Binary files a/themes/default/client/src/img/notifications/success.png and /dev/null differ diff --git a/themes/default/client/src/img/notifications/warning.png b/themes/default/client/src/img/notifications/warning.png deleted file mode 100644 index ab8b54ffc..000000000 Binary files a/themes/default/client/src/img/notifications/warning.png and /dev/null differ diff --git a/themes/default/client/src/img/padlock.png b/themes/default/client/src/img/padlock.png deleted file mode 100644 index 31abbaeef..000000000 Binary files a/themes/default/client/src/img/padlock.png and /dev/null differ diff --git a/themes/default/client/src/img/password.png b/themes/default/client/src/img/password.png deleted file mode 100644 index cf6164740..000000000 Binary files a/themes/default/client/src/img/password.png and /dev/null differ diff --git a/themes/default/client/src/img/pendrive.png b/themes/default/client/src/img/pendrive.png deleted file mode 100644 index fa49178c3..000000000 Binary files a/themes/default/client/src/img/pendrive.png and /dev/null differ diff --git a/themes/default/client/src/img/stores/.directory b/themes/default/client/src/img/stores/.directory deleted file mode 100644 index 9c9dfe047..000000000 --- a/themes/default/client/src/img/stores/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,26 -Version=3 -ViewMode=1 diff --git a/themes/default/client/src/img/stores/applestore-badge.svg b/themes/default/client/src/img/stores/applestore-badge.svg deleted file mode 100644 index ac111e597..000000000 --- a/themes/default/client/src/img/stores/applestore-badge.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/default/client/src/img/stores/googleplay-badge.svg b/themes/default/client/src/img/stores/googleplay-badge.svg deleted file mode 100644 index 9e33e3aa2..000000000 --- a/themes/default/client/src/img/stores/googleplay-badge.svg +++ /dev/null @@ -1,429 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/themes/default/client/src/img/success.png b/themes/default/client/src/img/success.png deleted file mode 100644 index ee9d6841b..000000000 Binary files a/themes/default/client/src/img/success.png and /dev/null differ diff --git a/themes/default/client/src/img/user.png b/themes/default/client/src/img/user.png deleted file mode 100644 index 00941399d..000000000 Binary files a/themes/default/client/src/img/user.png and /dev/null differ diff --git a/themes/default/client/src/img/warning.png b/themes/default/client/src/img/warning.png deleted file mode 100644 index c6acd953b..000000000 Binary files a/themes/default/client/src/img/warning.png and /dev/null differ diff --git a/themes/default/client/src/thirdparties/qrcode.min.js b/themes/default/client/src/thirdparties/qrcode.min.js deleted file mode 100644 index 993e88f39..000000000 --- a/themes/default/client/src/thirdparties/qrcode.min.js +++ /dev/null @@ -1 +0,0 @@ -var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/themes/default/server/.directory b/themes/default/server/.directory deleted file mode 100644 index a9c754bbb..000000000 --- a/themes/default/server/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,58,21 -Version=3 -ViewMode=1 diff --git a/themes/default/server/src/resources/email-template.ejs b/themes/default/server/src/resources/email-template.ejs deleted file mode 100644 index f29d5afc0..000000000 --- a/themes/default/server/src/resources/email-template.ejs +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - Simples-Minimalistic Responsive Template - - - - - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - -
-

<%= title %>

-
- -
 
-
-
- - - - - - - - -
- - - - - - -
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - - - - - - - - - - - - -
- This email has been sent to you in order to validate your identity. Please ignore it if you do not know why you received it. -
 
- <%= button_title %> -
-
 
-
-
- - - - - - - - -
- - - - - - - - - - - - -
 
 
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - -
- Please ignore this email if you did not initiate the process. -
-
-
- - - - - diff --git a/themes/default/server/src/views/already-logged-in.pug b/themes/default/server/src/views/already-logged-in.pug deleted file mode 100644 index 137bbea30..000000000 --- a/themes/default/server/src/views/already-logged-in.pug +++ /dev/null @@ -1,14 +0,0 @@ -extends layout/layout.pug - -block form-header - h1 Sign in - -block content - img(class="header-img" src="/img/success.png" alt="success") - if redirection_url - p You are already logged in as #{ username }.

- | If you are not redirected in few seconds, click here.

- | Otherwise, click here to log off. - else - p You are already logged in as #{ username }.

- | Click here to log off. diff --git a/themes/default/server/src/views/errors/.directory b/themes/default/server/src/views/errors/.directory deleted file mode 100644 index d51d6cb47..000000000 --- a/themes/default/server/src/views/errors/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,59,58 -Version=3 -ViewMode=1 diff --git a/themes/default/server/src/views/errors/401.pug b/themes/default/server/src/views/errors/401.pug deleted file mode 100644 index b7a222ad0..000000000 --- a/themes/default/server/src/views/errors/401.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-401"; - -block form-header - h1 Error 401 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You are not authorized to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You are not authorized to access this resource. \ No newline at end of file diff --git a/themes/default/server/src/views/errors/403.pug b/themes/default/server/src/views/errors/403.pug deleted file mode 100644 index f4b5ca8a2..000000000 --- a/themes/default/server/src/views/errors/403.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-403"; - -block form-header - h1 Error 403 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You don't have enough privileges to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You don't have enough privileges to access this resource. diff --git a/themes/default/server/src/views/errors/404.pug b/themes/default/server/src/views/errors/404.pug deleted file mode 100644 index 06d6375fc..000000000 --- a/themes/default/server/src/views/errors/404.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-404"; - -block form-header -

Error 404

- -block content - img(class="header-img" src="/img/warning.png" alt="warning") - p Page not found. diff --git a/themes/default/server/src/views/firstfactor.pug b/themes/default/server/src/views/firstfactor.pug deleted file mode 100644 index 046b8c4c1..000000000 --- a/themes/default/server/src/views/firstfactor.pug +++ /dev/null @@ -1,23 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "firstfactor"; - -block form-header - h1 Sign in - -block content - div(class="notification") - img(class="header-img" src="/img/user.png" alt="user profile") - p Enter your credentials to sign in - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" id="username" placeholder="Username" required autofocus) - input(type="password" class="form-control" id="password" placeholder="Password" required) - button(id="signin" class="btn btn-lg btn-primary btn-block" type="submit") Sign in - div(class="keep-me-logged-in pull-left") - input(type="checkbox" id="keep_me_logged_in" name="keep_me_logged_in" value="true") - label(for="keep_me_logged_in") Keep me logged in - div(class="bottom-right-links pull-right") - a(href=reset_password_request_endpoint, class="link forgot-password") Forgot password? - span(class="clearfix") diff --git a/themes/default/server/src/views/layout/layout.pug b/themes/default/server/src/views/layout/layout.pug deleted file mode 100644 index 39d045042..000000000 --- a/themes/default/server/src/views/layout/layout.pug +++ /dev/null @@ -1,29 +0,0 @@ -block variables - -doctype html -html - head - title Authelia - 2FA - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="robots", content="noindex, nofollow, nosnippet, noarchive") - meta(http-equiv="Content-Security-Policy", content="default-src 'self'; img-src 'self' data:;") - link(rel="icon", href="/img/icon.png" type="image/png" sizes="32x32") - link(rel="stylesheet", type="text/css", href="/css/authelia.css") - if redirection_url - meta(http-equiv="refresh" content="4;url=" + redirection_url) - body - canvas#canvas(width='400', height='300') - div(class="container") - div(class="row") - div(class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3") - div(class="account-wall " + page_classname) - div(class="row header") - block form-header - div(class="row body") - div(class="form col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2") - block content - div(class="row footer poweredby-block") - div(class="poweredby col-xs-6 col-xs-offset-4 col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4") - | Powered by Authelia - block entrypoint - script(src="/js/authelia.js", type="text/javascript") diff --git a/themes/default/server/src/views/need-identity-validation.pug b/themes/default/server/src/views/need-identity-validation.pug deleted file mode 100644 index 4cfd62717..000000000 --- a/themes/default/server/src/views/need-identity-validation.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "identity-validation"; - -block form-header - h1 Registration - -block content - img(class="header-img" src="/img/mail.png" alt="mail") - p A confirmation email has been sent to your mailbox. - | Please open it and click on the link within 15 minutes to confirm the registration. diff --git a/themes/default/server/src/views/password-reset-form.pug b/themes/default/server/src/views/password-reset-form.pug deleted file mode 100644 index 07f0baa7b..000000000 --- a/themes/default/server/src/views/password-reset-form.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-form"; - -block form-header - h1 Reset password - -block content - div(class="notification") - img(class="header-img" src="/img/password.png" alt="password") - p Set your new password and confirm it. - form(class="form-signin") - div(class="form-inputs") - input(class="form-control" type="password" name="password1" id="password1" placeholder="New password" required="required") - input(class="form-control" type="password" name="password2" id="password2" placeholder="Password confirmation" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/default/server/src/views/password-reset-request.pug b/themes/default/server/src/views/password-reset-request.pug deleted file mode 100644 index 21746af9e..000000000 --- a/themes/default/server/src/views/password-reset-request.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-request"; - -block form-header - h1 Reset password - -block content - div(class="notification") - div - img(class="header-img" src="/img/password.png" alt="password") - p After giving your username, you will receive an email to change your password. - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" name="username" id="username" placeholder="Your username" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/default/server/src/views/secondfactor.pug b/themes/default/server/src/views/secondfactor.pug deleted file mode 100644 index 4df8ec257..000000000 --- a/themes/default/server/src/views/secondfactor.pug +++ /dev/null @@ -1,30 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "secondfactor"; - -block form-header - h1 Sign in - -block content - div - div(class="notification") - h3 Hi #{username} - div(class="row") - div(class="u2f-token") - img(src="/img/pendrive.png", alt="security key") - p - | Please, touch your security key
- b Or
- | Get a one-time password - form(class="form-signin totp") - div(class="form-inputs") - input(type="text" autocomplete="off" class="form-control" id="token" placeholder="Token" required autofocus) - button(class="btn btn-lg btn-primary btn-block totp-button" type="submit") Sign in - div(class="pull-right bottom-right-links") - div Need to register? - div - a(href=u2f_identity_start_endpoint, class="link register-u2f", data-toggle="tooltip", title="A security key is required to register.") Security key - | | - a(href=totp_identity_start_endpoint, class="link register-totp") Google Authenticator - span(class="clearfix") \ No newline at end of file diff --git a/themes/default/server/src/views/totp-register.pug b/themes/default/server/src/views/totp-register.pug deleted file mode 100644 index 1b4d98354..000000000 --- a/themes/default/server/src/views/totp-register.pug +++ /dev/null @@ -1,25 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "totp-register"; - -block form-header - h1 One-time passwords - -block content - p Open Google Authenticator and add this entry - p(id="secret") #{ base32_secret } - p or scan this barcode - div(id="qrcode") #{ otpauth_url } - p - a(href=login_endpoint, id="login-button") Login - div(class="need-google-authenticator") - | Need Google Authenticator? - div(class="store-badges") - a(href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1', target="_blank") - img(alt='Get it on Google Play', src='/img/stores/googleplay-badge.svg', class="store-badge") - a(href='https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8', target="_blank") - img(alt='Get it on Apple Store' src='/img/stores/applestore-badge.svg' class="store-badge") - -block entrypoint - script(src="/js/qrcode.min.js", type="text/javascript" ) diff --git a/themes/default/server/src/views/u2f-register.pug b/themes/default/server/src/views/u2f-register.pug deleted file mode 100644 index 5e24bc707..000000000 --- a/themes/default/server/src/views/u2f-register.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "u2f-register"; - -block form-header - h1 Register your security key - -block content - p Touch the token to register your security key. - img(src="/img/pendrive.png" alt="pendrive") \ No newline at end of file diff --git a/themes/matrix/client/src/css/.directory b/themes/matrix/client/src/css/.directory deleted file mode 100644 index 6e4b3f639..000000000 --- a/themes/matrix/client/src/css/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,56,41 -Version=3 -ViewMode=1 diff --git a/themes/matrix/client/src/css/00-bootstrap.min.css b/themes/matrix/client/src/css/00-bootstrap.min.css deleted file mode 100644 index 7ff40a282..000000000 --- a/themes/matrix/client/src/css/00-bootstrap.min.css +++ /dev/null @@ -1,5770 +0,0 @@ -/*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html{ - font-family:sans-serif; - -webkit-text-size-adjust:100%; - -ms-text-size-adjust:100% -} -body{ - margin:0; - height: 100%; - width: 100% -} -article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{ - display:block -} -audio,canvas,progress,video{ - display:inline-block; - vertical-align:baseline -} -audio:not([controls]){ - display:none; - height:0 -} -[hidden],template{ - display:none -} -a{ - background-color:transparent -} -a:active,a:hover{ - outline:0 -} -abbr[title]{ - border-bottom:1px dotted -} -b,strong{ - font-weight:700 -} -dfn{ - font-style:italic -} -h1{ - margin:.67em 0; - font-size:2em -} -mark{ - color:#000; - background:#ff0 -} -small{ - font-size:80% -} -sub,sup{ - position:relative; - font-size:75%; - line-height:0; - vertical-align:baseline -} -sup{ - top:-.5em -} -sub{ - bottom:-.25em -} -img{ - border:0 -} -svg:not(:root){ - overflow:hidden -} -figure{ - margin:1em 40px -} -hr{ - height:0; - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box -} -pre{ - overflow:auto -} -code,kbd,pre,samp{ - font-family:monospace,monospace; - font-size:1em -} -button,input,optgroup,select,textarea{ - margin:0; - font:inherit; - color:inherit -} -button{ - overflow:visible -} -button,select{ - text-transform:none -} -button,html input[type=button],input[type=reset],input[type=submit]{ - -webkit-appearance:button; - cursor:pointer -} -button[disabled],html input[disabled]{ - cursor:default -} -button::-moz-focus-inner,input::-moz-focus-inner{ - padding:0; - border:0 -} -input{ - line-height:normal -} -input[type=checkbox],input[type=radio]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - padding:0 -} -input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{ - height:auto -} -input[type=search]{ - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box; - -webkit-appearance:textfield -} -input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{ - -webkit-appearance:none -} -fieldset{ - padding:.35em .625em .75em; - margin:0 2px; - border:1px solid silver -} -legend{ - padding:0; - border:0 -} -textarea{ - overflow:auto -} -optgroup{ - font-weight:700 -} -table{ - border-spacing:0; - border-collapse:collapse -} -td,th{ - padding:0 -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print{ - *,:after,:before{ - color:#000!important; - text-shadow:none!important; - background:0 0!important; - -webkit-box-shadow:none!important; - box-shadow:none!important - } - a,a:visited{ - text-decoration:underline - } - a[href]:after{ - content:" (" attr(href) ")" - } - abbr[title]:after{ - content:" (" attr(title) ")" - } - a[href^="javascript:"]:after,a[href^="#"]:after{ - content:"" - } - blockquote,pre{ - border:1px solid #999; - page-break-inside:avoid - } - thead{ - display:table-header-group - } - img,tr{ - page-break-inside:avoid - } - img{ - max-width:100%!important - } - h2,h3,p{ - orphans:3; - widows:3 - } - h2,h3{ - page-break-after:avoid - } - .navbar{ - display:none - } - .btn>.caret,.dropup>.btn>.caret{ - border-top-color:#000!important - } - .label{ - border:1px solid #000 - } - .table{ - border-collapse:collapse!important - } - .table td,.table th{ - background-color:#fff!important - } - .table-bordered td,.table-bordered th{ - border:1px solid #ddd!important - } -} -@font-face{ - font-family:'Glyphicons Halflings'; - src:url(../fonts/glyphicons-halflings-regular.eot); - src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg') -} -.glyphicon{ - position:relative; - top:1px; - display:inline-block; - font-family:'Glyphicons Halflings'; - font-style:normal; - font-weight:400; - line-height:1; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale -} -.glyphicon-asterisk:before{ - content:"\002a" -} -.glyphicon-plus:before{ - content:"\002b" -} -.glyphicon-eur:before,.glyphicon-euro:before{ - content:"\20ac" -} -.glyphicon-minus:before{ - content:"\2212" -} -.glyphicon-cloud:before{ - content:"\2601" -} -.glyphicon-envelope:before{ - content:"\2709" -} -.glyphicon-pencil:before{ - content:"\270f" -} -.glyphicon-glass:before{ - content:"\e001" -} -.glyphicon-music:before{ - content:"\e002" -} -.glyphicon-search:before{ - content:"\e003" -} -.glyphicon-heart:before{ - content:"\e005" -} -.glyphicon-star:before{ - content:"\e006" -} -.glyphicon-star-empty:before{ - content:"\e007" -} -.glyphicon-user:before{ - content:"\e008" -} -.glyphicon-film:before{ - content:"\e009" -} -.glyphicon-th-large:before{ - content:"\e010" -} -.glyphicon-th:before{ - content:"\e011" -} -.glyphicon-th-list:before{ - content:"\e012" -} -.glyphicon-ok:before{ - content:"\e013" -} -.glyphicon-remove:before{ - content:"\e014" -} -.glyphicon-zoom-in:before{ - content:"\e015" -} -.glyphicon-zoom-out:before{ - content:"\e016" -} -.glyphicon-off:before{ - content:"\e017" -} -.glyphicon-signal:before{ - content:"\e018" -} -.glyphicon-cog:before{ - content:"\e019" -} -.glyphicon-trash:before{ - content:"\e020" -} -.glyphicon-home:before{ - content:"\e021" -} -.glyphicon-file:before{ - content:"\e022" -} -.glyphicon-time:before{ - content:"\e023" -} -.glyphicon-road:before{ - content:"\e024" -} -.glyphicon-download-alt:before{ - content:"\e025" -} -.glyphicon-download:before{ - content:"\e026" -} -.glyphicon-upload:before{ - content:"\e027" -} -.glyphicon-inbox:before{ - content:"\e028" -} -.glyphicon-play-circle:before{ - content:"\e029" -} -.glyphicon-repeat:before{ - content:"\e030" -} -.glyphicon-refresh:before{ - content:"\e031" -} -.glyphicon-list-alt:before{ - content:"\e032" -} -.glyphicon-lock:before{ - content:"\e033" -} -.glyphicon-flag:before{ - content:"\e034" -} -.glyphicon-headphones:before{ - content:"\e035" -} -.glyphicon-volume-off:before{ - content:"\e036" -} -.glyphicon-volume-down:before{ - content:"\e037" -} -.glyphicon-volume-up:before{ - content:"\e038" -} -.glyphicon-qrcode:before{ - content:"\e039" -} -.glyphicon-barcode:before{ - content:"\e040" -} -.glyphicon-tag:before{ - content:"\e041" -} -.glyphicon-tags:before{ - content:"\e042" -} -.glyphicon-book:before{ - content:"\e043" -} -.glyphicon-bookmark:before{ - content:"\e044" -} -.glyphicon-print:before{ - content:"\e045" -} -.glyphicon-camera:before{ - content:"\e046" -} -.glyphicon-font:before{ - content:"\e047" -} -.glyphicon-bold:before{ - content:"\e048" -} -.glyphicon-italic:before{ - content:"\e049" -} -.glyphicon-text-height:before{ - content:"\e050" -} -.glyphicon-text-width:before{ - content:"\e051" -} -.glyphicon-align-left:before{ - content:"\e052" -} -.glyphicon-align-center:before{ - content:"\e053" -} -.glyphicon-align-right:before{ - content:"\e054" -} -.glyphicon-align-justify:before{ - content:"\e055" -} -.glyphicon-list:before{ - content:"\e056" -} -.glyphicon-indent-left:before{ - content:"\e057" -} -.glyphicon-indent-right:before{ - content:"\e058" -} -.glyphicon-facetime-video:before{ - content:"\e059" -} -.glyphicon-picture:before{ - content:"\e060" -} -.glyphicon-map-marker:before{ - content:"\e062" -} -.glyphicon-adjust:before{ - content:"\e063" -} -.glyphicon-tint:before{ - content:"\e064" -} -.glyphicon-edit:before{ - content:"\e065" -} -.glyphicon-share:before{ - content:"\e066" -} -.glyphicon-check:before{ - content:"\e067" -} -.glyphicon-move:before{ - content:"\e068" -} -.glyphicon-step-backward:before{ - content:"\e069" -} -.glyphicon-fast-backward:before{ - content:"\e070" -} -.glyphicon-backward:before{ - content:"\e071" -} -.glyphicon-play:before{ - content:"\e072" -} -.glyphicon-pause:before{ - content:"\e073" -} -.glyphicon-stop:before{ - content:"\e074" -} -.glyphicon-forward:before{ - content:"\e075" -} -.glyphicon-fast-forward:before{ - content:"\e076" -} -.glyphicon-step-forward:before{ - content:"\e077" -} -.glyphicon-eject:before{ - content:"\e078" -} -.glyphicon-chevron-left:before{ - content:"\e079" -} -.glyphicon-chevron-right:before{ - content:"\e080" -} -.glyphicon-plus-sign:before{ - content:"\e081" -} -.glyphicon-minus-sign:before{ - content:"\e082" -} -.glyphicon-remove-sign:before{ - content:"\e083" -} -.glyphicon-ok-sign:before{ - content:"\e084" -} -.glyphicon-question-sign:before{ - content:"\e085" -} -.glyphicon-info-sign:before{ - content:"\e086" -} -.glyphicon-screenshot:before{ - content:"\e087" -} -.glyphicon-remove-circle:before{ - content:"\e088" -} -.glyphicon-ok-circle:before{ - content:"\e089" -} -.glyphicon-ban-circle:before{ - content:"\e090" -} -.glyphicon-arrow-left:before{ - content:"\e091" -} -.glyphicon-arrow-right:before{ - content:"\e092" -} -.glyphicon-arrow-up:before{ - content:"\e093" -} -.glyphicon-arrow-down:before{ - content:"\e094" -} -.glyphicon-share-alt:before{ - content:"\e095" -} -.glyphicon-resize-full:before{ - content:"\e096" -} -.glyphicon-resize-small:before{ - content:"\e097" -} -.glyphicon-exclamation-sign:before{ - content:"\e101" -} -.glyphicon-gift:before{ - content:"\e102" -} -.glyphicon-leaf:before{ - content:"\e103" -} -.glyphicon-fire:before{ - content:"\e104" -} -.glyphicon-eye-open:before{ - content:"\e105" -} -.glyphicon-eye-close:before{ - content:"\e106" -} -.glyphicon-warning-sign:before{ - content:"\e107" -} -.glyphicon-plane:before{ - content:"\e108" -} -.glyphicon-calendar:before{ - content:"\e109" -} -.glyphicon-random:before{ - content:"\e110" -} -.glyphicon-comment:before{ - content:"\e111" -} -.glyphicon-magnet:before{ - content:"\e112" -} -.glyphicon-chevron-up:before{ - content:"\e113" -} -.glyphicon-chevron-down:before{ - content:"\e114" -} -.glyphicon-retweet:before{ - content:"\e115" -} -.glyphicon-shopping-cart:before{ - content:"\e116" -} -.glyphicon-folder-close:before{ - content:"\e117" -} -.glyphicon-folder-open:before{ - content:"\e118" -} -.glyphicon-resize-vertical:before{ - content:"\e119" -} -.glyphicon-resize-horizontal:before{ - content:"\e120" -} -.glyphicon-hdd:before{ - content:"\e121" -} -.glyphicon-bullhorn:before{ - content:"\e122" -} -.glyphicon-bell:before{ - content:"\e123" -} -.glyphicon-certificate:before{ - content:"\e124" -} -.glyphicon-thumbs-up:before{ - content:"\e125" -} -.glyphicon-thumbs-down:before{ - content:"\e126" -} -.glyphicon-hand-right:before{ - content:"\e127" -} -.glyphicon-hand-left:before{ - content:"\e128" -} -.glyphicon-hand-up:before{ - content:"\e129" -} -.glyphicon-hand-down:before{ - content:"\e130" -} -.glyphicon-circle-arrow-right:before{ - content:"\e131" -} -.glyphicon-circle-arrow-left:before{ - content:"\e132" -} -.glyphicon-circle-arrow-up:before{ - content:"\e133" -} -.glyphicon-circle-arrow-down:before{ - content:"\e134" -} -.glyphicon-globe:before{ - content:"\e135" -} -.glyphicon-wrench:before{ - content:"\e136" -} -.glyphicon-tasks:before{ - content:"\e137" -} -.glyphicon-filter:before{ - content:"\e138" -} -.glyphicon-briefcase:before{ - content:"\e139" -} -.glyphicon-fullscreen:before{ - content:"\e140" -} -.glyphicon-dashboard:before{ - content:"\e141" -} -.glyphicon-paperclip:before{ - content:"\e142" -} -.glyphicon-heart-empty:before{ - content:"\e143" -} -.glyphicon-link:before{ - content:"\e144" -} -.glyphicon-phone:before{ - content:"\e145" -} -.glyphicon-pushpin:before{ - content:"\e146" -} -.glyphicon-usd:before{ - content:"\e148" -} -.glyphicon-gbp:before{ - content:"\e149" -} -.glyphicon-sort:before{ - content:"\e150" -} -.glyphicon-sort-by-alphabet:before{ - content:"\e151" -} -.glyphicon-sort-by-alphabet-alt:before{ - content:"\e152" -} -.glyphicon-sort-by-order:before{ - content:"\e153" -} -.glyphicon-sort-by-order-alt:before{ - content:"\e154" -} -.glyphicon-sort-by-attributes:before{ - content:"\e155" -} -.glyphicon-sort-by-attributes-alt:before{ - content:"\e156" -} -.glyphicon-unchecked:before{ - content:"\e157" -} -.glyphicon-expand:before{ - content:"\e158" -} -.glyphicon-collapse-down:before{ - content:"\e159" -} -.glyphicon-collapse-up:before{ - content:"\e160" -} -.glyphicon-log-in:before{ - content:"\e161" -} -.glyphicon-flash:before{ - content:"\e162" -} -.glyphicon-log-out:before{ - content:"\e163" -} -.glyphicon-new-window:before{ - content:"\e164" -} -.glyphicon-record:before{ - content:"\e165" -} -.glyphicon-save:before{ - content:"\e166" -} -.glyphicon-open:before{ - content:"\e167" -} -.glyphicon-saved:before{ - content:"\e168" -} -.glyphicon-import:before{ - content:"\e169" -} -.glyphicon-export:before{ - content:"\e170" -} -.glyphicon-send:before{ - content:"\e171" -} -.glyphicon-floppy-disk:before{ - content:"\e172" -} -.glyphicon-floppy-saved:before{ - content:"\e173" -} -.glyphicon-floppy-remove:before{ - content:"\e174" -} -.glyphicon-floppy-save:before{ - content:"\e175" -} -.glyphicon-floppy-open:before{ - content:"\e176" -} -.glyphicon-credit-card:before{ - content:"\e177" -} -.glyphicon-transfer:before{ - content:"\e178" -} -.glyphicon-cutlery:before{ - content:"\e179" -} -.glyphicon-header:before{ - content:"\e180" -} -.glyphicon-compressed:before{ - content:"\e181" -} -.glyphicon-earphone:before{ - content:"\e182" -} -.glyphicon-phone-alt:before{ - content:"\e183" -} -.glyphicon-tower:before{ - content:"\e184" -} -.glyphicon-stats:before{ - content:"\e185" -} -.glyphicon-sd-video:before{ - content:"\e186" -} -.glyphicon-hd-video:before{ - content:"\e187" -} -.glyphicon-subtitles:before{ - content:"\e188" -} -.glyphicon-sound-stereo:before{ - content:"\e189" -} -.glyphicon-sound-dolby:before{ - content:"\e190" -} -.glyphicon-sound-5-1:before{ - content:"\e191" -} -.glyphicon-sound-6-1:before{ - content:"\e192" -} -.glyphicon-sound-7-1:before{ - content:"\e193" -} -.glyphicon-copyright-mark:before{ - content:"\e194" -} -.glyphicon-registration-mark:before{ - content:"\e195" -} -.glyphicon-cloud-download:before{ - content:"\e197" -} -.glyphicon-cloud-upload:before{ - content:"\e198" -} -.glyphicon-tree-conifer:before{ - content:"\e199" -} -.glyphicon-tree-deciduous:before{ - content:"\e200" -} -.glyphicon-cd:before{ - content:"\e201" -} -.glyphicon-save-file:before{ - content:"\e202" -} -.glyphicon-open-file:before{ - content:"\e203" -} -.glyphicon-level-up:before{ - content:"\e204" -} -.glyphicon-copy:before{ - content:"\e205" -} -.glyphicon-paste:before{ - content:"\e206" -} -.glyphicon-alert:before{ - content:"\e209" -} -.glyphicon-equalizer:before{ - content:"\e210" -} -.glyphicon-king:before{ - content:"\e211" -} -.glyphicon-queen:before{ - content:"\e212" -} -.glyphicon-pawn:before{ - content:"\e213" -} -.glyphicon-bishop:before{ - content:"\e214" -} -.glyphicon-knight:before{ - content:"\e215" -} -.glyphicon-baby-formula:before{ - content:"\e216" -} -.glyphicon-tent:before{ - content:"\26fa" -} -.glyphicon-blackboard:before{ - content:"\e218" -} -.glyphicon-bed:before{ - content:"\e219" -} -.glyphicon-apple:before{ - content:"\f8ff" -} -.glyphicon-erase:before{ - content:"\e221" -} -.glyphicon-hourglass:before{ - content:"\231b" -} -.glyphicon-lamp:before{ - content:"\e223" -} -.glyphicon-duplicate:before{ - content:"\e224" -} -.glyphicon-piggy-bank:before{ - content:"\e225" -} -.glyphicon-scissors:before{ - content:"\e226" -} -.glyphicon-bitcoin:before{ - content:"\e227" -} -.glyphicon-btc:before{ - content:"\e227" -} -.glyphicon-xbt:before{ - content:"\e227" -} -.glyphicon-yen:before{ - content:"\00a5" -} -.glyphicon-jpy:before{ - content:"\00a5" -} -.glyphicon-ruble:before{ - content:"\20bd" -} -.glyphicon-rub:before{ - content:"\20bd" -} -.glyphicon-scale:before{ - content:"\e230" -} -.glyphicon-ice-lolly:before{ - content:"\e231" -} -.glyphicon-ice-lolly-tasted:before{ - content:"\e232" -} -.glyphicon-education:before{ - content:"\e233" -} -.glyphicon-option-horizontal:before{ - content:"\e234" -} -.glyphicon-option-vertical:before{ - content:"\e235" -} -.glyphicon-menu-hamburger:before{ - content:"\e236" -} -.glyphicon-modal-window:before{ - content:"\e237" -} -.glyphicon-oil:before{ - content:"\e238" -} -.glyphicon-grain:before{ - content:"\e239" -} -.glyphicon-sunglasses:before{ - content:"\e240" -} -.glyphicon-text-size:before{ - content:"\e241" -} -.glyphicon-text-color:before{ - content:"\e242" -} -.glyphicon-text-background:before{ - content:"\e243" -} -.glyphicon-object-align-top:before{ - content:"\e244" -} -.glyphicon-object-align-bottom:before{ - content:"\e245" -} -.glyphicon-object-align-horizontal:before{ - content:"\e246" -} -.glyphicon-object-align-left:before{ - content:"\e247" -} -.glyphicon-object-align-vertical:before{ - content:"\e248" -} -.glyphicon-object-align-right:before{ - content:"\e249" -} -.glyphicon-triangle-right:before{ - content:"\e250" -} -.glyphicon-triangle-left:before{ - content:"\e251" -} -.glyphicon-triangle-bottom:before{ - content:"\e252" -} -.glyphicon-triangle-top:before{ - content:"\e253" -} -.glyphicon-console:before{ - content:"\e254" -} -.glyphicon-superscript:before{ - content:"\e255" -} -.glyphicon-subscript:before{ - content:"\e256" -} -.glyphicon-menu-left:before{ - content:"\e257" -} -.glyphicon-menu-right:before{ - content:"\e258" -} -.glyphicon-menu-down:before{ - content:"\e259" -} -.glyphicon-menu-up:before{ - content:"\e260" -} -*{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -:after,:before{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -html{ - font-size:10px; - -webkit-tap-highlight-color:rgba(0,0,0,0) -} -body{ - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - line-height:1.42857143; - color:#333; - background-color:#fff -} -button,input,select,textarea{ - font-family:inherit; - font-size:inherit; - line-height:inherit -} -a{ - color:#337ab7; - text-decoration:none -} -a:focus,a:hover{ - color:#23527c; - text-decoration:underline -} -a:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -figure{ - margin:0 -} -img{ - vertical-align:middle -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{ - display:block; - max-width:100%; - height:auto -} -.img-rounded{ - border-radius:6px -} -.img-thumbnail{ - display:inline-block; - max-width:100%; - height:auto; - padding:4px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:all .2s ease-in-out; - -o-transition:all .2s ease-in-out; - transition:all .2s ease-in-out -} -.img-circle{ - border-radius:50% -} -hr{ - margin-top:20px; - margin-bottom:20px; - border:0; - border-top:1px solid #eee -} -.sr-only{ - position:absolute; - width:1px; - height:1px; - padding:0; - margin:-1px; - overflow:hidden; - clip:rect(0,0,0,0); - border:0 -} -.sr-only-focusable:active,.sr-only-focusable:focus{ - position:static; - width:auto; - height:auto; - margin:0; - overflow:visible; - clip:auto -} -[role=button]{ - cursor:pointer -} -.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{ - font-family:inherit; - font-weight:500; - line-height:1.1; - color:inherit -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-weight:400; - line-height:1; - color:#777 -} -.h1,.h2,.h3,h1,h2,h3{ - margin-top:20px; - margin-bottom:10px -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{ - font-size:65% -} -.h4,.h5,.h6,h4,h5,h6{ - margin-top:10px; - margin-bottom:10px -} -.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-size:75% -} -.h1,h1{ - font-size:36px -} -.h2,h2{ - font-size:30px -} -.h3,h3{ - font-size:24px -} -.h4,h4{ - font-size:18px -} -.h5,h5{ - font-size:14px -} -.h6,h6{ - font-size:12px -} -p{ - margin:0 0 10px -} -.lead{ - margin-bottom:20px; - font-size:16px; - font-weight:300; - line-height:1.4 -} -@media (min-width:768px){ - .lead{ - font-size:21px - } -} -.small,small{ - font-size:85% -} -.mark,mark{ - padding:.2em; - background-color:#fcf8e3 -} -.text-left{ - text-align:left -} -.text-right{ - text-align:right -} -.text-center{ - text-align:center -} -.text-justify{ - text-align:justify -} -.text-nowrap{ - white-space:nowrap -} -.text-lowercase{ - text-transform:lowercase -} -.text-uppercase{ - text-transform:uppercase -} -.text-capitalize{ - text-transform:capitalize -} -.text-muted{ - color:#777 -} -.text-primary{ - color:#337ab7 -} -a.text-primary:focus,a.text-primary:hover{ - color:#286090 -} -.text-success{ - color:#3c763d -} -a.text-success:focus,a.text-success:hover{ - color:#2b542c -} -.text-info{ - color:#31708f -} -a.text-info:focus,a.text-info:hover{ - color:#245269 -} -.text-warning{ - color:#8a6d3b -} -a.text-warning:focus,a.text-warning:hover{ - color:#66512c -} -.text-danger{ - color:#a94442 -} -a.text-danger:focus,a.text-danger:hover{ - color:#843534 -} -.bg-primary{ - color:#fff; - background-color:#337ab7 -} -a.bg-primary:focus,a.bg-primary:hover{ - background-color:#286090 -} -.bg-success{ - background-color:#dff0d8 -} -a.bg-success:focus,a.bg-success:hover{ - background-color:#c1e2b3 -} -.bg-info{ - background-color:#d9edf7 -} -a.bg-info:focus,a.bg-info:hover{ - background-color:#afd9ee -} -.bg-warning{ - background-color:#fcf8e3 -} -a.bg-warning:focus,a.bg-warning:hover{ - background-color:#f7ecb5 -} -.bg-danger{ - background-color:#f2dede -} -a.bg-danger:focus,a.bg-danger:hover{ - background-color:#e4b9b9 -} -.page-header{ - padding-bottom:9px; - margin:40px 0 20px; - border-bottom:1px solid #eee -} -ol,ul{ - margin-top:0; - margin-bottom:10px -} -ol ol,ol ul,ul ol,ul ul{ - margin-bottom:0 -} -.list-unstyled{ - padding-left:0; - list-style:none -} -.list-inline{ - padding-left:0; - margin-left:-5px; - list-style:none -} -.list-inline>li{ - display:inline-block; - padding-right:5px; - padding-left:5px -} -dl{ - margin-top:0; - margin-bottom:20px -} -dd,dt{ - line-height:1.42857143 -} -dt{ - font-weight:700 -} -dd{ - margin-left:0 -} -@media (min-width:768px){ - .dl-horizontal dt{ - float:left; - width:160px; - overflow:hidden; - clear:left; - text-align:right; - text-overflow:ellipsis; - white-space:nowrap - } - .dl-horizontal dd{ - margin-left:180px - } -} -abbr[data-original-title],abbr[title]{ - cursor:help; - border-bottom:1px dotted #777 -} -.initialism{ - font-size:90%; - text-transform:uppercase -} -blockquote{ - padding:10px 20px; - margin:0 0 20px; - font-size:17.5px; - border-left:5px solid #eee -} -blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{ - margin-bottom:0 -} -blockquote .small,blockquote footer,blockquote small{ - display:block; - font-size:80%; - line-height:1.42857143; - color:#777 -} -blockquote .small:before,blockquote footer:before,blockquote small:before{ - content:'\2014 \00A0' -} -.blockquote-reverse,blockquote.pull-right{ - padding-right:15px; - padding-left:0; - text-align:right; - border-right:5px solid #eee; - border-left:0 -} -.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{ - content:'' -} -.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{ - content:'\00A0 \2014' -} -address{ - margin-bottom:20px; - font-style:normal; - line-height:1.42857143 -} -code,kbd,pre,samp{ - font-family:Menlo,Monaco,Consolas,"Courier New",monospace -} -code{ - padding:2px 4px; - font-size:90%; - color:#c7254e; - background-color:#f9f2f4; - border-radius:4px -} -kbd{ - padding:2px 4px; - font-size:90%; - color:#fff; - background-color:#333; - border-radius:3px; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.25) -} -kbd kbd{ - padding:0; - font-size:100%; - font-weight:700; - -webkit-box-shadow:none; - box-shadow:none -} -pre{ - display:block; - padding:9.5px; - margin:0 0 10px; - font-size:13px; - line-height:1.42857143; - color:#333; - word-break:break-all; - word-wrap:break-word; - background-color:#f5f5f5; - border:1px solid #ccc; - border-radius:4px -} -pre code{ - padding:0; - font-size:inherit; - color:inherit; - white-space:pre-wrap; - background-color:transparent; - border-radius:0 -} -.pre-scrollable{ - max-height:340px; - overflow-y:scroll -} -.container{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -@media (min-width:768px){ - .container{ - width:750px - } -} -@media (min-width:992px){ - .container{ - width:970px - } -} -@media (min-width:1200px){ - .container{ - width:1170px - } -} -.container-fluid{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -.row{ - margin-right:-15px; - margin-left:-15px -} -.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - position:relative; - min-height:1px; - padding-right:15px; - padding-left:15px -} -.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - float:left -} -.col-xs-12{ - width:100% -} -.col-xs-11{ - width:91.66666667% -} -.col-xs-10{ - width:83.33333333% -} -.col-xs-9{ - width:75% -} -.col-xs-8{ - width:66.66666667% -} -.col-xs-7{ - width:58.33333333% -} -.col-xs-6{ - width:50% -} -.col-xs-5{ - width:41.66666667% -} -.col-xs-4{ - width:33.33333333% -} -.col-xs-3{ - width:25% -} -.col-xs-2{ - width:16.66666667% -} -.col-xs-1{ - width:8.33333333% -} -.col-xs-pull-12{ - right:100% -} -.col-xs-pull-11{ - right:91.66666667% -} -.col-xs-pull-10{ - right:83.33333333% -} -.col-xs-pull-9{ - right:75% -} -.col-xs-pull-8{ - right:66.66666667% -} -.col-xs-pull-7{ - right:58.33333333% -} -.col-xs-pull-6{ - right:50% -} -.col-xs-pull-5{ - right:41.66666667% -} -.col-xs-pull-4{ - right:33.33333333% -} -.col-xs-pull-3{ - right:25% -} -.col-xs-pull-2{ - right:16.66666667% -} -.col-xs-pull-1{ - right:8.33333333% -} -.col-xs-pull-0{ - right:auto -} -.col-xs-push-12{ - left:100% -} -.col-xs-push-11{ - left:91.66666667% -} -.col-xs-push-10{ - left:83.33333333% -} -.col-xs-push-9{ - left:75% -} -.col-xs-push-8{ - left:66.66666667% -} -.col-xs-push-7{ - left:58.33333333% -} -.col-xs-push-6{ - left:50% -} -.col-xs-push-5{ - left:41.66666667% -} -.col-xs-push-4{ - left:33.33333333% -} -.col-xs-push-3{ - left:25% -} -.col-xs-push-2{ - left:16.66666667% -} -.col-xs-push-1{ - left:8.33333333% -} -.col-xs-push-0{ - left:auto -} -.col-xs-offset-12{ - margin-left:100% -} -.col-xs-offset-11{ - margin-left:91.66666667% -} -.col-xs-offset-10{ - margin-left:83.33333333% -} -.col-xs-offset-9{ - margin-left:75% -} -.col-xs-offset-8{ - margin-left:66.66666667% -} -.col-xs-offset-7{ - margin-left:58.33333333% -} -.col-xs-offset-6{ - margin-left:50% -} -.col-xs-offset-5{ - margin-left:41.66666667% -} -.col-xs-offset-4{ - margin-left:33.33333333% -} -.col-xs-offset-3{ - margin-left:25% -} -.col-xs-offset-2{ - margin-left:16.66666667% -} -.col-xs-offset-1{ - margin-left:8.33333333% -} -.col-xs-offset-0{ - margin-left:0 -} -@media (min-width:768px){ - .col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{ - float:left - } - .col-sm-12{ - width:100% - } - .col-sm-11{ - width:91.66666667% - } - .col-sm-10{ - width:83.33333333% - } - .col-sm-9{ - width:75% - } - .col-sm-8{ - width:66.66666667% - } - .col-sm-7{ - width:58.33333333% - } - .col-sm-6{ - width:50% - } - .col-sm-5{ - width:41.66666667% - } - .col-sm-4{ - width:33.33333333% - } - .col-sm-3{ - width:25% - } - .col-sm-2{ - width:16.66666667% - } - .col-sm-1{ - width:8.33333333% - } - .col-sm-pull-12{ - right:100% - } - .col-sm-pull-11{ - right:91.66666667% - } - .col-sm-pull-10{ - right:83.33333333% - } - .col-sm-pull-9{ - right:75% - } - .col-sm-pull-8{ - right:66.66666667% - } - .col-sm-pull-7{ - right:58.33333333% - } - .col-sm-pull-6{ - right:50% - } - .col-sm-pull-5{ - right:41.66666667% - } - .col-sm-pull-4{ - right:33.33333333% - } - .col-sm-pull-3{ - right:25% - } - .col-sm-pull-2{ - right:16.66666667% - } - .col-sm-pull-1{ - right:8.33333333% - } - .col-sm-pull-0{ - right:auto - } - .col-sm-push-12{ - left:100% - } - .col-sm-push-11{ - left:91.66666667% - } - .col-sm-push-10{ - left:83.33333333% - } - .col-sm-push-9{ - left:75% - } - .col-sm-push-8{ - left:66.66666667% - } - .col-sm-push-7{ - left:58.33333333% - } - .col-sm-push-6{ - left:50% - } - .col-sm-push-5{ - left:41.66666667% - } - .col-sm-push-4{ - left:33.33333333% - } - .col-sm-push-3{ - left:25% - } - .col-sm-push-2{ - left:16.66666667% - } - .col-sm-push-1{ - left:8.33333333% - } - .col-sm-push-0{ - left:auto - } - .col-sm-offset-12{ - margin-left:100% - } - .col-sm-offset-11{ - margin-left:91.66666667% - } - .col-sm-offset-10{ - margin-left:83.33333333% - } - .col-sm-offset-9{ - margin-left:75% - } - .col-sm-offset-8{ - margin-left:66.66666667% - } - .col-sm-offset-7{ - margin-left:58.33333333% - } - .col-sm-offset-6{ - margin-left:50% - } - .col-sm-offset-5{ - margin-left:41.66666667% - } - .col-sm-offset-4{ - margin-left:33.33333333% - } - .col-sm-offset-3{ - margin-left:25% - } - .col-sm-offset-2{ - margin-left:16.66666667% - } - .col-sm-offset-1{ - margin-left:8.33333333% - } - .col-sm-offset-0{ - margin-left:0 - } -} -@media (min-width:992px){ - .col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{ - float:left - } - .col-md-12{ - width:100% - } - .col-md-11{ - width:91.66666667% - } - .col-md-10{ - width:83.33333333% - } - .col-md-9{ - width:75% - } - .col-md-8{ - width:66.66666667% - } - .col-md-7{ - width:58.33333333% - } - .col-md-6{ - width:50% - } - .col-md-5{ - width:41.66666667% - } - .col-md-4{ - width:33.33333333% - } - .col-md-3{ - width:25% - } - .col-md-2{ - width:16.66666667% - } - .col-md-1{ - width:8.33333333% - } - .col-md-pull-12{ - right:100% - } - .col-md-pull-11{ - right:91.66666667% - } - .col-md-pull-10{ - right:83.33333333% - } - .col-md-pull-9{ - right:75% - } - .col-md-pull-8{ - right:66.66666667% - } - .col-md-pull-7{ - right:58.33333333% - } - .col-md-pull-6{ - right:50% - } - .col-md-pull-5{ - right:41.66666667% - } - .col-md-pull-4{ - right:33.33333333% - } - .col-md-pull-3{ - right:25% - } - .col-md-pull-2{ - right:16.66666667% - } - .col-md-pull-1{ - right:8.33333333% - } - .col-md-pull-0{ - right:auto - } - .col-md-push-12{ - left:100% - } - .col-md-push-11{ - left:91.66666667% - } - .col-md-push-10{ - left:83.33333333% - } - .col-md-push-9{ - left:75% - } - .col-md-push-8{ - left:66.66666667% - } - .col-md-push-7{ - left:58.33333333% - } - .col-md-push-6{ - left:50% - } - .col-md-push-5{ - left:41.66666667% - } - .col-md-push-4{ - left:33.33333333% - } - .col-md-push-3{ - left:25% - } - .col-md-push-2{ - left:16.66666667% - } - .col-md-push-1{ - left:8.33333333% - } - .col-md-push-0{ - left:auto - } - .col-md-offset-12{ - margin-left:100% - } - .col-md-offset-11{ - margin-left:91.66666667% - } - .col-md-offset-10{ - margin-left:83.33333333% - } - .col-md-offset-9{ - margin-left:75% - } - .col-md-offset-8{ - margin-left:66.66666667% - } - .col-md-offset-7{ - margin-left:58.33333333% - } - .col-md-offset-6{ - margin-left:50% - } - .col-md-offset-5{ - margin-left:41.66666667% - } - .col-md-offset-4{ - margin-left:33.33333333% - } - .col-md-offset-3{ - margin-left:25% - } - .col-md-offset-2{ - margin-left:16.66666667% - } - .col-md-offset-1{ - margin-left:8.33333333% - } - .col-md-offset-0{ - margin-left:0 - } -} -@media (min-width:1200px){ - .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{ - float:left - } - .col-lg-12{ - width:100% - } - .col-lg-11{ - width:91.66666667% - } - .col-lg-10{ - width:83.33333333% - } - .col-lg-9{ - width:75% - } - .col-lg-8{ - width:66.66666667% - } - .col-lg-7{ - width:58.33333333% - } - .col-lg-6{ - width:50% - } - .col-lg-5{ - width:41.66666667% - } - .col-lg-4{ - width:33.33333333% - } - .col-lg-3{ - width:25% - } - .col-lg-2{ - width:16.66666667% - } - .col-lg-1{ - width:8.33333333% - } - .col-lg-pull-12{ - right:100% - } - .col-lg-pull-11{ - right:91.66666667% - } - .col-lg-pull-10{ - right:83.33333333% - } - .col-lg-pull-9{ - right:75% - } - .col-lg-pull-8{ - right:66.66666667% - } - .col-lg-pull-7{ - right:58.33333333% - } - .col-lg-pull-6{ - right:50% - } - .col-lg-pull-5{ - right:41.66666667% - } - .col-lg-pull-4{ - right:33.33333333% - } - .col-lg-pull-3{ - right:25% - } - .col-lg-pull-2{ - right:16.66666667% - } - .col-lg-pull-1{ - right:8.33333333% - } - .col-lg-pull-0{ - right:auto - } - .col-lg-push-12{ - left:100% - } - .col-lg-push-11{ - left:91.66666667% - } - .col-lg-push-10{ - left:83.33333333% - } - .col-lg-push-9{ - left:75% - } - .col-lg-push-8{ - left:66.66666667% - } - .col-lg-push-7{ - left:58.33333333% - } - .col-lg-push-6{ - left:50% - } - .col-lg-push-5{ - left:41.66666667% - } - .col-lg-push-4{ - left:33.33333333% - } - .col-lg-push-3{ - left:25% - } - .col-lg-push-2{ - left:16.66666667% - } - .col-lg-push-1{ - left:8.33333333% - } - .col-lg-push-0{ - left:auto - } - .col-lg-offset-12{ - margin-left:100% - } - .col-lg-offset-11{ - margin-left:91.66666667% - } - .col-lg-offset-10{ - margin-left:83.33333333% - } - .col-lg-offset-9{ - margin-left:75% - } - .col-lg-offset-8{ - margin-left:66.66666667% - } - .col-lg-offset-7{ - margin-left:58.33333333% - } - .col-lg-offset-6{ - margin-left:50% - } - .col-lg-offset-5{ - margin-left:41.66666667% - } - .col-lg-offset-4{ - margin-left:33.33333333% - } - .col-lg-offset-3{ - margin-left:25% - } - .col-lg-offset-2{ - margin-left:16.66666667% - } - .col-lg-offset-1{ - margin-left:8.33333333% - } - .col-lg-offset-0{ - margin-left:0 - } -} -table{ - background-color:transparent -} -caption{ - padding-top:8px; - padding-bottom:8px; - color:#777; - text-align:left -} -th{ - text-align:left -} -.table{ - width:100%; - max-width:100%; - margin-bottom:20px -} -.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{ - padding:8px; - line-height:1.42857143; - vertical-align:top; - border-top:1px solid #ddd -} -.table>thead>tr>th{ - vertical-align:bottom; - border-bottom:2px solid #ddd -} -.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{ - border-top:0 -} -.table>tbody+tbody{ - border-top:2px solid #ddd -} -.table .table{ - background-color:#fff -} -.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{ - padding:5px -} -.table-bordered{ - border:1px solid #ddd -} -.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border:1px solid #ddd -} -.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border-bottom-width:2px -} -.table-striped>tbody>tr:nth-of-type(odd){ - background-color:#f9f9f9 -} -.table-hover>tbody>tr:hover{ - background-color:#f5f5f5 -} -table col[class*=col-]{ - position:static; - display:table-column; - float:none -} -table td[class*=col-],table th[class*=col-]{ - position:static; - display:table-cell; - float:none -} -.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{ - background-color:#f5f5f5 -} -.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{ - background-color:#e8e8e8 -} -.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{ - background-color:#dff0d8 -} -.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{ - background-color:#d0e9c6 -} -.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{ - background-color:#d9edf7 -} -.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{ - background-color:#c4e3f3 -} -.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{ - background-color:#fcf8e3 -} -.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{ - background-color:#faf2cc -} -.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{ - background-color:#f2dede -} -.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{ - background-color:#ebcccc -} -.table-responsive{ - min-height:.01%; - overflow-x:auto -} -@media screen and (max-width:767px){ - .table-responsive{ - width:100%; - margin-bottom:15px; - overflow-y:hidden; - -ms-overflow-style:-ms-autohiding-scrollbar; - border:1px solid #ddd - } - .table-responsive>.table{ - margin-bottom:0 - } - .table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{ - white-space:nowrap - } - .table-responsive>.table-bordered{ - border:0 - } - .table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 - } - .table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 - } - .table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 - } -} -fieldset{ - min-width:0; - padding:0; - margin:0; - border:0 -} -legend{ - display:block; - width:100%; - padding:0; - margin-bottom:20px; - font-size:21px; - line-height:inherit; - color:#333; - border:0; - border-bottom:1px solid #e5e5e5 -} -label{ - display:inline-block; - max-width:100%; - margin-bottom:5px; - font-weight:700 -} -input[type=search]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -input[type=checkbox],input[type=radio]{ - margin:4px 0 0; - margin-top:1px\9; - line-height:normal -} -input[type=file]{ - display:block -} -input[type=range]{ - display:block; - width:100% -} -select[multiple],select[size]{ - height:auto -} -input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -output{ - display:block; - padding-top:7px; - font-size:14px; - line-height:1.42857143; - color:#555 -} -.form-control{ - display:block; - width:100%; - height:34px; - padding:6px 12px; - font-size:14px; - line-height:1.42857143; - color:#555; - background-color:#fff; - background-image:none; - border:1px solid #ccc; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - -webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; - -o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s; - transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s -} -.form-control:focus{ - border-color:#66afe9; - outline:0; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6) -} -.form-control::-moz-placeholder{ - color:#999; - opacity:1 -} -.form-control:-ms-input-placeholder{ - color:#999 -} -.form-control::-webkit-input-placeholder{ - color:#999 -} -.form-control::-ms-expand{ - background-color:transparent; - border:0 -} -.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{ - background-color:#eee; - opacity:1 -} -.form-control[disabled],fieldset[disabled] .form-control{ - cursor:not-allowed -} -textarea.form-control{ - height:auto -} -input[type=search]{ - -webkit-appearance:none -} -@media screen and (-webkit-min-device-pixel-ratio:0){ - input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{ - line-height:34px - } - .input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{ - line-height:30px - } - .input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{ - line-height:46px - } -} -.form-group{ - margin-bottom:15px -} -.checkbox,.radio{ - position:relative; - display:block; - margin-top:10px; - margin-bottom:10px -} -.checkbox label,.radio label{ - min-height:20px; - padding-left:20px; - margin-bottom:0; - font-weight:400; - cursor:pointer -} -.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{ - position:absolute; - margin-top:4px\9; - margin-left:-20px -} -.checkbox+.checkbox,.radio+.radio{ - margin-top:-5px -} -.checkbox-inline,.radio-inline{ - position:relative; - display:inline-block; - padding-left:20px; - margin-bottom:0; - font-weight:400; - vertical-align:middle; - cursor:pointer -} -.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{ - margin-top:0; - margin-left:10px -} -fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{ - cursor:not-allowed -} -.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{ - cursor:not-allowed -} -.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{ - cursor:not-allowed -} -.form-control-static{ - min-height:34px; - padding-top:7px; - padding-bottom:7px; - margin-bottom:0 -} -.form-control-static.input-lg,.form-control-static.input-sm{ - padding-right:0; - padding-left:0 -} -.input-sm{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-sm{ - height:30px; - line-height:30px -} -select[multiple].input-sm,textarea.input-sm{ - height:auto -} -.form-group-sm .form-control{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.form-group-sm select.form-control{ - height:30px; - line-height:30px -} -.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{ - height:auto -} -.form-group-sm .form-control-static{ - height:30px; - min-height:32px; - padding:6px 10px; - font-size:12px; - line-height:1.5 -} -.input-lg{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-lg{ - height:46px; - line-height:46px -} -select[multiple].input-lg,textarea.input-lg{ - height:auto -} -.form-group-lg .form-control{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.form-group-lg select.form-control{ - height:46px; - line-height:46px -} -.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{ - height:auto -} -.form-group-lg .form-control-static{ - height:46px; - min-height:38px; - padding:11px 16px; - font-size:18px; - line-height:1.3333333 -} -.has-feedback{ - position:relative -} -.has-feedback .form-control{ - padding-right:42.5px -} -.form-control-feedback{ - position:absolute; - top:0; - right:0; - z-index:2; - display:block; - width:34px; - height:34px; - line-height:34px; - text-align:center; - pointer-events:none -} -.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{ - width:46px; - height:46px; - line-height:46px -} -.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{ - width:30px; - height:30px; - line-height:30px -} -.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{ - color:#3c763d -} -.has-success .form-control{ - border-color:#3c763d; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-success .form-control:focus{ - border-color:#2b542c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168 -} -.has-success .input-group-addon{ - color:#3c763d; - background-color:#dff0d8; - border-color:#3c763d -} -.has-success .form-control-feedback{ - color:#3c763d -} -.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{ - color:#8a6d3b -} -.has-warning .form-control{ - border-color:#8a6d3b; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-warning .form-control:focus{ - border-color:#66512c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b -} -.has-warning .input-group-addon{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#8a6d3b -} -.has-warning .form-control-feedback{ - color:#8a6d3b -} -.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{ - color:#a94442 -} -.has-error .form-control{ - border-color:#a94442; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-error .form-control:focus{ - border-color:#843534; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483 -} -.has-error .input-group-addon{ - color:#a94442; - background-color:#f2dede; - border-color:#a94442 -} -.has-error .form-control-feedback{ - color:#a94442 -} -.has-feedback label~.form-control-feedback{ - top:25px -} -.has-feedback label.sr-only~.form-control-feedback{ - top:0 -} -.help-block{ - display:block; - margin-top:5px; - margin-bottom:10px; - color:#737373 -} -@media (min-width:768px){ - .form-inline .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .form-inline .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .form-inline .form-control-static{ - display:inline-block - } - .form-inline .input-group{ - display:inline-table; - vertical-align:middle - } - .form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{ - width:auto - } - .form-inline .input-group>.form-control{ - width:100% - } - .form-inline .control-label{ - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox,.form-inline .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox label,.form-inline .radio label{ - padding-left:0 - } - .form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .form-inline .has-feedback .form-control-feedback{ - top:0 - } -} -.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{ - padding-top:7px; - margin-top:0; - margin-bottom:0 -} -.form-horizontal .checkbox,.form-horizontal .radio{ - min-height:27px -} -.form-horizontal .form-group{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .form-horizontal .control-label{ - padding-top:7px; - margin-bottom:0; - text-align:right - } -} -.form-horizontal .has-feedback .form-control-feedback{ - right:15px -} -@media (min-width:768px){ - .form-horizontal .form-group-lg .control-label{ - padding-top:11px; - font-size:18px - } -} -@media (min-width:768px){ - .form-horizontal .form-group-sm .control-label{ - padding-top:6px; - font-size:12px - } -} -.btn{ - display:inline-block; - padding:6px 12px; - margin-bottom:0; - font-size:14px; - font-weight:400; - line-height:1.42857143; - text-align:center; - white-space:nowrap; - vertical-align:middle; - -ms-touch-action:manipulation; - touch-action:manipulation; - cursor:pointer; - -webkit-user-select:none; - -moz-user-select:none; - -ms-user-select:none; - user-select:none; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -.btn.focus,.btn:focus,.btn:hover{ - color:#333; - text-decoration:none -} -.btn.active,.btn:active{ - background-image:none; - outline:0; - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn.disabled,.btn[disabled],fieldset[disabled] .btn{ - cursor:not-allowed; - filter:alpha(opacity=65); - -webkit-box-shadow:none; - box-shadow:none; - opacity:.65 -} -a.btn.disabled,fieldset[disabled] a.btn{ - pointer-events:none -} -.btn-default{ - color:#333; - background-color:#fff; - border-color:#ccc -} -.btn-default.focus,.btn-default:focus{ - color:#333; - background-color:#e6e6e6; - border-color:#8c8c8c -} -.btn-default:hover{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{ - color:#333; - background-color:#d4d4d4; - border-color:#8c8c8c -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - background-image:none -} -.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{ - background-color:#fff; - border-color:#ccc -} -.btn-default .badge{ - color:#fff; - background-color:#333 -} -.btn-primary{ - color:#fff; - background-color:#03b703; - border-color:#009100 -} -.btn-primary.focus,.btn-primary:focus{ - color:#fff; - background-color:#067906; - border-color:#009100 -} -.btn-primary:hover{ - color:#fff; - background-color:#067906; - border-color:#009100 -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - color:#fff; - background-color:#067906; - border-color:#009100 -} -.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{ - color:#fff; - background-color:#067906; - border-color:#009100 -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - background-image:none -} -.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{ - background-color:#067906; - border-color:#009100 -} -.btn-primary .badge{ - color:#337ab7; - background-color:#fff -} -.btn-success{ - color:#fff; - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success.focus,.btn-success:focus{ - color:#fff; - background-color:#449d44; - border-color:#255625 -} -.btn-success:hover{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{ - color:#fff; - background-color:#398439; - border-color:#255625 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - background-image:none -} -.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{ - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success .badge{ - color:#5cb85c; - background-color:#fff -} -.btn-info{ - color:#fff; - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info.focus,.btn-info:focus{ - color:#fff; - background-color:#31b0d5; - border-color:#1b6d85 -} -.btn-info:hover{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{ - color:#fff; - background-color:#269abc; - border-color:#1b6d85 -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - background-image:none -} -.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{ - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info .badge{ - color:#5bc0de; - background-color:#fff -} -.btn-warning{ - color:#fff; - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning.focus,.btn-warning:focus{ - color:#fff; - background-color:#ec971f; - border-color:#985f0d -} -.btn-warning:hover{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{ - color:#fff; - background-color:#d58512; - border-color:#985f0d -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - background-image:none -} -.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{ - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning .badge{ - color:#f0ad4e; - background-color:#fff -} -.btn-danger{ - color:#fff; - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger.focus,.btn-danger:focus{ - color:#fff; - background-color:#c9302c; - border-color:#761c19 -} -.btn-danger:hover{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{ - color:#fff; - background-color:#ac2925; - border-color:#761c19 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - background-image:none -} -.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{ - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger .badge{ - color:#d9534f; - background-color:#fff -} -.btn-link{ - font-weight:400; - color:#337ab7; - border-radius:0 -} -.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{ - background-color:transparent; - -webkit-box-shadow:none; - box-shadow:none -} -.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{ - border-color:transparent -} -.btn-link:focus,.btn-link:hover{ - color:#23527c; - text-decoration:underline; - background-color:transparent -} -.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{ - color:#777; - text-decoration:none -} -.btn-group-lg>.btn,.btn-lg{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.btn-group-sm>.btn,.btn-sm{ - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-group-xs>.btn,.btn-xs{ - padding:1px 5px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-block{ - display:block; - width:100% -} -.btn-block+.btn-block{ - margin-top:5px -} -input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{ - width:100% -} -.fade{ - opacity:0; - -webkit-transition:opacity .15s linear; - -o-transition:opacity .15s linear; - transition:opacity .15s linear -} -.fade.in{ - opacity:1 -} -.collapse{ - display:none -} -.collapse.in{ - display:block -} -tr.collapse.in{ - display:table-row -} -tbody.collapse.in{ - display:table-row-group -} -.collapsing{ - position:relative; - height:0; - overflow:hidden; - -webkit-transition-timing-function:ease; - -o-transition-timing-function:ease; - transition-timing-function:ease; - -webkit-transition-duration:.35s; - -o-transition-duration:.35s; - transition-duration:.35s; - -webkit-transition-property:height,visibility; - -o-transition-property:height,visibility; - transition-property:height,visibility -} -.caret{ - display:inline-block; - width:0; - height:0; - margin-left:2px; - vertical-align:middle; - border-top:4px dashed; - border-top:4px solid\9; - border-right:4px solid transparent; - border-left:4px solid transparent -} -.dropdown,.dropup{ - position:relative -} -.dropdown-toggle:focus{ - outline:0 -} -.dropdown-menu{ - position:absolute; - top:100%; - left:0; - z-index:1000; - display:none; - float:left; - min-width:160px; - padding:5px 0; - margin:2px 0 0; - font-size:14px; - text-align:left; - list-style:none; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.15); - border-radius:4px; - -webkit-box-shadow:0 6px 12px rgba(0,0,0,.175); - box-shadow:0 6px 12px rgba(0,0,0,.175) -} -.dropdown-menu.pull-right{ - right:0; - left:auto -} -.dropdown-menu .divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.dropdown-menu>li>a{ - display:block; - padding:3px 20px; - clear:both; - font-weight:400; - line-height:1.42857143; - color:#333; - white-space:nowrap -} -.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{ - color:#262626; - text-decoration:none; - background-color:#f5f5f5 -} -.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{ - color:#fff; - text-decoration:none; - background-color:#337ab7; - outline:0 -} -.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - color:#777 -} -.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - text-decoration:none; - cursor:not-allowed; - background-color:transparent; - background-image:none; - filter:progid:DXImageTransform.Microsoft.gradient(enabled=false) -} -.open>.dropdown-menu{ - display:block -} -.open>a{ - outline:0 -} -.dropdown-menu-right{ - right:0; - left:auto -} -.dropdown-menu-left{ - right:auto; - left:0 -} -.dropdown-header{ - display:block; - padding:3px 20px; - font-size:12px; - line-height:1.42857143; - color:#777; - white-space:nowrap -} -.dropdown-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:990 -} -.pull-right>.dropdown-menu{ - right:0; - left:auto -} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{ - content:""; - border-top:0; - border-bottom:4px dashed; - border-bottom:4px solid\9 -} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{ - top:auto; - bottom:100%; - margin-bottom:2px -} -@media (min-width:768px){ - .navbar-right .dropdown-menu{ - right:0; - left:auto - } - .navbar-right .dropdown-menu-left{ - right:auto; - left:0 - } -} -.btn-group,.btn-group-vertical{ - position:relative; - display:inline-block; - vertical-align:middle -} -.btn-group-vertical>.btn,.btn-group>.btn{ - position:relative; - float:left -} -.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{ - z-index:2 -} -.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{ - margin-left:-1px -} -.btn-toolbar{ - margin-left:-5px -} -.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{ - float:left -} -.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{ - margin-left:5px -} -.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){ - border-radius:0 -} -.btn-group>.btn:first-child{ - margin-left:0 -} -.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group>.btn-group{ - float:left -} -.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{ - outline:0 -} -.btn-group>.btn+.dropdown-toggle{ - padding-right:8px; - padding-left:8px -} -.btn-group>.btn-lg+.dropdown-toggle{ - padding-right:12px; - padding-left:12px -} -.btn-group.open .dropdown-toggle{ - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn-group.open .dropdown-toggle.btn-link{ - -webkit-box-shadow:none; - box-shadow:none -} -.btn .caret{ - margin-left:0 -} -.btn-lg .caret{ - border-width:5px 5px 0; - border-bottom-width:0 -} -.dropup .btn-lg .caret{ - border-width:0 5px 5px -} -.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{ - display:block; - float:none; - width:100%; - max-width:100% -} -.btn-group-vertical>.btn-group>.btn{ - float:none -} -.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{ - margin-top:-1px; - margin-left:0 -} -.btn-group-vertical>.btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.btn-group-vertical>.btn:first-child:not(:last-child){ - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn:last-child:not(:first-child){ - border-top-left-radius:0; - border-top-right-radius:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.btn-group-justified{ - display:table; - width:100%; - table-layout:fixed; - border-collapse:separate -} -.btn-group-justified>.btn,.btn-group-justified>.btn-group{ - display:table-cell; - float:none; - width:1% -} -.btn-group-justified>.btn-group .btn{ - width:100% -} -.btn-group-justified>.btn-group .dropdown-menu{ - left:auto -} -[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{ - position:absolute; - clip:rect(0,0,0,0); - pointer-events:none -} -.input-group{ - position:relative; - display:table; - border-collapse:separate -} -.input-group[class*=col-]{ - float:none; - padding-right:0; - padding-left:0 -} -.input-group .form-control{ - position:relative; - z-index:2; - float:left; - width:100%; - margin-bottom:0 -} -.input-group .form-control:focus{ - z-index:3 -} -.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{ - height:46px; - line-height:46px -} -select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{ - height:auto -} -.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{ - height:30px; - line-height:30px -} -select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{ - height:auto -} -.input-group .form-control,.input-group-addon,.input-group-btn{ - display:table-cell -} -.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.input-group-addon,.input-group-btn{ - width:1%; - white-space:nowrap; - vertical-align:middle -} -.input-group-addon{ - padding:6px 12px; - font-size:14px; - font-weight:400; - line-height:1; - color:#555; - text-align:center; - background-color:#eee; - border:1px solid #ccc; - border-radius:4px -} -.input-group-addon.input-sm{ - padding:5px 10px; - font-size:12px; - border-radius:3px -} -.input-group-addon.input-lg{ - padding:10px 16px; - font-size:18px; - border-radius:6px -} -.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{ - margin-top:0 -} -.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.input-group-addon:first-child{ - border-right:0 -} -.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.input-group-addon:last-child{ - border-left:0 -} -.input-group-btn{ - position:relative; - font-size:0; - white-space:nowrap -} -.input-group-btn>.btn{ - position:relative -} -.input-group-btn>.btn+.btn{ - margin-left:-1px -} -.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{ - z-index:2 -} -.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{ - margin-right:-1px -} -.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{ - z-index:2; - margin-left:-1px -} -.nav{ - padding-left:0; - margin-bottom:0; - list-style:none -} -.nav>li{ - position:relative; - display:block -} -.nav>li>a{ - position:relative; - display:block; - padding:10px 15px -} -.nav>li>a:focus,.nav>li>a:hover{ - text-decoration:none; - background-color:#eee -} -.nav>li.disabled>a{ - color:#777 -} -.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{ - color:#777; - text-decoration:none; - cursor:not-allowed; - background-color:transparent -} -.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{ - background-color:#eee; - border-color:#337ab7 -} -.nav .nav-divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.nav>li>a>img{ - max-width:none -} -.nav-tabs{ - border-bottom:1px solid #ddd -} -.nav-tabs>li{ - float:left; - margin-bottom:-1px -} -.nav-tabs>li>a{ - margin-right:2px; - line-height:1.42857143; - border:1px solid transparent; - border-radius:4px 4px 0 0 -} -.nav-tabs>li>a:hover{ - border-color:#eee #eee #ddd -} -.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{ - color:#555; - cursor:default; - background-color:#fff; - border:1px solid #ddd; - border-bottom-color:transparent -} -.nav-tabs.nav-justified{ - width:100%; - border-bottom:0 -} -.nav-tabs.nav-justified>li{ - float:none -} -.nav-tabs.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-tabs.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li{ - display:table-cell; - width:1% - } - .nav-tabs.nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs.nav-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.nav-pills>li{ - float:left -} -.nav-pills>li>a{ - border-radius:4px -} -.nav-pills>li+li{ - margin-left:2px -} -.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{ - color:#fff; - background-color:#337ab7 -} -.nav-stacked>li{ - float:none -} -.nav-stacked>li+li{ - margin-top:2px; - margin-left:0 -} -.nav-justified{ - width:100% -} -.nav-justified>li{ - float:none -} -.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-justified>li{ - display:table-cell; - width:1% - } - .nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs-justified{ - border-bottom:0 -} -.nav-tabs-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.tab-content>.tab-pane{ - display:none -} -.tab-content>.active{ - display:block -} -.nav-tabs .dropdown-menu{ - margin-top:-1px; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar{ - position:relative; - min-height:50px; - margin-bottom:20px; - border:1px solid transparent -} -@media (min-width:768px){ - .navbar{ - border-radius:4px - } -} -@media (min-width:768px){ - .navbar-header{ - float:left - } -} -.navbar-collapse{ - padding-right:15px; - padding-left:15px; - overflow-x:visible; - -webkit-overflow-scrolling:touch; - border-top:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1) -} -.navbar-collapse.in{ - overflow-y:auto -} -@media (min-width:768px){ - .navbar-collapse{ - width:auto; - border-top:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-collapse.collapse{ - display:block!important; - height:auto!important; - padding-bottom:0; - overflow:visible!important - } - .navbar-collapse.in{ - overflow-y:visible - } - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{ - padding-right:0; - padding-left:0 - } -} -.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:340px -} -@media (max-device-width:480px) and (orientation:landscape){ - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:200px - } -} -.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:0; - margin-left:0 - } -} -.navbar-static-top{ - z-index:1000; - border-width:0 0 1px -} -@media (min-width:768px){ - .navbar-static-top{ - border-radius:0 - } -} -.navbar-fixed-bottom,.navbar-fixed-top{ - position:fixed; - right:0; - left:0; - z-index:1030 -} -@media (min-width:768px){ - .navbar-fixed-bottom,.navbar-fixed-top{ - border-radius:0 - } -} -.navbar-fixed-top{ - top:0; - border-width:0 0 1px -} -.navbar-fixed-bottom{ - bottom:0; - margin-bottom:0; - border-width:1px 0 0 -} -.navbar-brand{ - float:left; - height:50px; - padding:15px 15px; - font-size:18px; - line-height:20px -} -.navbar-brand:focus,.navbar-brand:hover{ - text-decoration:none -} -.navbar-brand>img{ - display:block -} -@media (min-width:768px){ - .navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{ - margin-left:-15px - } -} -.navbar-toggle{ - position:relative; - float:right; - padding:9px 10px; - margin-top:8px; - margin-right:15px; - margin-bottom:8px; - background-color:transparent; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.navbar-toggle:focus{ - outline:0 -} -.navbar-toggle .icon-bar{ - display:block; - width:22px; - height:2px; - border-radius:1px -} -.navbar-toggle .icon-bar+.icon-bar{ - margin-top:4px -} -@media (min-width:768px){ - .navbar-toggle{ - display:none - } -} -.navbar-nav{ - margin:7.5px -15px -} -.navbar-nav>li>a{ - padding-top:10px; - padding-bottom:10px; - line-height:20px -} -@media (max-width:767px){ - .navbar-nav .open .dropdown-menu{ - position:static; - float:none; - width:auto; - margin-top:0; - background-color:transparent; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{ - padding:5px 15px 5px 25px - } - .navbar-nav .open .dropdown-menu>li>a{ - line-height:20px - } - .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{ - background-image:none - } -} -@media (min-width:768px){ - .navbar-nav{ - float:left; - margin:0 - } - .navbar-nav>li{ - float:left - } - .navbar-nav>li>a{ - padding-top:15px; - padding-bottom:15px - } -} -.navbar-form{ - padding:10px 15px; - margin-top:8px; - margin-right:-15px; - margin-bottom:8px; - margin-left:-15px; - border-top:1px solid transparent; - border-bottom:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1) -} -@media (min-width:768px){ - .navbar-form .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .navbar-form .form-control-static{ - display:inline-block - } - .navbar-form .input-group{ - display:inline-table; - vertical-align:middle - } - .navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{ - width:auto - } - .navbar-form .input-group>.form-control{ - width:100% - } - .navbar-form .control-label{ - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox,.navbar-form .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox label,.navbar-form .radio label{ - padding-left:0 - } - .navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .navbar-form .has-feedback .form-control-feedback{ - top:0 - } -} -@media (max-width:767px){ - .navbar-form .form-group{ - margin-bottom:5px - } - .navbar-form .form-group:last-child{ - margin-bottom:0 - } -} -@media (min-width:768px){ - .navbar-form{ - width:auto; - padding-top:0; - padding-bottom:0; - margin-right:0; - margin-left:0; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } -} -.navbar-nav>li>.dropdown-menu{ - margin-top:0; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{ - margin-bottom:0; - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.navbar-btn{ - margin-top:8px; - margin-bottom:8px -} -.navbar-btn.btn-sm{ - margin-top:10px; - margin-bottom:10px -} -.navbar-btn.btn-xs{ - margin-top:14px; - margin-bottom:14px -} -.navbar-text{ - margin-top:15px; - margin-bottom:15px -} -@media (min-width:768px){ - .navbar-text{ - float:left; - margin-right:15px; - margin-left:15px - } -} -@media (min-width:768px){ - .navbar-left{ - float:left!important - } - .navbar-right{ - float:right!important; - margin-right:-15px - } - .navbar-right~.navbar-right{ - margin-right:0 - } -} -.navbar-default{ - background-color:#f8f8f8; - border-color:#e7e7e7 -} -.navbar-default .navbar-brand{ - color:#777 -} -.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{ - color:#5e5e5e; - background-color:transparent -} -.navbar-default .navbar-text{ - color:#777 -} -.navbar-default .navbar-nav>li>a{ - color:#777 -} -.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{ - color:#333; - background-color:transparent -} -.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{ - color:#555; - background-color:#e7e7e7 -} -.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{ - color:#ccc; - background-color:transparent -} -.navbar-default .navbar-toggle{ - border-color:#ddd -} -.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{ - background-color:#ddd -} -.navbar-default .navbar-toggle .icon-bar{ - background-color:#888 -} -.navbar-default .navbar-collapse,.navbar-default .navbar-form{ - border-color:#e7e7e7 -} -.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{ - color:#555; - background-color:#e7e7e7 -} -@media (max-width:767px){ - .navbar-default .navbar-nav .open .dropdown-menu>li>a{ - color:#777 - } - .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#333; - background-color:transparent - } - .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#555; - background-color:#e7e7e7 - } - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#ccc; - background-color:transparent - } -} -.navbar-default .navbar-link{ - color:#777 -} -.navbar-default .navbar-link:hover{ - color:#333 -} -.navbar-default .btn-link{ - color:#777 -} -.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{ - color:#333 -} -.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{ - color:#ccc -} -.navbar-inverse{ - background-color:#222; - border-color:#080808 -} -.navbar-inverse .navbar-brand{ - color:#9d9d9d -} -.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-text{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{ - color:#fff; - background-color:#080808 -} -.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{ - color:#444; - background-color:transparent -} -.navbar-inverse .navbar-toggle{ - border-color:#333 -} -.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{ - background-color:#333 -} -.navbar-inverse .navbar-toggle .icon-bar{ - background-color:#fff -} -.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{ - border-color:#101010 -} -.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{ - color:#fff; - background-color:#080808 -} -@media (max-width:767px){ - .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{ - border-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider{ - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{ - color:#9d9d9d - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#fff; - background-color:transparent - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#fff; - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#444; - background-color:transparent - } -} -.navbar-inverse .navbar-link{ - color:#9d9d9d -} -.navbar-inverse .navbar-link:hover{ - color:#fff -} -.navbar-inverse .btn-link{ - color:#9d9d9d -} -.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{ - color:#fff -} -.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{ - color:#444 -} -.breadcrumb{ - padding:8px 15px; - margin-bottom:20px; - list-style:none; - background-color:#f5f5f5; - border-radius:4px -} -.breadcrumb>li{ - display:inline-block -} -.breadcrumb>li+li:before{ - padding:0 5px; - color:#ccc; - content:"/\00a0" -} -.breadcrumb>.active{ - color:#777 -} -.pagination{ - display:inline-block; - padding-left:0; - margin:20px 0; - border-radius:4px -} -.pagination>li{ - display:inline -} -.pagination>li>a,.pagination>li>span{ - position:relative; - float:left; - padding:6px 12px; - margin-left:-1px; - line-height:1.42857143; - color:#337ab7; - text-decoration:none; - background-color:#fff; - border:1px solid #ddd -} -.pagination>li:first-child>a,.pagination>li:first-child>span{ - margin-left:0; - border-top-left-radius:4px; - border-bottom-left-radius:4px -} -.pagination>li:last-child>a,.pagination>li:last-child>span{ - border-top-right-radius:4px; - border-bottom-right-radius:4px -} -.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{ - z-index:2; - color:#23527c; - background-color:#eee; - border-color:#ddd -} -.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{ - z-index:3; - color:#fff; - cursor:default; - background-color:#337ab7; - border-color:#337ab7 -} -.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{ - color:#777; - cursor:not-allowed; - background-color:#fff; - border-color:#ddd -} -.pagination-lg>li>a,.pagination-lg>li>span{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333 -} -.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{ - border-top-left-radius:6px; - border-bottom-left-radius:6px -} -.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{ - border-top-right-radius:6px; - border-bottom-right-radius:6px -} -.pagination-sm>li>a,.pagination-sm>li>span{ - padding:5px 10px; - font-size:12px; - line-height:1.5 -} -.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{ - border-top-left-radius:3px; - border-bottom-left-radius:3px -} -.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{ - border-top-right-radius:3px; - border-bottom-right-radius:3px -} -.pager{ - padding-left:0; - margin:20px 0; - text-align:center; - list-style:none -} -.pager li{ - display:inline -} -.pager li>a,.pager li>span{ - display:inline-block; - padding:5px 14px; - background-color:#fff; - border:1px solid #ddd; - border-radius:15px -} -.pager li>a:focus,.pager li>a:hover{ - text-decoration:none; - background-color:#eee -} -.pager .next>a,.pager .next>span{ - float:right -} -.pager .previous>a,.pager .previous>span{ - float:left -} -.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{ - color:#777; - cursor:not-allowed; - background-color:#fff -} -.label{ - display:inline; - padding:.2em .6em .3em; - font-size:75%; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:baseline; - border-radius:.25em -} -a.label:focus,a.label:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.label:empty{ - display:none -} -.btn .label{ - position:relative; - top:-1px -} -.label-default{ - background-color:#777 -} -.label-default[href]:focus,.label-default[href]:hover{ - background-color:#5e5e5e -} -.label-primary{ - background-color:#337ab7 -} -.label-primary[href]:focus,.label-primary[href]:hover{ - background-color:#286090 -} -.label-success{ - background-color:#5cb85c -} -.label-success[href]:focus,.label-success[href]:hover{ - background-color:#449d44 -} -.label-info{ - background-color:#5bc0de -} -.label-info[href]:focus,.label-info[href]:hover{ - background-color:#31b0d5 -} -.label-warning{ - background-color:#f0ad4e -} -.label-warning[href]:focus,.label-warning[href]:hover{ - background-color:#ec971f -} -.label-danger{ - background-color:#d9534f -} -.label-danger[href]:focus,.label-danger[href]:hover{ - background-color:#c9302c -} -.badge{ - display:inline-block; - min-width:10px; - padding:3px 7px; - font-size:12px; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:middle; - background-color:#777; - border-radius:10px -} -.badge:empty{ - display:none -} -.btn .badge{ - position:relative; - top:-1px -} -.btn-group-xs>.btn .badge,.btn-xs .badge{ - top:0; - padding:1px 5px -} -a.badge:focus,a.badge:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.list-group-item.active>.badge,.nav-pills>.active>a>.badge{ - color:#337ab7; - background-color:#fff -} -.list-group-item>.badge{ - float:right -} -.list-group-item>.badge+.badge{ - margin-right:5px -} -.nav-pills>li>a>.badge{ - margin-left:3px -} -.jumbotron{ - padding-top:30px; - padding-bottom:30px; - margin-bottom:30px; - color:inherit; - background-color:#eee -} -.jumbotron .h1,.jumbotron h1{ - color:inherit -} -.jumbotron p{ - margin-bottom:15px; - font-size:21px; - font-weight:200 -} -.jumbotron>hr{ - border-top-color:#d5d5d5 -} -.container .jumbotron,.container-fluid .jumbotron{ - padding-right:15px; - padding-left:15px; - border-radius:6px -} -.jumbotron .container{ - max-width:100% -} -@media screen and (min-width:768px){ - .jumbotron{ - padding-top:48px; - padding-bottom:48px - } - .container .jumbotron,.container-fluid .jumbotron{ - padding-right:60px; - padding-left:60px - } - .jumbotron .h1,.jumbotron h1{ - font-size:63px - } -} -.thumbnail{ - display:block; - padding:4px; - margin-bottom:20px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:border .2s ease-in-out; - -o-transition:border .2s ease-in-out; - transition:border .2s ease-in-out -} -.thumbnail a>img,.thumbnail>img{ - margin-right:auto; - margin-left:auto -} -a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{ - border-color:#337ab7 -} -.thumbnail .caption{ - padding:9px; - color:#333 -} -.alert{ - padding:15px; - margin-bottom:20px; - border:1px solid transparent; - border-radius:4px -} -.alert h4{ - margin-top:0; - color:inherit -} -.alert .alert-link{ - font-weight:700 -} -.alert>p,.alert>ul{ - margin-bottom:0 -} -.alert>p+p{ - margin-top:5px -} -.alert-dismissable,.alert-dismissible{ - padding-right:35px -} -.alert-dismissable .close,.alert-dismissible .close{ - position:relative; - top:-2px; - right:-21px; - color:inherit -} -.alert-success{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.alert-success hr{ - border-top-color:#c9e2b3 -} -.alert-success .alert-link{ - color:#2b542c -} -.alert-info{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.alert-info hr{ - border-top-color:#a6e1ec -} -.alert-info .alert-link{ - color:#245269 -} -.alert-warning{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.alert-warning hr{ - border-top-color:#f7e1b5 -} -.alert-warning .alert-link{ - color:#66512c -} -.alert-danger{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.alert-danger hr{ - border-top-color:#e4b9c0 -} -.alert-danger .alert-link{ - color:#843534 -} -@-webkit-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@-o-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -.progress{ - height:20px; - margin-bottom:20px; - overflow:hidden; - background-color:#f5f5f5; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1); - box-shadow:inset 0 1px 2px rgba(0,0,0,.1) -} -.progress-bar{ - float:left; - width:0; - height:100%; - font-size:12px; - line-height:20px; - color:#fff; - text-align:center; - background-color:#337ab7; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - -webkit-transition:width .6s ease; - -o-transition:width .6s ease; - transition:width .6s ease -} -.progress-bar-striped,.progress-striped .progress-bar{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - -webkit-background-size:40px 40px; - background-size:40px 40px -} -.progress-bar.active,.progress.active .progress-bar{ - -webkit-animation:progress-bar-stripes 2s linear infinite; - -o-animation:progress-bar-stripes 2s linear infinite; - animation:progress-bar-stripes 2s linear infinite -} -.progress-bar-success{ - background-color:#5cb85c -} -.progress-striped .progress-bar-success{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-info{ - background-color:#5bc0de -} -.progress-striped .progress-bar-info{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-warning{ - background-color:#f0ad4e -} -.progress-striped .progress-bar-warning{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-danger{ - background-color:#d9534f -} -.progress-striped .progress-bar-danger{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.media{ - margin-top:15px -} -.media:first-child{ - margin-top:0 -} -.media,.media-body{ - overflow:hidden; - zoom:1 -} -.media-body{ - width:10000px -} -.media-object{ - display:block -} -.media-object.img-thumbnail{ - max-width:none -} -.media-right,.media>.pull-right{ - padding-left:10px -} -.media-left,.media>.pull-left{ - padding-right:10px -} -.media-body,.media-left,.media-right{ - display:table-cell; - vertical-align:top -} -.media-middle{ - vertical-align:middle -} -.media-bottom{ - vertical-align:bottom -} -.media-heading{ - margin-top:0; - margin-bottom:5px -} -.media-list{ - padding-left:0; - list-style:none -} -.list-group{ - padding-left:0; - margin-bottom:20px -} -.list-group-item{ - position:relative; - display:block; - padding:10px 15px; - margin-bottom:-1px; - background-color:#fff; - border:1px solid #ddd -} -.list-group-item:first-child{ - border-top-left-radius:4px; - border-top-right-radius:4px -} -.list-group-item:last-child{ - margin-bottom:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -a.list-group-item,button.list-group-item{ - color:#555 -} -a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{ - color:#333 -} -a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{ - color:#555; - text-decoration:none; - background-color:#f5f5f5 -} -button.list-group-item{ - width:100%; - text-align:left -} -.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{ - color:#777; - cursor:not-allowed; - background-color:#eee -} -.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{ - color:inherit -} -.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{ - color:#777 -} -.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{ - z-index:2; - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{ - color:inherit -} -.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{ - color:#c7ddef -} -.list-group-item-success{ - color:#3c763d; - background-color:#dff0d8 -} -a.list-group-item-success,button.list-group-item-success{ - color:#3c763d -} -a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{ - color:inherit -} -a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{ - color:#3c763d; - background-color:#d0e9c6 -} -a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{ - color:#fff; - background-color:#3c763d; - border-color:#3c763d -} -.list-group-item-info{ - color:#31708f; - background-color:#d9edf7 -} -a.list-group-item-info,button.list-group-item-info{ - color:#31708f -} -a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{ - color:inherit -} -a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{ - color:#31708f; - background-color:#c4e3f3 -} -a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{ - color:#fff; - background-color:#31708f; - border-color:#31708f -} -.list-group-item-warning{ - color:#8a6d3b; - background-color:#fcf8e3 -} -a.list-group-item-warning,button.list-group-item-warning{ - color:#8a6d3b -} -a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{ - color:inherit -} -a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{ - color:#8a6d3b; - background-color:#faf2cc -} -a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{ - color:#fff; - background-color:#8a6d3b; - border-color:#8a6d3b -} -.list-group-item-danger{ - color:#a94442; - background-color:#f2dede -} -a.list-group-item-danger,button.list-group-item-danger{ - color:#a94442 -} -a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{ - color:inherit -} -a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{ - color:#a94442; - background-color:#ebcccc -} -a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{ - color:#fff; - background-color:#a94442; - border-color:#a94442 -} -.list-group-item-heading{ - margin-top:0; - margin-bottom:5px -} -.list-group-item-text{ - margin-bottom:0; - line-height:1.3 -} -.panel{ - margin-bottom:20px; - background-color:#fff; - border:1px solid transparent; - border-radius:4px; - -webkit-box-shadow:0 1px 1px rgba(0,0,0,.05); - box-shadow:0 1px 1px rgba(0,0,0,.05) -} -.panel-body{ - padding:15px -} -.panel-heading{ - padding:10px 15px; - border-bottom:1px solid transparent; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel-heading>.dropdown .dropdown-toggle{ - color:inherit -} -.panel-title{ - margin-top:0; - margin-bottom:0; - font-size:16px; - color:inherit -} -.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{ - color:inherit -} -.panel-footer{ - padding:10px 15px; - background-color:#f5f5f5; - border-top:1px solid #ddd; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.list-group,.panel>.panel-collapse>.list-group{ - margin-bottom:0 -} -.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{ - border-width:1px 0; - border-radius:0 -} -.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{ - border-top:0; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{ - border-bottom:0; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.panel-heading+.list-group .list-group-item:first-child{ - border-top-width:0 -} -.list-group+.panel-footer{ - border-top-width:0 -} -.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{ - margin-bottom:0 -} -.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{ - padding-right:15px; - padding-left:15px -} -.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{ - border-top-left-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{ - border-top-right-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{ - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{ - border-bottom-right-radius:3px -} -.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{ - border-top:1px solid #ddd -} -.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{ - border-top:0 -} -.panel>.table-bordered,.panel>.table-responsive>.table-bordered{ - border:0 -} -.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 -} -.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 -} -.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{ - border-bottom:0 -} -.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 -} -.panel>.table-responsive{ - margin-bottom:0; - border:0 -} -.panel-group{ - margin-bottom:20px -} -.panel-group .panel{ - margin-bottom:0; - border-radius:4px -} -.panel-group .panel+.panel{ - margin-top:5px -} -.panel-group .panel-heading{ - border-bottom:0 -} -.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{ - border-top:1px solid #ddd -} -.panel-group .panel-footer{ - border-top:0 -} -.panel-group .panel-footer+.panel-collapse .panel-body{ - border-bottom:1px solid #ddd -} -.panel-default{ - border-color:#ddd -} -.panel-default>.panel-heading{ - color:#333; - background-color:#f5f5f5; - border-color:#ddd -} -.panel-default>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ddd -} -.panel-default>.panel-heading .badge{ - color:#f5f5f5; - background-color:#333 -} -.panel-default>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ddd -} -.panel-primary{ - border-color:#337ab7 -} -.panel-primary>.panel-heading{ - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.panel-primary>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#337ab7 -} -.panel-primary>.panel-heading .badge{ - color:#337ab7; - background-color:#fff -} -.panel-primary>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#337ab7 -} -.panel-success{ - border-color:#d6e9c6 -} -.panel-success>.panel-heading{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.panel-success>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#d6e9c6 -} -.panel-success>.panel-heading .badge{ - color:#dff0d8; - background-color:#3c763d -} -.panel-success>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#d6e9c6 -} -.panel-info{ - border-color:#bce8f1 -} -.panel-info>.panel-heading{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.panel-info>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#bce8f1 -} -.panel-info>.panel-heading .badge{ - color:#d9edf7; - background-color:#31708f -} -.panel-info>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#bce8f1 -} -.panel-warning{ - border-color:#faebcc -} -.panel-warning>.panel-heading{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.panel-warning>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#faebcc -} -.panel-warning>.panel-heading .badge{ - color:#fcf8e3; - background-color:#8a6d3b -} -.panel-warning>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#faebcc -} -.panel-danger{ - border-color:#ebccd1 -} -.panel-danger>.panel-heading{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.panel-danger>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ebccd1 -} -.panel-danger>.panel-heading .badge{ - color:#f2dede; - background-color:#a94442 -} -.panel-danger>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ebccd1 -} -.embed-responsive{ - position:relative; - display:block; - height:0; - padding:0; - overflow:hidden -} -.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{ - position:absolute; - top:0; - bottom:0; - left:0; - width:100%; - height:100%; - border:0 -} -.embed-responsive-16by9{ - padding-bottom:56.25% -} -.embed-responsive-4by3{ - padding-bottom:75% -} -.well{ - min-height:20px; - padding:19px; - margin-bottom:20px; - background-color:#f5f5f5; - border:1px solid #e3e3e3; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05); - box-shadow:inset 0 1px 1px rgba(0,0,0,.05) -} -.well blockquote{ - border-color:#ddd; - border-color:rgba(0,0,0,.15) -} -.well-lg{ - padding:24px; - border-radius:6px -} -.well-sm{ - padding:9px; - border-radius:3px -} -.close{ - float:right; - font-size:21px; - font-weight:700; - line-height:1; - color:#000; - text-shadow:0 1px 0 #fff; - filter:alpha(opacity=20); - opacity:.2 -} -.close:focus,.close:hover{ - color:#000; - text-decoration:none; - cursor:pointer; - filter:alpha(opacity=50); - opacity:.5 -} -button.close{ - -webkit-appearance:none; - padding:0; - cursor:pointer; - background:0 0; - border:0 -} -.modal-open{ - overflow:hidden -} -.modal{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1050; - display:none; - overflow:hidden; - -webkit-overflow-scrolling:touch; - outline:0 -} -.modal.fade .modal-dialog{ - -webkit-transition:-webkit-transform .3s ease-out; - -o-transition:-o-transform .3s ease-out; - transition:transform .3s ease-out; - -webkit-transform:translate(0,-25%); - -ms-transform:translate(0,-25%); - -o-transform:translate(0,-25%); - transform:translate(0,-25%) -} -.modal.in .modal-dialog{ - -webkit-transform:translate(0,0); - -ms-transform:translate(0,0); - -o-transform:translate(0,0); - transform:translate(0,0) -} -.modal-open .modal{ - overflow-x:hidden; - overflow-y:auto -} -.modal-dialog{ - position:relative; - width:auto; - margin:10px -} -.modal-content{ - position:relative; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #999; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - outline:0; - -webkit-box-shadow:0 3px 9px rgba(0,0,0,.5); - box-shadow:0 3px 9px rgba(0,0,0,.5) -} -.modal-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1040; - background-color:#000 -} -.modal-backdrop.fade{ - filter:alpha(opacity=0); - opacity:0 -} -.modal-backdrop.in{ - filter:alpha(opacity=50); - opacity:.5 -} -.modal-header{ - padding:15px; - border-bottom:1px solid #e5e5e5 -} -.modal-header .close{ - margin-top:-2px -} -.modal-title{ - margin:0; - line-height:1.42857143 -} -.modal-body{ - position:relative; - padding:15px -} -.modal-footer{ - padding:15px; - text-align:right; - border-top:1px solid #e5e5e5 -} -.modal-footer .btn+.btn{ - margin-bottom:0; - margin-left:5px -} -.modal-footer .btn-group .btn+.btn{ - margin-left:-1px -} -.modal-footer .btn-block+.btn-block{ - margin-left:0 -} -.modal-scrollbar-measure{ - position:absolute; - top:-9999px; - width:50px; - height:50px; - overflow:scroll -} -@media (min-width:768px){ - .modal-dialog{ - width:600px; - margin:30px auto - } - .modal-content{ - -webkit-box-shadow:0 5px 15px rgba(0,0,0,.5); - box-shadow:0 5px 15px rgba(0,0,0,.5) - } - .modal-sm{ - width:300px - } -} -@media (min-width:992px){ - .modal-lg{ - width:900px - } -} -.tooltip{ - position:absolute; - z-index:1070; - display:block; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:12px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - filter:alpha(opacity=0); - opacity:0; - line-break:auto -} -.tooltip.in{ - filter:alpha(opacity=90); - opacity:.9 -} -.tooltip.top{ - padding:5px 0; - margin-top:-3px -} -.tooltip.right{ - padding:0 5px; - margin-left:3px -} -.tooltip.bottom{ - padding:5px 0; - margin-top:3px -} -.tooltip.left{ - padding:0 5px; - margin-left:-3px -} -.tooltip-inner{ - max-width:200px; - padding:3px 8px; - color:#fff; - text-align:center; - background-color:#000; - border-radius:4px -} -.tooltip-arrow{ - position:absolute; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.tooltip.top .tooltip-arrow{ - bottom:0; - left:50%; - margin-left:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-left .tooltip-arrow{ - right:5px; - bottom:0; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-right .tooltip-arrow{ - bottom:0; - left:5px; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.right .tooltip-arrow{ - top:50%; - left:0; - margin-top:-5px; - border-width:5px 5px 5px 0; - border-right-color:#000 -} -.tooltip.left .tooltip-arrow{ - top:50%; - right:0; - margin-top:-5px; - border-width:5px 0 5px 5px; - border-left-color:#000 -} -.tooltip.bottom .tooltip-arrow{ - top:0; - left:50%; - margin-left:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-left .tooltip-arrow{ - top:0; - right:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-right .tooltip-arrow{ - top:0; - left:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.popover{ - position:absolute; - top:0; - left:0; - z-index:1060; - display:none; - max-width:276px; - padding:1px; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - -webkit-box-shadow:0 5px 10px rgba(0,0,0,.2); - box-shadow:0 5px 10px rgba(0,0,0,.2); - line-break:auto -} -.popover.top{ - margin-top:-10px -} -.popover.right{ - margin-left:10px -} -.popover.bottom{ - margin-top:10px -} -.popover.left{ - margin-left:-10px -} -.popover-title{ - padding:8px 14px; - margin:0; - font-size:14px; - background-color:#f7f7f7; - border-bottom:1px solid #ebebeb; - border-radius:5px 5px 0 0 -} -.popover-content{ - padding:9px 14px -} -.popover>.arrow,.popover>.arrow:after{ - position:absolute; - display:block; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.popover>.arrow{ - border-width:11px -} -.popover>.arrow:after{ - content:""; - border-width:10px -} -.popover.top>.arrow{ - bottom:-11px; - left:50%; - margin-left:-11px; - border-top-color:#999; - border-top-color:rgba(0,0,0,.25); - border-bottom-width:0 -} -.popover.top>.arrow:after{ - bottom:1px; - margin-left:-10px; - content:" "; - border-top-color:#fff; - border-bottom-width:0 -} -.popover.right>.arrow{ - top:50%; - left:-11px; - margin-top:-11px; - border-right-color:#999; - border-right-color:rgba(0,0,0,.25); - border-left-width:0 -} -.popover.right>.arrow:after{ - bottom:-10px; - left:1px; - content:" "; - border-right-color:#fff; - border-left-width:0 -} -.popover.bottom>.arrow{ - top:-11px; - left:50%; - margin-left:-11px; - border-top-width:0; - border-bottom-color:#999; - border-bottom-color:rgba(0,0,0,.25) -} -.popover.bottom>.arrow:after{ - top:1px; - margin-left:-10px; - content:" "; - border-top-width:0; - border-bottom-color:#fff -} -.popover.left>.arrow{ - top:50%; - right:-11px; - margin-top:-11px; - border-right-width:0; - border-left-color:#999; - border-left-color:rgba(0,0,0,.25) -} -.popover.left>.arrow:after{ - right:1px; - bottom:-10px; - content:" "; - border-right-width:0; - border-left-color:#fff -} -.carousel{ - position:relative -} -.carousel-inner{ - position:relative; - width:100%; - overflow:hidden -} -.carousel-inner>.item{ - position:relative; - display:none; - -webkit-transition:.6s ease-in-out left; - -o-transition:.6s ease-in-out left; - transition:.6s ease-in-out left -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img{ - line-height:1 -} -@media all and (transform-3d),(-webkit-transform-3d){ - .carousel-inner>.item{ - -webkit-transition:-webkit-transform .6s ease-in-out; - -o-transition:-o-transform .6s ease-in-out; - transition:transform .6s ease-in-out; - -webkit-backface-visibility:hidden; - backface-visibility:hidden; - -webkit-perspective:1000px; - perspective:1000px - } - .carousel-inner>.item.active.right,.carousel-inner>.item.next{ - left:0; - -webkit-transform:translate3d(100%,0,0); - transform:translate3d(100%,0,0) - } - .carousel-inner>.item.active.left,.carousel-inner>.item.prev{ - left:0; - -webkit-transform:translate3d(-100%,0,0); - transform:translate3d(-100%,0,0) - } - .carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{ - left:0; - -webkit-transform:translate3d(0,0,0); - transform:translate3d(0,0,0) - } -} -.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{ - display:block -} -.carousel-inner>.active{ - left:0 -} -.carousel-inner>.next,.carousel-inner>.prev{ - position:absolute; - top:0; - width:100% -} -.carousel-inner>.next{ - left:100% -} -.carousel-inner>.prev{ - left:-100% -} -.carousel-inner>.next.left,.carousel-inner>.prev.right{ - left:0 -} -.carousel-inner>.active.left{ - left:-100% -} -.carousel-inner>.active.right{ - left:100% -} -.carousel-control{ - position:absolute; - top:0; - bottom:0; - left:0; - width:15%; - font-size:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6); - background-color:rgba(0,0,0,0); - filter:alpha(opacity=50); - opacity:.5 -} -.carousel-control.left{ - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001))); - background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control.right{ - right:0; - left:auto; - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5))); - background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control:focus,.carousel-control:hover{ - color:#fff; - text-decoration:none; - filter:alpha(opacity=90); - outline:0; - opacity:.9 -} -.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - position:absolute; - top:50%; - z-index:5; - display:inline-block; - margin-top:-10px -} -.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - left:50%; - margin-left:-10px -} -.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - right:50%; - margin-right:-10px -} -.carousel-control .icon-next,.carousel-control .icon-prev{ - width:20px; - height:20px; - font-family:serif; - line-height:1 -} -.carousel-control .icon-prev:before{ - content:'\2039' -} -.carousel-control .icon-next:before{ - content:'\203a' -} -.carousel-indicators{ - position:absolute; - bottom:10px; - left:50%; - z-index:15; - width:60%; - padding-left:0; - margin-left:-30%; - text-align:center; - list-style:none -} -.carousel-indicators li{ - display:inline-block; - width:10px; - height:10px; - margin:1px; - text-indent:-999px; - cursor:pointer; - background-color:#000\9; - background-color:rgba(0,0,0,0); - border:1px solid #fff; - border-radius:10px -} -.carousel-indicators .active{ - width:12px; - height:12px; - margin:0; - background-color:#fff -} -.carousel-caption{ - position:absolute; - right:15%; - bottom:20px; - left:15%; - z-index:10; - padding-top:20px; - padding-bottom:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6) -} -.carousel-caption .btn{ - text-shadow:none -} -@media screen and (min-width:768px){ - .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - width:30px; - height:30px; - margin-top:-10px; - font-size:30px - } - .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - margin-left:-10px - } - .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - margin-right:-10px - } - .carousel-caption{ - right:20%; - left:20%; - padding-bottom:30px - } - .carousel-indicators{ - bottom:20px - } -} -.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{ - display:table; - content:" " -} -.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{ - clear:both -} -.center-block{ - display:block; - margin-right:auto; - margin-left:auto -} -.pull-right{ - float:right!important -} -.pull-left{ - float:left!important -} -.hide{ - display:none!important -} -.show{ - display:block!important -} -.invisible{ - visibility:hidden -} -.text-hide{ - font:0/0 a; - color:transparent; - text-shadow:none; - background-color:transparent; - border:0 -} -.hidden{ - display:none!important -} -.affix{ - position:fixed -} -@-ms-viewport{ - width:device-width -} -.visible-lg,.visible-md,.visible-sm,.visible-xs{ - display:none!important -} -.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{ - display:none!important -} -@media (max-width:767px){ - .visible-xs{ - display:block!important - } - table.visible-xs{ - display:table!important - } - tr.visible-xs{ - display:table-row!important - } - td.visible-xs,th.visible-xs{ - display:table-cell!important - } -} -@media (max-width:767px){ - .visible-xs-block{ - display:block!important - } -} -@media (max-width:767px){ - .visible-xs-inline{ - display:inline!important - } -} -@media (max-width:767px){ - .visible-xs-inline-block{ - display:inline-block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm{ - display:block!important - } - table.visible-sm{ - display:table!important - } - tr.visible-sm{ - display:table-row!important - } - td.visible-sm,th.visible-sm{ - display:table-cell!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-block{ - display:block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline{ - display:inline!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline-block{ - display:inline-block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md{ - display:block!important - } - table.visible-md{ - display:table!important - } - tr.visible-md{ - display:table-row!important - } - td.visible-md,th.visible-md{ - display:table-cell!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-block{ - display:block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline{ - display:inline!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline-block{ - display:inline-block!important - } -} -@media (min-width:1200px){ - .visible-lg{ - display:block!important - } - table.visible-lg{ - display:table!important - } - tr.visible-lg{ - display:table-row!important - } - td.visible-lg,th.visible-lg{ - display:table-cell!important - } -} -@media (min-width:1200px){ - .visible-lg-block{ - display:block!important - } -} -@media (min-width:1200px){ - .visible-lg-inline{ - display:inline!important - } -} -@media (min-width:1200px){ - .visible-lg-inline-block{ - display:inline-block!important - } -} -@media (max-width:767px){ - .hidden-xs{ - display:none!important - } -} -@media (min-width:768px) and (max-width:991px){ - .hidden-sm{ - display:none!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .hidden-md{ - display:none!important - } -} -@media (min-width:1200px){ - .hidden-lg{ - display:none!important - } -} -.visible-print{ - display:none!important -} -@media print{ - .visible-print{ - display:block!important - } - table.visible-print{ - display:table!important - } - tr.visible-print{ - display:table-row!important - } - td.visible-print,th.visible-print{ - display:table-cell!important - } -} -.visible-print-block{ - display:none!important -} -@media print{ - .visible-print-block{ - display:block!important - } -} -.visible-print-inline{ - display:none!important -} -@media print{ - .visible-print-inline{ - display:inline!important - } -} -.visible-print-inline-block{ - display:none!important -} -@media print{ - .visible-print-inline-block{ - display:inline-block!important - } -} -@media print{ - .hidden-print{ - display:none!important - } -} -/*# sourceMappingURL=bootstrap.min.css.map */ - diff --git a/themes/matrix/client/src/css/01-main.css b/themes/matrix/client/src/css/01-main.css deleted file mode 100644 index e62ff8dd0..000000000 --- a/themes/matrix/client/src/css/01-main.css +++ /dev/null @@ -1,77 +0,0 @@ -body { - /*background-image: url("//*img//*LargeTriangles.svg");*/ - /*background-image: url("//*img//*RandomizedPattern.svg");*/ - /*background-image: url("//*img//*background.svg");*/ - background-color:#000000; -} -canvas{ - position:absolute; - top:0; - left:0; -} -.authelia-brand { - font-weight: bold; - font-style: italic; - color: #ffffff -} -.poweredby-block { - margin: 0px 30px; - margin-top: 10px; - padding-top: 15px; - border-top: 1px solid rgba(0, 0, 0, 0.15); - -} -.poweredby { - font-size: 0.7em; - color: white; -} -/* notifications */ -.notification { - padding: 10px; - margin: 15px 0px; - border-radius: 6px; - display: none; - position: absolute; -} -.notification img { - width: 24px; - margin-right: 10px; -} -.notification i, -.notification span { - display:table-cell; - vertical-align:middle; -} -.info { - border: 1px solid #9cb1ff; - background-color: rgb(192, 220, 255); -} -.success { - border: 1px solid #65ec7c; - background-color: rgb(163, 255, 157); -} -.error { - border: 1px solid #ffa3a3; - background-color: rgb(255, 175, 175); -} -.warning { - border: 1px solid #ffd743; - background-color: rgb(255, 230, 143); -} -.bottom-right-links { - text-align: right; - margin-top: 10px; - font-size: 0.8em; - color: white; -} -.header { - background-color: #000000; - color: white; - margin: 0px; -} -.body { - padding: 10px; -} -h1 { - font-size: 25px; -} diff --git a/themes/matrix/client/src/css/02-login.css b/themes/matrix/client/src/css/02-login.css deleted file mode 100644 index a6984267b..000000000 --- a/themes/matrix/client/src/css/02-login.css +++ /dev/null @@ -1,136 +0,0 @@ -.form-signin -{ - margin: 0 auto; -} - -.form-signin .form-signin-heading, .form-signin .checkbox -{ - margin-bottom: 10px; -} - -.form-signin .checkbox -{ - font-weight: normal; -} - -.form-signin .form-control -{ - position: relative; - font-size: 16px; - height: auto; - padding: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-signin .form-control:focus -{ - z-index: 2; -} -.form-signin input[type="text"] -{ - margin-bottom: -1px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.form-signin input[type="password"] -{ - /* margin-bottom: 10px; */ - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.account-wall -{ - border: 1px solid #000; - margin-top: 20px; - padding-bottom: 20px; - background-color: #000000; - -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); -} -.account-wall h1 -{ - margin-bottom: 15px; - margin-top: 15px; - font-weight: 800; - display: block; - text-align: center; -} -.account-wall h3 -{ - display: block; - text-align: center; -} -.account-wall p -{ - text-align: center; - margin: 10px; - color: white; -} -.account-wall .form-inputs -{ - margin-bottom: 10px; - border-color: #b20c0c; -} -.account-wall hr { - border-color: #c5c5c5; -} - -.header-img -{ - width: 96px; - height: 96px; - margin: 0 auto 10px; - display: block; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - border-radius: 50%; -} - -.link -{ - margin-top: 10px; - color: white; -} - -.btn-primary.totp -{ - background-color: rgb(102, 135, 162); -} - -.btn-primary.u2f -{ - background-color: rgb(83, 149, 204); -} - -.u2f-token { - text-align: center; -} - -.u2f-token img { - width: 70px; -} - -.keep-me-logged-in { - margin-top: 10px; - font-size: 0.8em; - color: white; -} - -.keep-me-logged-in input[type=checkbox] { - transform: scale(0.8); - margin: 0; - margin-right: 4px; -} - -.keep-me-logged-in label { - font-weight: 300; -} - -.keep-me-logged-in input, -.keep-me-logged-in label { - display: inline-block; - margin-bottom: 0; /* I added this after I posted my reply */ - vertical-align: middle; /* Fixes any weird issues in Firefox and IE */ -} diff --git a/themes/matrix/client/src/css/03-errors.css b/themes/matrix/client/src/css/03-errors.css deleted file mode 100644 index e9f97f33b..000000000 --- a/themes/matrix/client/src/css/03-errors.css +++ /dev/null @@ -1,12 +0,0 @@ - -.error-401 .header-img { - border-radius: 0%; -} - -.error-403 .header-img { - border-radius: 0%; -} - -.error-404 .header-img { - border-radius: 0%; -} \ No newline at end of file diff --git a/themes/matrix/client/src/css/03-password-reset-form.css b/themes/matrix/client/src/css/03-password-reset-form.css deleted file mode 100644 index 34066bc24..000000000 --- a/themes/matrix/client/src/css/03-password-reset-form.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-form .header-img { - border-radius: 0%; -} diff --git a/themes/matrix/client/src/css/03-password-reset-request.css b/themes/matrix/client/src/css/03-password-reset-request.css deleted file mode 100644 index 1a2ad4df8..000000000 --- a/themes/matrix/client/src/css/03-password-reset-request.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-request .header-img { - border-radius: 0%; -} diff --git a/themes/matrix/client/src/css/03-totp-register.css b/themes/matrix/client/src/css/03-totp-register.css deleted file mode 100644 index cb76720ad..000000000 --- a/themes/matrix/client/src/css/03-totp-register.css +++ /dev/null @@ -1,22 +0,0 @@ -.totp-register #secret { - background-color: white; - font-size: 0.9em; - font-weight: bold; - padding: 5px; - border: 1px solid #c7c7c7; - word-wrap: break-word; -} -.totp-register #qrcode img { - margin: 10px auto; -} -.totp-register .need-google-authenticator { - text-align: center; - margin-top: 20px; -} -.totp-register .store-badges { - margin-top: 5px; -} -.totp-register .store-badge { - width: 110px; - height: 30px; -} \ No newline at end of file diff --git a/themes/matrix/client/src/css/03-u2f-register.css b/themes/matrix/client/src/css/03-u2f-register.css deleted file mode 100644 index e54cddf89..000000000 --- a/themes/matrix/client/src/css/03-u2f-register.css +++ /dev/null @@ -1,5 +0,0 @@ - -.u2f-register img { - display: block; - margin: 20px auto; -} \ No newline at end of file diff --git a/themes/matrix/client/src/img/background.jpg b/themes/matrix/client/src/img/background.jpg deleted file mode 100644 index 974ea273f..000000000 Binary files a/themes/matrix/client/src/img/background.jpg and /dev/null differ diff --git a/themes/matrix/client/src/img/icon.png b/themes/matrix/client/src/img/icon.png deleted file mode 100644 index 040d10c1a..000000000 Binary files a/themes/matrix/client/src/img/icon.png and /dev/null differ diff --git a/themes/matrix/client/src/img/mail.png b/themes/matrix/client/src/img/mail.png deleted file mode 100644 index 834bfce91..000000000 Binary files a/themes/matrix/client/src/img/mail.png and /dev/null differ diff --git a/themes/matrix/client/src/img/matrix_circle_128x128.png b/themes/matrix/client/src/img/matrix_circle_128x128.png deleted file mode 100644 index 856e01556..000000000 Binary files a/themes/matrix/client/src/img/matrix_circle_128x128.png and /dev/null differ diff --git a/themes/matrix/client/src/img/notifications/.directory b/themes/matrix/client/src/img/notifications/.directory deleted file mode 100644 index 7c8b80541..000000000 --- a/themes/matrix/client/src/img/notifications/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,35 -Version=3 -ViewMode=1 diff --git a/themes/matrix/client/src/img/notifications/error.png b/themes/matrix/client/src/img/notifications/error.png deleted file mode 100644 index bf64d28f7..000000000 Binary files a/themes/matrix/client/src/img/notifications/error.png and /dev/null differ diff --git a/themes/matrix/client/src/img/notifications/info.png b/themes/matrix/client/src/img/notifications/info.png deleted file mode 100644 index 67928e88c..000000000 Binary files a/themes/matrix/client/src/img/notifications/info.png and /dev/null differ diff --git a/themes/matrix/client/src/img/notifications/success.png b/themes/matrix/client/src/img/notifications/success.png deleted file mode 100644 index d3998392d..000000000 Binary files a/themes/matrix/client/src/img/notifications/success.png and /dev/null differ diff --git a/themes/matrix/client/src/img/notifications/warning.png b/themes/matrix/client/src/img/notifications/warning.png deleted file mode 100644 index ab8b54ffc..000000000 Binary files a/themes/matrix/client/src/img/notifications/warning.png and /dev/null differ diff --git a/themes/matrix/client/src/img/padlock.png b/themes/matrix/client/src/img/padlock.png deleted file mode 100644 index 31abbaeef..000000000 Binary files a/themes/matrix/client/src/img/padlock.png and /dev/null differ diff --git a/themes/matrix/client/src/img/password_white.png b/themes/matrix/client/src/img/password_white.png deleted file mode 100644 index 0b93ef3fb..000000000 Binary files a/themes/matrix/client/src/img/password_white.png and /dev/null differ diff --git a/themes/matrix/client/src/img/pendrive.png b/themes/matrix/client/src/img/pendrive.png deleted file mode 100644 index fa49178c3..000000000 Binary files a/themes/matrix/client/src/img/pendrive.png and /dev/null differ diff --git a/themes/matrix/client/src/img/stores/.directory b/themes/matrix/client/src/img/stores/.directory deleted file mode 100644 index 7bdc8daf8..000000000 --- a/themes/matrix/client/src/img/stores/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,25 -Version=3 -ViewMode=1 diff --git a/themes/matrix/client/src/img/stores/applestore-badge.svg b/themes/matrix/client/src/img/stores/applestore-badge.svg deleted file mode 100644 index ac111e597..000000000 --- a/themes/matrix/client/src/img/stores/applestore-badge.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/matrix/client/src/img/stores/googleplay-badge.svg b/themes/matrix/client/src/img/stores/googleplay-badge.svg deleted file mode 100644 index 9e33e3aa2..000000000 --- a/themes/matrix/client/src/img/stores/googleplay-badge.svg +++ /dev/null @@ -1,429 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/themes/matrix/client/src/img/success.png b/themes/matrix/client/src/img/success.png deleted file mode 100644 index ee9d6841b..000000000 Binary files a/themes/matrix/client/src/img/success.png and /dev/null differ diff --git a/themes/matrix/client/src/img/user.png b/themes/matrix/client/src/img/user.png deleted file mode 100644 index 00941399d..000000000 Binary files a/themes/matrix/client/src/img/user.png and /dev/null differ diff --git a/themes/matrix/client/src/img/warning.png b/themes/matrix/client/src/img/warning.png deleted file mode 100644 index c6acd953b..000000000 Binary files a/themes/matrix/client/src/img/warning.png and /dev/null differ diff --git a/themes/matrix/client/src/thirdparties/matrix.js b/themes/matrix/client/src/thirdparties/matrix.js deleted file mode 100644 index f9c8d51d4..000000000 --- a/themes/matrix/client/src/thirdparties/matrix.js +++ /dev/null @@ -1,58 +0,0 @@ -// Parameters -const fontSize = 12; -const spdMult = 0.5; -const fadeSpd = 0.03; -const headColor = '#FFFFFF'; -const tailColor = '#00FF00'; - -canvas.width = window.innerWidth; -canvas.height = window.innerHeight; -let ctx = canvas.getContext('2d'); -let pos, spd, time, chars; - -function init() { - pos = []; spd = []; time = []; chars = []; - ctx.font = fontSize + 'pt Consolas'; - for (let i = 0; i < canvas.width / fontSize; i++) { - pos[i] = Math.random() * (canvas.height / fontSize); - spd[i] = (Math.random() + 0.2) * spdMult; - time[i] = 0; - chars[i] = ' '; - } -} - -function render() { - requestAnimationFrame(render); - - ctx.fillStyle = tailColor; - for (let i = 0; i < chars.length; ++i) { // Tails - ctx.fillText(chars[i], i * fontSize + 1, pos[i] * fontSize); - } - ctx.fillStyle = `rgba(0, 0, 0, ${fadeSpd})`; - ctx.fillRect(0, 0, canvas.width, canvas.height); // Fading - - ctx.fillStyle = headColor; - for (let x = 0; x < pos.length; ++x){ // Chars - if (time[x] > 1) { - let charCode = (Math.random() < 0.9) ? Math.random() * 93 + 33 - : Math.random() * 15 + 12688; - chars[x] = String.fromCharCode(charCode); - ctx.fillText(chars[x], x * fontSize + 1, pos[x] * fontSize + fontSize); - pos[x]++; - if (pos[x] * fontSize > canvas.height) pos[x] = 0; - time[x] = 0; - } - time[x] += spd[x]; - } -} - -window.onload = function() { - window.onresize = () => { - canvas.width = window.innerWidth; - canvas.height = window.innerHeight; - ctx.clearRect(0, 0, canvas.width, canvas.height); - init(); - }; - init(); - render(); -}; diff --git a/themes/matrix/client/src/thirdparties/qrcode.min.js b/themes/matrix/client/src/thirdparties/qrcode.min.js deleted file mode 100644 index 993e88f39..000000000 --- a/themes/matrix/client/src/thirdparties/qrcode.min.js +++ /dev/null @@ -1 +0,0 @@ -var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/themes/matrix/client/src/thirdparties/u2f-api.js b/themes/matrix/client/src/thirdparties/u2f-api.js deleted file mode 100644 index 8c7801e3b..000000000 --- a/themes/matrix/client/src/thirdparties/u2f-api.js +++ /dev/null @@ -1,749 +0,0 @@ -//Copyright 2014-2015 Google Inc. All rights reserved. - -//Use of this source code is governed by a BSD-style -//license that can be found in the LICENSE file or at -//https://developers.google.com/open-source/licenses/bsd - -/** - * @fileoverview The U2F api. - */ -'use strict'; - - -/** - * Namespace for the U2F api. - * @type {Object} - */ -var u2f = u2f || {}; - -/** - * FIDO U2F Javascript API Version - * @number - */ -var js_api_version; - -/** - * The U2F extension id - * @const {string} - */ -// The Chrome packaged app extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the package Chrome app and does not require installing the U2F Chrome extension. - u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd'; -// The U2F Chrome extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the U2F Chrome extension to authenticate. -// u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne'; - - -/** - * Message types for messsages to/from the extension - * @const - * @enum {string} - */ -u2f.MessageTypes = { - 'U2F_REGISTER_REQUEST': 'u2f_register_request', - 'U2F_REGISTER_RESPONSE': 'u2f_register_response', - 'U2F_SIGN_REQUEST': 'u2f_sign_request', - 'U2F_SIGN_RESPONSE': 'u2f_sign_response', - 'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request', - 'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response' -}; - - -/** - * Response status codes - * @const - * @enum {number} - */ -u2f.ErrorCodes = { - 'OK': 0, - 'OTHER_ERROR': 1, - 'BAD_REQUEST': 2, - 'CONFIGURATION_UNSUPPORTED': 3, - 'DEVICE_INELIGIBLE': 4, - 'TIMEOUT': 5 -}; - - -/** - * A message for registration requests - * @typedef {{ - * type: u2f.MessageTypes, - * appId: ?string, - * timeoutSeconds: ?number, - * requestId: ?number - * }} - */ -u2f.U2fRequest; - - -/** - * A message for registration responses - * @typedef {{ - * type: u2f.MessageTypes, - * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse), - * requestId: ?number - * }} - */ -u2f.U2fResponse; - - -/** - * An error object for responses - * @typedef {{ - * errorCode: u2f.ErrorCodes, - * errorMessage: ?string - * }} - */ -u2f.Error; - -/** - * Data object for a single sign request. - * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}} - */ -u2f.Transport; - - -/** - * Data object for a single sign request. - * @typedef {Array} - */ -u2f.Transports; - -/** - * Data object for a single sign request. - * @typedef {{ - * version: string, - * challenge: string, - * keyHandle: string, - * appId: string - * }} - */ -u2f.SignRequest; - - -/** - * Data object for a sign response. - * @typedef {{ - * keyHandle: string, - * signatureData: string, - * clientData: string - * }} - */ -u2f.SignResponse; - - -/** - * Data object for a registration request. - * @typedef {{ - * version: string, - * challenge: string - * }} - */ -u2f.RegisterRequest; - - -/** - * Data object for a registration response. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: Transports, - * appId: string - * }} - */ -u2f.RegisterResponse; - - -/** - * Data object for a registered key. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: ?Transports, - * appId: ?string - * }} - */ -u2f.RegisteredKey; - - -/** - * Data object for a get API register response. - * @typedef {{ - * js_api_version: number - * }} - */ -u2f.GetJsApiVersionResponse; - - -//Low level MessagePort API support - -/** - * Sets up a MessagePort to the U2F extension using the - * available mechanisms. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - */ -u2f.getMessagePort = function(callback) { - if (typeof chrome != 'undefined' && chrome.runtime) { - // The actual message here does not matter, but we need to get a reply - // for the callback to run. Thus, send an empty signature request - // in order to get a failure response. - var msg = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: [] - }; - chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() { - if (!chrome.runtime.lastError) { - // We are on a whitelisted origin and can talk directly - // with the extension. - u2f.getChromeRuntimePort_(callback); - } else { - // chrome.runtime was available, but we couldn't message - // the extension directly, use iframe - u2f.getIframePort_(callback); - } - }); - } else if (u2f.isAndroidChrome_()) { - u2f.getAuthenticatorPort_(callback); - } else if (u2f.isIosChrome_()) { - u2f.getIosPort_(callback); - } else { - // chrome.runtime was not available at all, which is normal - // when this origin doesn't have access to any extensions. - u2f.getIframePort_(callback); - } -}; - -/** - * Detect chrome running on android based on the browser's useragent. - * @private - */ -u2f.isAndroidChrome_ = function() { - var userAgent = navigator.userAgent; - return userAgent.indexOf('Chrome') != -1 && - userAgent.indexOf('Android') != -1; -}; - -/** - * Detect chrome running on iOS based on the browser's platform. - * @private - */ -u2f.isIosChrome_ = function() { - return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1; -}; - -/** - * Connects directly to the extension via chrome.runtime.connect. - * @param {function(u2f.WrappedChromeRuntimePort_)} callback - * @private - */ -u2f.getChromeRuntimePort_ = function(callback) { - var port = chrome.runtime.connect(u2f.EXTENSION_ID, - {'includeTlsChannelId': true}); - setTimeout(function() { - callback(new u2f.WrappedChromeRuntimePort_(port)); - }, 0); -}; - -/** - * Return a 'port' abstraction to the Authenticator app. - * @param {function(u2f.WrappedAuthenticatorPort_)} callback - * @private - */ -u2f.getAuthenticatorPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedAuthenticatorPort_()); - }, 0); -}; - -/** - * Return a 'port' abstraction to the iOS client app. - * @param {function(u2f.WrappedIosPort_)} callback - * @private - */ -u2f.getIosPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedIosPort_()); - }, 0); -}; - -/** - * A wrapper for chrome.runtime.Port that is compatible with MessagePort. - * @param {Port} port - * @constructor - * @private - */ -u2f.WrappedChromeRuntimePort_ = function(port) { - this.port_ = port; -}; - -/** - * Format and return a sign request compliant with the JS API version supported by the extension. - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatSignRequest_ = - function(appId, challenge, registeredKeys, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: challenge, - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: signRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - appId: appId, - challenge: challenge, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - -/** - * Format and return a register request compliant with the JS API version supported by the extension.. - * @param {Array} signRequests - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatRegisterRequest_ = - function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - for (var i = 0; i < registerRequests.length; i++) { - registerRequests[i].appId = appId; - } - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: registerRequests[0], - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - signRequests: signRequests, - registerRequests: registerRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - appId: appId, - registerRequests: registerRequests, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - - -/** - * Posts a message on the underlying channel. - * @param {Object} message - */ -u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) { - this.port_.postMessage(message); -}; - - -/** - * Emulates the HTML 5 addEventListener interface. Works only for the - * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedChromeRuntimePort_.prototype.addEventListener = - function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message' || name == 'onmessage') { - this.port_.onMessage.addListener(function(message) { - // Emulate a minimal MessageEvent object - handler({'data': message}); - }); - } else { - console.error('WrappedChromeRuntimePort only supports onMessage'); - } -}; - -/** - * Wrap the Authenticator app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedAuthenticatorPort_ = function() { - this.requestId_ = -1; - this.requestObject_ = null; -} - -/** - * Launch the Authenticator intent. - * @param {Object} message - */ -u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) { - var intentUrl = - u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ + - ';S.request=' + encodeURIComponent(JSON.stringify(message)) + - ';end'; - document.location = intentUrl; -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() { - return "WrappedAuthenticatorPort_"; -}; - - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message') { - var self = this; - /* Register a callback to that executes when - * chrome injects the response. */ - window.addEventListener( - 'message', self.onRequestUpdate_.bind(self, handler), false); - } else { - console.error('WrappedAuthenticatorPort only supports message'); - } -}; - -/** - * Callback invoked when a response is received from the Authenticator. - * @param function({data: Object}) callback - * @param {Object} message message Object - */ -u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ = - function(callback, message) { - var messageObject = JSON.parse(message.data); - var intentUrl = messageObject['intentURL']; - - var errorCode = messageObject['errorCode']; - var responseObject = null; - if (messageObject.hasOwnProperty('data')) { - responseObject = /** @type {Object} */ ( - JSON.parse(messageObject['data'])); - } - - callback({'data': responseObject}); -}; - -/** - * Base URL for intents to Authenticator. - * @const - * @private - */ -u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ = - 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE'; - -/** - * Wrap the iOS client app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedIosPort_ = function() {}; - -/** - * Launch the iOS client app request - * @param {Object} message - */ -u2f.WrappedIosPort_.prototype.postMessage = function(message) { - var str = JSON.stringify(message); - var url = "u2f://auth?" + encodeURI(str); - location.replace(url); -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedIosPort_.prototype.getPortType = function() { - return "WrappedIosPort_"; -}; - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name !== 'message') { - console.error('WrappedIosPort only supports message'); - } -}; - -/** - * Sets up an embedded trampoline iframe, sourced from the extension. - * @param {function(MessagePort)} callback - * @private - */ -u2f.getIframePort_ = function(callback) { - // Create the iframe - var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID; - var iframe = document.createElement('iframe'); - iframe.src = iframeOrigin + '/u2f-comms.html'; - iframe.setAttribute('style', 'display:none'); - document.body.appendChild(iframe); - - var channel = new MessageChannel(); - var ready = function(message) { - if (message.data == 'ready') { - channel.port1.removeEventListener('message', ready); - callback(channel.port1); - } else { - console.error('First event on iframe port was not "ready"'); - } - }; - channel.port1.addEventListener('message', ready); - channel.port1.start(); - - iframe.addEventListener('load', function() { - // Deliver the port to the iframe and initialize - iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]); - }); -}; - - -//High-level JS API - -/** - * Default extension response timeout in seconds. - * @const - */ -u2f.EXTENSION_TIMEOUT_SEC = 30; - -/** - * A singleton instance for a MessagePort to the extension. - * @type {MessagePort|u2f.WrappedChromeRuntimePort_} - * @private - */ -u2f.port_ = null; - -/** - * Callbacks waiting for a port - * @type {Array} - * @private - */ -u2f.waitingForPort_ = []; - -/** - * A counter for requestIds. - * @type {number} - * @private - */ -u2f.reqCounter_ = 0; - -/** - * A map from requestIds to client callbacks - * @type {Object.} - * @private - */ -u2f.callbackMap_ = {}; - -/** - * Creates or retrieves the MessagePort singleton to use. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - * @private - */ -u2f.getPortSingleton_ = function(callback) { - if (u2f.port_) { - callback(u2f.port_); - } else { - if (u2f.waitingForPort_.length == 0) { - u2f.getMessagePort(function(port) { - u2f.port_ = port; - u2f.port_.addEventListener('message', - /** @type {function(Event)} */ (u2f.responseHandler_)); - - // Careful, here be async callbacks. Maybe. - while (u2f.waitingForPort_.length) - u2f.waitingForPort_.shift()(u2f.port_); - }); - } - u2f.waitingForPort_.push(callback); - } -}; - -/** - * Handles response messages from the extension. - * @param {MessageEvent.} message - * @private - */ -u2f.responseHandler_ = function(message) { - var response = message.data; - var reqId = response['requestId']; - if (!reqId || !u2f.callbackMap_[reqId]) { - console.error('Unknown or missing requestId in response.'); - return; - } - var cb = u2f.callbackMap_[reqId]; - delete u2f.callbackMap_[reqId]; - cb(response['responseData']); -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the sign request. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual sign request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual sign request in the supported API version. - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the register request. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual register request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual register request in the supported API version. - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatRegisterRequest_( - appId, registeredKeys, registerRequests, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - - -/** - * Dispatches a message to the extension to find out the supported - * JS API version. - * If the user is on a mobile phone and is thus using Google Authenticator instead - * of the Chrome extension, don't send the request and simply return 0. - * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.getApiVersion = function(callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - // If we are using Android Google Authenticator or iOS client app, - // do not fire an intent to ask which JS API version to use. - if (port.getPortType) { - var apiVersion; - switch (port.getPortType()) { - case 'WrappedIosPort_': - case 'WrappedAuthenticatorPort_': - apiVersion = 1.1; - break; - - default: - apiVersion = 0; - break; - } - callback({ 'js_api_version': apiVersion }); - return; - } - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); -}; - diff --git a/themes/matrix/server/.directory b/themes/matrix/server/.directory deleted file mode 100644 index b7754766c..000000000 --- a/themes/matrix/server/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,58,20 -Version=3 -ViewMode=1 diff --git a/themes/matrix/server/src/resources/email-template.ejs b/themes/matrix/server/src/resources/email-template.ejs deleted file mode 100644 index f59c2f944..000000000 --- a/themes/matrix/server/src/resources/email-template.ejs +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - Simples-Minimalistic Responsive Template - - - - - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - -
-

<%= title %>

-
- -
 
-
-
- - - - - - - - -
- - - - - - -
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - - - - - - - - - - - - -
- This email has been sent to you in order to validate your identity. Please ignore it if you do not know why you received it. -
 
- <%= button_title %> -
-
 
-
-
- - - - - - - - -
- - - - - - - - - - - - -
 
 
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - -
- Please ignore this email if you did not initiate the process. -
-
-
- - - - - diff --git a/themes/matrix/server/src/views/already-logged-in.pug b/themes/matrix/server/src/views/already-logged-in.pug deleted file mode 100644 index 137bbea30..000000000 --- a/themes/matrix/server/src/views/already-logged-in.pug +++ /dev/null @@ -1,14 +0,0 @@ -extends layout/layout.pug - -block form-header - h1 Sign in - -block content - img(class="header-img" src="/img/success.png" alt="success") - if redirection_url - p You are already logged in as #{ username }.

- | If you are not redirected in few seconds, click here.

- | Otherwise, click here to log off. - else - p You are already logged in as #{ username }.

- | Click here to log off. diff --git a/themes/matrix/server/src/views/errors/.directory b/themes/matrix/server/src/views/errors/.directory deleted file mode 100644 index 33f71bea4..000000000 --- a/themes/matrix/server/src/views/errors/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,59,57 -Version=3 -ViewMode=1 diff --git a/themes/matrix/server/src/views/errors/401.pug b/themes/matrix/server/src/views/errors/401.pug deleted file mode 100644 index b7a222ad0..000000000 --- a/themes/matrix/server/src/views/errors/401.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-401"; - -block form-header - h1 Error 401 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You are not authorized to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You are not authorized to access this resource. \ No newline at end of file diff --git a/themes/matrix/server/src/views/errors/403.pug b/themes/matrix/server/src/views/errors/403.pug deleted file mode 100644 index f4b5ca8a2..000000000 --- a/themes/matrix/server/src/views/errors/403.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-403"; - -block form-header - h1 Error 403 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You don't have enough privileges to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You don't have enough privileges to access this resource. diff --git a/themes/matrix/server/src/views/errors/404.pug b/themes/matrix/server/src/views/errors/404.pug deleted file mode 100644 index 06d6375fc..000000000 --- a/themes/matrix/server/src/views/errors/404.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-404"; - -block form-header -

Error 404

- -block content - img(class="header-img" src="/img/warning.png" alt="warning") - p Page not found. diff --git a/themes/matrix/server/src/views/firstfactor.pug b/themes/matrix/server/src/views/firstfactor.pug deleted file mode 100644 index 5e85e570c..000000000 --- a/themes/matrix/server/src/views/firstfactor.pug +++ /dev/null @@ -1,23 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "firstfactor"; - -block form-header - h1 Sign in - -block content - div(class="notification") - img(class="header-img" src="/img/matrix_circle_128x128.png" alt="user profile") - p Enter your credentials to sign in - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" id="username" placeholder="Username" required autofocus) - input(type="password" class="form-control" id="password" placeholder="Password" required) - button(id="signin" class="btn btn-lg btn-primary btn-block" type="submit") Sign in - div(class="keep-me-logged-in pull-left") - input(type="checkbox" id="keep_me_logged_in" name="keep_me_logged_in" value="true") - label(for="keep_me_logged_in") Keep me logged in - div(class="bottom-right-links pull-right") - a(href=reset_password_request_endpoint, class="link forgot-password") Forgot password? - span(class="clearfix") diff --git a/themes/matrix/server/src/views/layout/layout.pug b/themes/matrix/server/src/views/layout/layout.pug deleted file mode 100644 index 1d845be49..000000000 --- a/themes/matrix/server/src/views/layout/layout.pug +++ /dev/null @@ -1,30 +0,0 @@ -block variables - -doctype html -html - head - title Authelia - 2FA - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="robots", content="noindex, nofollow, nosnippet, noarchive") - meta(http-equiv="Content-Security-Policy", content="default-src 'self'; img-src 'self' data:;") - link(rel="icon", href="/img/icon.png" type="image/png" sizes="32x32") - link(rel="stylesheet", type="text/css", href="/css/authelia.css") - if redirection_url - meta(http-equiv="refresh" content="4;url=" + redirection_url) - body - canvas#canvas(width='400', height='300') - script(src='/js/matrix.js') - div(class="container") - div(class="row") - div(class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3") - div(class="account-wall " + page_classname) - div(class="row header") - block form-header - div(class="row body") - div(class="form col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2") - block content - div(class="row footer poweredby-block") - div(class="poweredby col-xs-6 col-xs-offset-4 col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4") - | Powered by Authelia - block entrypoint - script(src="/js/authelia.js", type="text/javascript") diff --git a/themes/matrix/server/src/views/need-identity-validation.pug b/themes/matrix/server/src/views/need-identity-validation.pug deleted file mode 100644 index 4cfd62717..000000000 --- a/themes/matrix/server/src/views/need-identity-validation.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "identity-validation"; - -block form-header - h1 Registration - -block content - img(class="header-img" src="/img/mail.png" alt="mail") - p A confirmation email has been sent to your mailbox. - | Please open it and click on the link within 15 minutes to confirm the registration. diff --git a/themes/matrix/server/src/views/password-reset-form.pug b/themes/matrix/server/src/views/password-reset-form.pug deleted file mode 100644 index fd9311892..000000000 --- a/themes/matrix/server/src/views/password-reset-form.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-form"; - -block form-header - h1 Reset password - -block content - div(class="notification") - img(class="header-img" src="/img/password_white.png" alt="password") - p Set your new password and confirm it. - form(class="form-signin") - div(class="form-inputs") - input(class="form-control" type="password" name="password1" id="password1" placeholder="New password" required="required") - input(class="form-control" type="password" name="password2" id="password2" placeholder="Password confirmation" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/matrix/server/src/views/password-reset-request.pug b/themes/matrix/server/src/views/password-reset-request.pug deleted file mode 100644 index 855b5998b..000000000 --- a/themes/matrix/server/src/views/password-reset-request.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-request"; - -block form-header - h1 Reset password - -block content - div(class="notification") - div - img(class="header-img" src="/img/password_white.png" alt="password") - p After giving your username, you will receive an email to change your password. - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" name="username" id="username" placeholder="Your username" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/matrix/server/src/views/secondfactor.pug b/themes/matrix/server/src/views/secondfactor.pug deleted file mode 100644 index 87b578185..000000000 --- a/themes/matrix/server/src/views/secondfactor.pug +++ /dev/null @@ -1,31 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "secondfactor"; - -block form-header - h1 Sign in - -block content - div - div(class="notification notification-totp") - h3 Hi #{username} - div(class="row") - div(class="u2f-token") - img(src="/img/pendrive.png", alt="security key") - p - | Please, touch your security key
- b Or
- | Get a one-time password - form(class="form-signin totp") - div(class="form-inputs") - input(type="text" autocomplete="off" class="form-control" id="token" placeholder="Token" required autofocus) - button(class="btn btn-lg btn-primary btn-block totp-button" type="submit") Sign in - div(class="pull-right bottom-right-links") - div Need to register? - div - a(href=u2f_identity_start_endpoint, class="link register-u2f", data-toggle="tooltip", title="A security key is required to register.") Security key - | | - a(href=totp_identity_start_endpoint, class="link register-totp") Google Authenticator - span(class="clearfix") - script(src="/js/u2f-api.js", type="text/javascript") diff --git a/themes/matrix/server/src/views/totp-register.pug b/themes/matrix/server/src/views/totp-register.pug deleted file mode 100644 index 1b4d98354..000000000 --- a/themes/matrix/server/src/views/totp-register.pug +++ /dev/null @@ -1,25 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "totp-register"; - -block form-header - h1 One-time passwords - -block content - p Open Google Authenticator and add this entry - p(id="secret") #{ base32_secret } - p or scan this barcode - div(id="qrcode") #{ otpauth_url } - p - a(href=login_endpoint, id="login-button") Login - div(class="need-google-authenticator") - | Need Google Authenticator? - div(class="store-badges") - a(href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1', target="_blank") - img(alt='Get it on Google Play', src='/img/stores/googleplay-badge.svg', class="store-badge") - a(href='https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8', target="_blank") - img(alt='Get it on Apple Store' src='/img/stores/applestore-badge.svg' class="store-badge") - -block entrypoint - script(src="/js/qrcode.min.js", type="text/javascript" ) diff --git a/themes/matrix/server/src/views/u2f-register.pug b/themes/matrix/server/src/views/u2f-register.pug deleted file mode 100644 index d52eba6ca..000000000 --- a/themes/matrix/server/src/views/u2f-register.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "u2f-register"; - -block form-header - h1 Register your security key - -block content - p Touch the token to register your security key. - img(src="/img/pendrive.png" alt="pendrive") - script(src="/js/u2f-api.js", type="text/javascript") \ No newline at end of file diff --git a/themes/squares/client/src/css/.directory b/themes/squares/client/src/css/.directory deleted file mode 100644 index 6e4b3f639..000000000 --- a/themes/squares/client/src/css/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,56,41 -Version=3 -ViewMode=1 diff --git a/themes/squares/client/src/css/00-bootstrap.min.css b/themes/squares/client/src/css/00-bootstrap.min.css deleted file mode 100644 index dfeacbb88..000000000 --- a/themes/squares/client/src/css/00-bootstrap.min.css +++ /dev/null @@ -1,5768 +0,0 @@ -/*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html{ - font-family:sans-serif; - -webkit-text-size-adjust:100%; - -ms-text-size-adjust:100% -} -body{ - margin:0 -} -article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{ - display:block -} -audio,canvas,progress,video{ - display:inline-block; - vertical-align:baseline -} -audio:not([controls]){ - display:none; - height:0 -} -[hidden],template{ - display:none -} -a{ - background-color:transparent -} -a:active,a:hover{ - outline:0 -} -abbr[title]{ - border-bottom:1px dotted -} -b,strong{ - font-weight:700 -} -dfn{ - font-style:italic -} -h1{ - margin:.67em 0; - font-size:2em -} -mark{ - color:#000; - background:#ff0 -} -small{ - font-size:80% -} -sub,sup{ - position:relative; - font-size:75%; - line-height:0; - vertical-align:baseline -} -sup{ - top:-.5em -} -sub{ - bottom:-.25em -} -img{ - border:0 -} -svg:not(:root){ - overflow:hidden -} -figure{ - margin:1em 40px -} -hr{ - height:0; - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box -} -pre{ - overflow:auto -} -code,kbd,pre,samp{ - font-family:monospace,monospace; - font-size:1em -} -button,input,optgroup,select,textarea{ - margin:0; - font:inherit; - color:inherit -} -button{ - overflow:visible -} -button,select{ - text-transform:none -} -button,html input[type=button],input[type=reset],input[type=submit]{ - -webkit-appearance:button; - cursor:pointer -} -button[disabled],html input[disabled]{ - cursor:default -} -button::-moz-focus-inner,input::-moz-focus-inner{ - padding:0; - border:0 -} -input{ - line-height:normal -} -input[type=checkbox],input[type=radio]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - padding:0 -} -input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{ - height:auto -} -input[type=search]{ - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box; - -webkit-appearance:textfield -} -input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{ - -webkit-appearance:none -} -fieldset{ - padding:.35em .625em .75em; - margin:0 2px; - border:1px solid silver -} -legend{ - padding:0; - border:0 -} -textarea{ - overflow:auto -} -optgroup{ - font-weight:700 -} -table{ - border-spacing:0; - border-collapse:collapse -} -td,th{ - padding:0 -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print{ - *,:after,:before{ - color:#000!important; - text-shadow:none!important; - background:0 0!important; - -webkit-box-shadow:none!important; - box-shadow:none!important - } - a,a:visited{ - text-decoration:underline - } - a[href]:after{ - content:" (" attr(href) ")" - } - abbr[title]:after{ - content:" (" attr(title) ")" - } - a[href^="javascript:"]:after,a[href^="#"]:after{ - content:"" - } - blockquote,pre{ - border:1px solid #999; - page-break-inside:avoid - } - thead{ - display:table-header-group - } - img,tr{ - page-break-inside:avoid - } - img{ - max-width:100%!important - } - h2,h3,p{ - orphans:3; - widows:3 - } - h2,h3{ - page-break-after:avoid - } - .navbar{ - display:none - } - .btn>.caret,.dropup>.btn>.caret{ - border-top-color:#000!important - } - .label{ - border:1px solid #000 - } - .table{ - border-collapse:collapse!important - } - .table td,.table th{ - background-color:#fff!important - } - .table-bordered td,.table-bordered th{ - border:1px solid #ddd!important - } -} -@font-face{ - font-family:'Glyphicons Halflings'; - src:url(../fonts/glyphicons-halflings-regular.eot); - src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg') -} -.glyphicon{ - position:relative; - top:1px; - display:inline-block; - font-family:'Glyphicons Halflings'; - font-style:normal; - font-weight:400; - line-height:1; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale -} -.glyphicon-asterisk:before{ - content:"\002a" -} -.glyphicon-plus:before{ - content:"\002b" -} -.glyphicon-eur:before,.glyphicon-euro:before{ - content:"\20ac" -} -.glyphicon-minus:before{ - content:"\2212" -} -.glyphicon-cloud:before{ - content:"\2601" -} -.glyphicon-envelope:before{ - content:"\2709" -} -.glyphicon-pencil:before{ - content:"\270f" -} -.glyphicon-glass:before{ - content:"\e001" -} -.glyphicon-music:before{ - content:"\e002" -} -.glyphicon-search:before{ - content:"\e003" -} -.glyphicon-heart:before{ - content:"\e005" -} -.glyphicon-star:before{ - content:"\e006" -} -.glyphicon-star-empty:before{ - content:"\e007" -} -.glyphicon-user:before{ - content:"\e008" -} -.glyphicon-film:before{ - content:"\e009" -} -.glyphicon-th-large:before{ - content:"\e010" -} -.glyphicon-th:before{ - content:"\e011" -} -.glyphicon-th-list:before{ - content:"\e012" -} -.glyphicon-ok:before{ - content:"\e013" -} -.glyphicon-remove:before{ - content:"\e014" -} -.glyphicon-zoom-in:before{ - content:"\e015" -} -.glyphicon-zoom-out:before{ - content:"\e016" -} -.glyphicon-off:before{ - content:"\e017" -} -.glyphicon-signal:before{ - content:"\e018" -} -.glyphicon-cog:before{ - content:"\e019" -} -.glyphicon-trash:before{ - content:"\e020" -} -.glyphicon-home:before{ - content:"\e021" -} -.glyphicon-file:before{ - content:"\e022" -} -.glyphicon-time:before{ - content:"\e023" -} -.glyphicon-road:before{ - content:"\e024" -} -.glyphicon-download-alt:before{ - content:"\e025" -} -.glyphicon-download:before{ - content:"\e026" -} -.glyphicon-upload:before{ - content:"\e027" -} -.glyphicon-inbox:before{ - content:"\e028" -} -.glyphicon-play-circle:before{ - content:"\e029" -} -.glyphicon-repeat:before{ - content:"\e030" -} -.glyphicon-refresh:before{ - content:"\e031" -} -.glyphicon-list-alt:before{ - content:"\e032" -} -.glyphicon-lock:before{ - content:"\e033" -} -.glyphicon-flag:before{ - content:"\e034" -} -.glyphicon-headphones:before{ - content:"\e035" -} -.glyphicon-volume-off:before{ - content:"\e036" -} -.glyphicon-volume-down:before{ - content:"\e037" -} -.glyphicon-volume-up:before{ - content:"\e038" -} -.glyphicon-qrcode:before{ - content:"\e039" -} -.glyphicon-barcode:before{ - content:"\e040" -} -.glyphicon-tag:before{ - content:"\e041" -} -.glyphicon-tags:before{ - content:"\e042" -} -.glyphicon-book:before{ - content:"\e043" -} -.glyphicon-bookmark:before{ - content:"\e044" -} -.glyphicon-print:before{ - content:"\e045" -} -.glyphicon-camera:before{ - content:"\e046" -} -.glyphicon-font:before{ - content:"\e047" -} -.glyphicon-bold:before{ - content:"\e048" -} -.glyphicon-italic:before{ - content:"\e049" -} -.glyphicon-text-height:before{ - content:"\e050" -} -.glyphicon-text-width:before{ - content:"\e051" -} -.glyphicon-align-left:before{ - content:"\e052" -} -.glyphicon-align-center:before{ - content:"\e053" -} -.glyphicon-align-right:before{ - content:"\e054" -} -.glyphicon-align-justify:before{ - content:"\e055" -} -.glyphicon-list:before{ - content:"\e056" -} -.glyphicon-indent-left:before{ - content:"\e057" -} -.glyphicon-indent-right:before{ - content:"\e058" -} -.glyphicon-facetime-video:before{ - content:"\e059" -} -.glyphicon-picture:before{ - content:"\e060" -} -.glyphicon-map-marker:before{ - content:"\e062" -} -.glyphicon-adjust:before{ - content:"\e063" -} -.glyphicon-tint:before{ - content:"\e064" -} -.glyphicon-edit:before{ - content:"\e065" -} -.glyphicon-share:before{ - content:"\e066" -} -.glyphicon-check:before{ - content:"\e067" -} -.glyphicon-move:before{ - content:"\e068" -} -.glyphicon-step-backward:before{ - content:"\e069" -} -.glyphicon-fast-backward:before{ - content:"\e070" -} -.glyphicon-backward:before{ - content:"\e071" -} -.glyphicon-play:before{ - content:"\e072" -} -.glyphicon-pause:before{ - content:"\e073" -} -.glyphicon-stop:before{ - content:"\e074" -} -.glyphicon-forward:before{ - content:"\e075" -} -.glyphicon-fast-forward:before{ - content:"\e076" -} -.glyphicon-step-forward:before{ - content:"\e077" -} -.glyphicon-eject:before{ - content:"\e078" -} -.glyphicon-chevron-left:before{ - content:"\e079" -} -.glyphicon-chevron-right:before{ - content:"\e080" -} -.glyphicon-plus-sign:before{ - content:"\e081" -} -.glyphicon-minus-sign:before{ - content:"\e082" -} -.glyphicon-remove-sign:before{ - content:"\e083" -} -.glyphicon-ok-sign:before{ - content:"\e084" -} -.glyphicon-question-sign:before{ - content:"\e085" -} -.glyphicon-info-sign:before{ - content:"\e086" -} -.glyphicon-screenshot:before{ - content:"\e087" -} -.glyphicon-remove-circle:before{ - content:"\e088" -} -.glyphicon-ok-circle:before{ - content:"\e089" -} -.glyphicon-ban-circle:before{ - content:"\e090" -} -.glyphicon-arrow-left:before{ - content:"\e091" -} -.glyphicon-arrow-right:before{ - content:"\e092" -} -.glyphicon-arrow-up:before{ - content:"\e093" -} -.glyphicon-arrow-down:before{ - content:"\e094" -} -.glyphicon-share-alt:before{ - content:"\e095" -} -.glyphicon-resize-full:before{ - content:"\e096" -} -.glyphicon-resize-small:before{ - content:"\e097" -} -.glyphicon-exclamation-sign:before{ - content:"\e101" -} -.glyphicon-gift:before{ - content:"\e102" -} -.glyphicon-leaf:before{ - content:"\e103" -} -.glyphicon-fire:before{ - content:"\e104" -} -.glyphicon-eye-open:before{ - content:"\e105" -} -.glyphicon-eye-close:before{ - content:"\e106" -} -.glyphicon-warning-sign:before{ - content:"\e107" -} -.glyphicon-plane:before{ - content:"\e108" -} -.glyphicon-calendar:before{ - content:"\e109" -} -.glyphicon-random:before{ - content:"\e110" -} -.glyphicon-comment:before{ - content:"\e111" -} -.glyphicon-magnet:before{ - content:"\e112" -} -.glyphicon-chevron-up:before{ - content:"\e113" -} -.glyphicon-chevron-down:before{ - content:"\e114" -} -.glyphicon-retweet:before{ - content:"\e115" -} -.glyphicon-shopping-cart:before{ - content:"\e116" -} -.glyphicon-folder-close:before{ - content:"\e117" -} -.glyphicon-folder-open:before{ - content:"\e118" -} -.glyphicon-resize-vertical:before{ - content:"\e119" -} -.glyphicon-resize-horizontal:before{ - content:"\e120" -} -.glyphicon-hdd:before{ - content:"\e121" -} -.glyphicon-bullhorn:before{ - content:"\e122" -} -.glyphicon-bell:before{ - content:"\e123" -} -.glyphicon-certificate:before{ - content:"\e124" -} -.glyphicon-thumbs-up:before{ - content:"\e125" -} -.glyphicon-thumbs-down:before{ - content:"\e126" -} -.glyphicon-hand-right:before{ - content:"\e127" -} -.glyphicon-hand-left:before{ - content:"\e128" -} -.glyphicon-hand-up:before{ - content:"\e129" -} -.glyphicon-hand-down:before{ - content:"\e130" -} -.glyphicon-circle-arrow-right:before{ - content:"\e131" -} -.glyphicon-circle-arrow-left:before{ - content:"\e132" -} -.glyphicon-circle-arrow-up:before{ - content:"\e133" -} -.glyphicon-circle-arrow-down:before{ - content:"\e134" -} -.glyphicon-globe:before{ - content:"\e135" -} -.glyphicon-wrench:before{ - content:"\e136" -} -.glyphicon-tasks:before{ - content:"\e137" -} -.glyphicon-filter:before{ - content:"\e138" -} -.glyphicon-briefcase:before{ - content:"\e139" -} -.glyphicon-fullscreen:before{ - content:"\e140" -} -.glyphicon-dashboard:before{ - content:"\e141" -} -.glyphicon-paperclip:before{ - content:"\e142" -} -.glyphicon-heart-empty:before{ - content:"\e143" -} -.glyphicon-link:before{ - content:"\e144" -} -.glyphicon-phone:before{ - content:"\e145" -} -.glyphicon-pushpin:before{ - content:"\e146" -} -.glyphicon-usd:before{ - content:"\e148" -} -.glyphicon-gbp:before{ - content:"\e149" -} -.glyphicon-sort:before{ - content:"\e150" -} -.glyphicon-sort-by-alphabet:before{ - content:"\e151" -} -.glyphicon-sort-by-alphabet-alt:before{ - content:"\e152" -} -.glyphicon-sort-by-order:before{ - content:"\e153" -} -.glyphicon-sort-by-order-alt:before{ - content:"\e154" -} -.glyphicon-sort-by-attributes:before{ - content:"\e155" -} -.glyphicon-sort-by-attributes-alt:before{ - content:"\e156" -} -.glyphicon-unchecked:before{ - content:"\e157" -} -.glyphicon-expand:before{ - content:"\e158" -} -.glyphicon-collapse-down:before{ - content:"\e159" -} -.glyphicon-collapse-up:before{ - content:"\e160" -} -.glyphicon-log-in:before{ - content:"\e161" -} -.glyphicon-flash:before{ - content:"\e162" -} -.glyphicon-log-out:before{ - content:"\e163" -} -.glyphicon-new-window:before{ - content:"\e164" -} -.glyphicon-record:before{ - content:"\e165" -} -.glyphicon-save:before{ - content:"\e166" -} -.glyphicon-open:before{ - content:"\e167" -} -.glyphicon-saved:before{ - content:"\e168" -} -.glyphicon-import:before{ - content:"\e169" -} -.glyphicon-export:before{ - content:"\e170" -} -.glyphicon-send:before{ - content:"\e171" -} -.glyphicon-floppy-disk:before{ - content:"\e172" -} -.glyphicon-floppy-saved:before{ - content:"\e173" -} -.glyphicon-floppy-remove:before{ - content:"\e174" -} -.glyphicon-floppy-save:before{ - content:"\e175" -} -.glyphicon-floppy-open:before{ - content:"\e176" -} -.glyphicon-credit-card:before{ - content:"\e177" -} -.glyphicon-transfer:before{ - content:"\e178" -} -.glyphicon-cutlery:before{ - content:"\e179" -} -.glyphicon-header:before{ - content:"\e180" -} -.glyphicon-compressed:before{ - content:"\e181" -} -.glyphicon-earphone:before{ - content:"\e182" -} -.glyphicon-phone-alt:before{ - content:"\e183" -} -.glyphicon-tower:before{ - content:"\e184" -} -.glyphicon-stats:before{ - content:"\e185" -} -.glyphicon-sd-video:before{ - content:"\e186" -} -.glyphicon-hd-video:before{ - content:"\e187" -} -.glyphicon-subtitles:before{ - content:"\e188" -} -.glyphicon-sound-stereo:before{ - content:"\e189" -} -.glyphicon-sound-dolby:before{ - content:"\e190" -} -.glyphicon-sound-5-1:before{ - content:"\e191" -} -.glyphicon-sound-6-1:before{ - content:"\e192" -} -.glyphicon-sound-7-1:before{ - content:"\e193" -} -.glyphicon-copyright-mark:before{ - content:"\e194" -} -.glyphicon-registration-mark:before{ - content:"\e195" -} -.glyphicon-cloud-download:before{ - content:"\e197" -} -.glyphicon-cloud-upload:before{ - content:"\e198" -} -.glyphicon-tree-conifer:before{ - content:"\e199" -} -.glyphicon-tree-deciduous:before{ - content:"\e200" -} -.glyphicon-cd:before{ - content:"\e201" -} -.glyphicon-save-file:before{ - content:"\e202" -} -.glyphicon-open-file:before{ - content:"\e203" -} -.glyphicon-level-up:before{ - content:"\e204" -} -.glyphicon-copy:before{ - content:"\e205" -} -.glyphicon-paste:before{ - content:"\e206" -} -.glyphicon-alert:before{ - content:"\e209" -} -.glyphicon-equalizer:before{ - content:"\e210" -} -.glyphicon-king:before{ - content:"\e211" -} -.glyphicon-queen:before{ - content:"\e212" -} -.glyphicon-pawn:before{ - content:"\e213" -} -.glyphicon-bishop:before{ - content:"\e214" -} -.glyphicon-knight:before{ - content:"\e215" -} -.glyphicon-baby-formula:before{ - content:"\e216" -} -.glyphicon-tent:before{ - content:"\26fa" -} -.glyphicon-blackboard:before{ - content:"\e218" -} -.glyphicon-bed:before{ - content:"\e219" -} -.glyphicon-apple:before{ - content:"\f8ff" -} -.glyphicon-erase:before{ - content:"\e221" -} -.glyphicon-hourglass:before{ - content:"\231b" -} -.glyphicon-lamp:before{ - content:"\e223" -} -.glyphicon-duplicate:before{ - content:"\e224" -} -.glyphicon-piggy-bank:before{ - content:"\e225" -} -.glyphicon-scissors:before{ - content:"\e226" -} -.glyphicon-bitcoin:before{ - content:"\e227" -} -.glyphicon-btc:before{ - content:"\e227" -} -.glyphicon-xbt:before{ - content:"\e227" -} -.glyphicon-yen:before{ - content:"\00a5" -} -.glyphicon-jpy:before{ - content:"\00a5" -} -.glyphicon-ruble:before{ - content:"\20bd" -} -.glyphicon-rub:before{ - content:"\20bd" -} -.glyphicon-scale:before{ - content:"\e230" -} -.glyphicon-ice-lolly:before{ - content:"\e231" -} -.glyphicon-ice-lolly-tasted:before{ - content:"\e232" -} -.glyphicon-education:before{ - content:"\e233" -} -.glyphicon-option-horizontal:before{ - content:"\e234" -} -.glyphicon-option-vertical:before{ - content:"\e235" -} -.glyphicon-menu-hamburger:before{ - content:"\e236" -} -.glyphicon-modal-window:before{ - content:"\e237" -} -.glyphicon-oil:before{ - content:"\e238" -} -.glyphicon-grain:before{ - content:"\e239" -} -.glyphicon-sunglasses:before{ - content:"\e240" -} -.glyphicon-text-size:before{ - content:"\e241" -} -.glyphicon-text-color:before{ - content:"\e242" -} -.glyphicon-text-background:before{ - content:"\e243" -} -.glyphicon-object-align-top:before{ - content:"\e244" -} -.glyphicon-object-align-bottom:before{ - content:"\e245" -} -.glyphicon-object-align-horizontal:before{ - content:"\e246" -} -.glyphicon-object-align-left:before{ - content:"\e247" -} -.glyphicon-object-align-vertical:before{ - content:"\e248" -} -.glyphicon-object-align-right:before{ - content:"\e249" -} -.glyphicon-triangle-right:before{ - content:"\e250" -} -.glyphicon-triangle-left:before{ - content:"\e251" -} -.glyphicon-triangle-bottom:before{ - content:"\e252" -} -.glyphicon-triangle-top:before{ - content:"\e253" -} -.glyphicon-console:before{ - content:"\e254" -} -.glyphicon-superscript:before{ - content:"\e255" -} -.glyphicon-subscript:before{ - content:"\e256" -} -.glyphicon-menu-left:before{ - content:"\e257" -} -.glyphicon-menu-right:before{ - content:"\e258" -} -.glyphicon-menu-down:before{ - content:"\e259" -} -.glyphicon-menu-up:before{ - content:"\e260" -} -*{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -:after,:before{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -html{ - font-size:10px; - -webkit-tap-highlight-color:rgba(0,0,0,0) -} -body{ - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - line-height:1.42857143; - color:#333; - background-color:#fff -} -button,input,select,textarea{ - font-family:inherit; - font-size:inherit; - line-height:inherit -} -a{ - color:#337ab7; - text-decoration:none -} -a:focus,a:hover{ - color:#23527c; - text-decoration:underline -} -a:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -figure{ - margin:0 -} -img{ - vertical-align:middle -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{ - display:block; - max-width:100%; - height:auto -} -.img-rounded{ - border-radius:6px -} -.img-thumbnail{ - display:inline-block; - max-width:100%; - height:auto; - padding:4px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:all .2s ease-in-out; - -o-transition:all .2s ease-in-out; - transition:all .2s ease-in-out -} -.img-circle{ - border-radius:50% -} -hr{ - margin-top:20px; - margin-bottom:20px; - border:0; - border-top:1px solid #eee -} -.sr-only{ - position:absolute; - width:1px; - height:1px; - padding:0; - margin:-1px; - overflow:hidden; - clip:rect(0,0,0,0); - border:0 -} -.sr-only-focusable:active,.sr-only-focusable:focus{ - position:static; - width:auto; - height:auto; - margin:0; - overflow:visible; - clip:auto -} -[role=button]{ - cursor:pointer -} -.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{ - font-family:inherit; - font-weight:500; - line-height:1.1; - color:inherit -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-weight:400; - line-height:1; - color:#777 -} -.h1,.h2,.h3,h1,h2,h3{ - margin-top:20px; - margin-bottom:10px -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{ - font-size:65% -} -.h4,.h5,.h6,h4,h5,h6{ - margin-top:10px; - margin-bottom:10px -} -.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-size:75% -} -.h1,h1{ - font-size:36px -} -.h2,h2{ - font-size:30px -} -.h3,h3{ - font-size:24px -} -.h4,h4{ - font-size:18px -} -.h5,h5{ - font-size:14px -} -.h6,h6{ - font-size:12px -} -p{ - margin:0 0 10px -} -.lead{ - margin-bottom:20px; - font-size:16px; - font-weight:300; - line-height:1.4 -} -@media (min-width:768px){ - .lead{ - font-size:21px - } -} -.small,small{ - font-size:85% -} -.mark,mark{ - padding:.2em; - background-color:#fcf8e3 -} -.text-left{ - text-align:left -} -.text-right{ - text-align:right -} -.text-center{ - text-align:center -} -.text-justify{ - text-align:justify -} -.text-nowrap{ - white-space:nowrap -} -.text-lowercase{ - text-transform:lowercase -} -.text-uppercase{ - text-transform:uppercase -} -.text-capitalize{ - text-transform:capitalize -} -.text-muted{ - color:#777 -} -.text-primary{ - color:#337ab7 -} -a.text-primary:focus,a.text-primary:hover{ - color:#286090 -} -.text-success{ - color:#3c763d -} -a.text-success:focus,a.text-success:hover{ - color:#2b542c -} -.text-info{ - color:#31708f -} -a.text-info:focus,a.text-info:hover{ - color:#245269 -} -.text-warning{ - color:#8a6d3b -} -a.text-warning:focus,a.text-warning:hover{ - color:#66512c -} -.text-danger{ - color:#a94442 -} -a.text-danger:focus,a.text-danger:hover{ - color:#843534 -} -.bg-primary{ - color:#fff; - background-color:#337ab7 -} -a.bg-primary:focus,a.bg-primary:hover{ - background-color:#286090 -} -.bg-success{ - background-color:#dff0d8 -} -a.bg-success:focus,a.bg-success:hover{ - background-color:#c1e2b3 -} -.bg-info{ - background-color:#d9edf7 -} -a.bg-info:focus,a.bg-info:hover{ - background-color:#afd9ee -} -.bg-warning{ - background-color:#fcf8e3 -} -a.bg-warning:focus,a.bg-warning:hover{ - background-color:#f7ecb5 -} -.bg-danger{ - background-color:#f2dede -} -a.bg-danger:focus,a.bg-danger:hover{ - background-color:#e4b9b9 -} -.page-header{ - padding-bottom:9px; - margin:40px 0 20px; - border-bottom:1px solid #eee -} -ol,ul{ - margin-top:0; - margin-bottom:10px -} -ol ol,ol ul,ul ol,ul ul{ - margin-bottom:0 -} -.list-unstyled{ - padding-left:0; - list-style:none -} -.list-inline{ - padding-left:0; - margin-left:-5px; - list-style:none -} -.list-inline>li{ - display:inline-block; - padding-right:5px; - padding-left:5px -} -dl{ - margin-top:0; - margin-bottom:20px -} -dd,dt{ - line-height:1.42857143 -} -dt{ - font-weight:700 -} -dd{ - margin-left:0 -} -@media (min-width:768px){ - .dl-horizontal dt{ - float:left; - width:160px; - overflow:hidden; - clear:left; - text-align:right; - text-overflow:ellipsis; - white-space:nowrap - } - .dl-horizontal dd{ - margin-left:180px - } -} -abbr[data-original-title],abbr[title]{ - cursor:help; - border-bottom:1px dotted #777 -} -.initialism{ - font-size:90%; - text-transform:uppercase -} -blockquote{ - padding:10px 20px; - margin:0 0 20px; - font-size:17.5px; - border-left:5px solid #eee -} -blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{ - margin-bottom:0 -} -blockquote .small,blockquote footer,blockquote small{ - display:block; - font-size:80%; - line-height:1.42857143; - color:#777 -} -blockquote .small:before,blockquote footer:before,blockquote small:before{ - content:'\2014 \00A0' -} -.blockquote-reverse,blockquote.pull-right{ - padding-right:15px; - padding-left:0; - text-align:right; - border-right:5px solid #eee; - border-left:0 -} -.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{ - content:'' -} -.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{ - content:'\00A0 \2014' -} -address{ - margin-bottom:20px; - font-style:normal; - line-height:1.42857143 -} -code,kbd,pre,samp{ - font-family:Menlo,Monaco,Consolas,"Courier New",monospace -} -code{ - padding:2px 4px; - font-size:90%; - color:#c7254e; - background-color:#f9f2f4; - border-radius:4px -} -kbd{ - padding:2px 4px; - font-size:90%; - color:#fff; - background-color:#333; - border-radius:3px; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.25) -} -kbd kbd{ - padding:0; - font-size:100%; - font-weight:700; - -webkit-box-shadow:none; - box-shadow:none -} -pre{ - display:block; - padding:9.5px; - margin:0 0 10px; - font-size:13px; - line-height:1.42857143; - color:#333; - word-break:break-all; - word-wrap:break-word; - background-color:#f5f5f5; - border:1px solid #ccc; - border-radius:4px -} -pre code{ - padding:0; - font-size:inherit; - color:inherit; - white-space:pre-wrap; - background-color:transparent; - border-radius:0 -} -.pre-scrollable{ - max-height:340px; - overflow-y:scroll -} -.container{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -@media (min-width:768px){ - .container{ - width:750px - } -} -@media (min-width:992px){ - .container{ - width:970px - } -} -@media (min-width:1200px){ - .container{ - width:1170px - } -} -.container-fluid{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -.row{ - margin-right:-15px; - margin-left:-15px -} -.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - position:relative; - min-height:1px; - padding-right:15px; - padding-left:15px -} -.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - float:left -} -.col-xs-12{ - width:100% -} -.col-xs-11{ - width:91.66666667% -} -.col-xs-10{ - width:83.33333333% -} -.col-xs-9{ - width:75% -} -.col-xs-8{ - width:66.66666667% -} -.col-xs-7{ - width:58.33333333% -} -.col-xs-6{ - width:50% -} -.col-xs-5{ - width:41.66666667% -} -.col-xs-4{ - width:33.33333333% -} -.col-xs-3{ - width:25% -} -.col-xs-2{ - width:16.66666667% -} -.col-xs-1{ - width:8.33333333% -} -.col-xs-pull-12{ - right:100% -} -.col-xs-pull-11{ - right:91.66666667% -} -.col-xs-pull-10{ - right:83.33333333% -} -.col-xs-pull-9{ - right:75% -} -.col-xs-pull-8{ - right:66.66666667% -} -.col-xs-pull-7{ - right:58.33333333% -} -.col-xs-pull-6{ - right:50% -} -.col-xs-pull-5{ - right:41.66666667% -} -.col-xs-pull-4{ - right:33.33333333% -} -.col-xs-pull-3{ - right:25% -} -.col-xs-pull-2{ - right:16.66666667% -} -.col-xs-pull-1{ - right:8.33333333% -} -.col-xs-pull-0{ - right:auto -} -.col-xs-push-12{ - left:100% -} -.col-xs-push-11{ - left:91.66666667% -} -.col-xs-push-10{ - left:83.33333333% -} -.col-xs-push-9{ - left:75% -} -.col-xs-push-8{ - left:66.66666667% -} -.col-xs-push-7{ - left:58.33333333% -} -.col-xs-push-6{ - left:50% -} -.col-xs-push-5{ - left:41.66666667% -} -.col-xs-push-4{ - left:33.33333333% -} -.col-xs-push-3{ - left:25% -} -.col-xs-push-2{ - left:16.66666667% -} -.col-xs-push-1{ - left:8.33333333% -} -.col-xs-push-0{ - left:auto -} -.col-xs-offset-12{ - margin-left:100% -} -.col-xs-offset-11{ - margin-left:91.66666667% -} -.col-xs-offset-10{ - margin-left:83.33333333% -} -.col-xs-offset-9{ - margin-left:75% -} -.col-xs-offset-8{ - margin-left:66.66666667% -} -.col-xs-offset-7{ - margin-left:58.33333333% -} -.col-xs-offset-6{ - margin-left:50% -} -.col-xs-offset-5{ - margin-left:41.66666667% -} -.col-xs-offset-4{ - margin-left:33.33333333% -} -.col-xs-offset-3{ - margin-left:25% -} -.col-xs-offset-2{ - margin-left:16.66666667% -} -.col-xs-offset-1{ - margin-left:8.33333333% -} -.col-xs-offset-0{ - margin-left:0 -} -@media (min-width:768px){ - .col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{ - float:left - } - .col-sm-12{ - width:100% - } - .col-sm-11{ - width:91.66666667% - } - .col-sm-10{ - width:83.33333333% - } - .col-sm-9{ - width:75% - } - .col-sm-8{ - width:66.66666667% - } - .col-sm-7{ - width:58.33333333% - } - .col-sm-6{ - width:50% - } - .col-sm-5{ - width:41.66666667% - } - .col-sm-4{ - width:33.33333333% - } - .col-sm-3{ - width:25% - } - .col-sm-2{ - width:16.66666667% - } - .col-sm-1{ - width:8.33333333% - } - .col-sm-pull-12{ - right:100% - } - .col-sm-pull-11{ - right:91.66666667% - } - .col-sm-pull-10{ - right:83.33333333% - } - .col-sm-pull-9{ - right:75% - } - .col-sm-pull-8{ - right:66.66666667% - } - .col-sm-pull-7{ - right:58.33333333% - } - .col-sm-pull-6{ - right:50% - } - .col-sm-pull-5{ - right:41.66666667% - } - .col-sm-pull-4{ - right:33.33333333% - } - .col-sm-pull-3{ - right:25% - } - .col-sm-pull-2{ - right:16.66666667% - } - .col-sm-pull-1{ - right:8.33333333% - } - .col-sm-pull-0{ - right:auto - } - .col-sm-push-12{ - left:100% - } - .col-sm-push-11{ - left:91.66666667% - } - .col-sm-push-10{ - left:83.33333333% - } - .col-sm-push-9{ - left:75% - } - .col-sm-push-8{ - left:66.66666667% - } - .col-sm-push-7{ - left:58.33333333% - } - .col-sm-push-6{ - left:50% - } - .col-sm-push-5{ - left:41.66666667% - } - .col-sm-push-4{ - left:33.33333333% - } - .col-sm-push-3{ - left:25% - } - .col-sm-push-2{ - left:16.66666667% - } - .col-sm-push-1{ - left:8.33333333% - } - .col-sm-push-0{ - left:auto - } - .col-sm-offset-12{ - margin-left:100% - } - .col-sm-offset-11{ - margin-left:91.66666667% - } - .col-sm-offset-10{ - margin-left:83.33333333% - } - .col-sm-offset-9{ - margin-left:75% - } - .col-sm-offset-8{ - margin-left:66.66666667% - } - .col-sm-offset-7{ - margin-left:58.33333333% - } - .col-sm-offset-6{ - margin-left:50% - } - .col-sm-offset-5{ - margin-left:41.66666667% - } - .col-sm-offset-4{ - margin-left:33.33333333% - } - .col-sm-offset-3{ - margin-left:25% - } - .col-sm-offset-2{ - margin-left:16.66666667% - } - .col-sm-offset-1{ - margin-left:8.33333333% - } - .col-sm-offset-0{ - margin-left:0 - } -} -@media (min-width:992px){ - .col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{ - float:left - } - .col-md-12{ - width:100% - } - .col-md-11{ - width:91.66666667% - } - .col-md-10{ - width:83.33333333% - } - .col-md-9{ - width:75% - } - .col-md-8{ - width:66.66666667% - } - .col-md-7{ - width:58.33333333% - } - .col-md-6{ - width:50% - } - .col-md-5{ - width:41.66666667% - } - .col-md-4{ - width:33.33333333% - } - .col-md-3{ - width:25% - } - .col-md-2{ - width:16.66666667% - } - .col-md-1{ - width:8.33333333% - } - .col-md-pull-12{ - right:100% - } - .col-md-pull-11{ - right:91.66666667% - } - .col-md-pull-10{ - right:83.33333333% - } - .col-md-pull-9{ - right:75% - } - .col-md-pull-8{ - right:66.66666667% - } - .col-md-pull-7{ - right:58.33333333% - } - .col-md-pull-6{ - right:50% - } - .col-md-pull-5{ - right:41.66666667% - } - .col-md-pull-4{ - right:33.33333333% - } - .col-md-pull-3{ - right:25% - } - .col-md-pull-2{ - right:16.66666667% - } - .col-md-pull-1{ - right:8.33333333% - } - .col-md-pull-0{ - right:auto - } - .col-md-push-12{ - left:100% - } - .col-md-push-11{ - left:91.66666667% - } - .col-md-push-10{ - left:83.33333333% - } - .col-md-push-9{ - left:75% - } - .col-md-push-8{ - left:66.66666667% - } - .col-md-push-7{ - left:58.33333333% - } - .col-md-push-6{ - left:50% - } - .col-md-push-5{ - left:41.66666667% - } - .col-md-push-4{ - left:33.33333333% - } - .col-md-push-3{ - left:25% - } - .col-md-push-2{ - left:16.66666667% - } - .col-md-push-1{ - left:8.33333333% - } - .col-md-push-0{ - left:auto - } - .col-md-offset-12{ - margin-left:100% - } - .col-md-offset-11{ - margin-left:91.66666667% - } - .col-md-offset-10{ - margin-left:83.33333333% - } - .col-md-offset-9{ - margin-left:75% - } - .col-md-offset-8{ - margin-left:66.66666667% - } - .col-md-offset-7{ - margin-left:58.33333333% - } - .col-md-offset-6{ - margin-left:50% - } - .col-md-offset-5{ - margin-left:41.66666667% - } - .col-md-offset-4{ - margin-left:33.33333333% - } - .col-md-offset-3{ - margin-left:25% - } - .col-md-offset-2{ - margin-left:16.66666667% - } - .col-md-offset-1{ - margin-left:8.33333333% - } - .col-md-offset-0{ - margin-left:0 - } -} -@media (min-width:1200px){ - .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{ - float:left - } - .col-lg-12{ - width:100% - } - .col-lg-11{ - width:91.66666667% - } - .col-lg-10{ - width:83.33333333% - } - .col-lg-9{ - width:75% - } - .col-lg-8{ - width:66.66666667% - } - .col-lg-7{ - width:58.33333333% - } - .col-lg-6{ - width:50% - } - .col-lg-5{ - width:41.66666667% - } - .col-lg-4{ - width:33.33333333% - } - .col-lg-3{ - width:25% - } - .col-lg-2{ - width:16.66666667% - } - .col-lg-1{ - width:8.33333333% - } - .col-lg-pull-12{ - right:100% - } - .col-lg-pull-11{ - right:91.66666667% - } - .col-lg-pull-10{ - right:83.33333333% - } - .col-lg-pull-9{ - right:75% - } - .col-lg-pull-8{ - right:66.66666667% - } - .col-lg-pull-7{ - right:58.33333333% - } - .col-lg-pull-6{ - right:50% - } - .col-lg-pull-5{ - right:41.66666667% - } - .col-lg-pull-4{ - right:33.33333333% - } - .col-lg-pull-3{ - right:25% - } - .col-lg-pull-2{ - right:16.66666667% - } - .col-lg-pull-1{ - right:8.33333333% - } - .col-lg-pull-0{ - right:auto - } - .col-lg-push-12{ - left:100% - } - .col-lg-push-11{ - left:91.66666667% - } - .col-lg-push-10{ - left:83.33333333% - } - .col-lg-push-9{ - left:75% - } - .col-lg-push-8{ - left:66.66666667% - } - .col-lg-push-7{ - left:58.33333333% - } - .col-lg-push-6{ - left:50% - } - .col-lg-push-5{ - left:41.66666667% - } - .col-lg-push-4{ - left:33.33333333% - } - .col-lg-push-3{ - left:25% - } - .col-lg-push-2{ - left:16.66666667% - } - .col-lg-push-1{ - left:8.33333333% - } - .col-lg-push-0{ - left:auto - } - .col-lg-offset-12{ - margin-left:100% - } - .col-lg-offset-11{ - margin-left:91.66666667% - } - .col-lg-offset-10{ - margin-left:83.33333333% - } - .col-lg-offset-9{ - margin-left:75% - } - .col-lg-offset-8{ - margin-left:66.66666667% - } - .col-lg-offset-7{ - margin-left:58.33333333% - } - .col-lg-offset-6{ - margin-left:50% - } - .col-lg-offset-5{ - margin-left:41.66666667% - } - .col-lg-offset-4{ - margin-left:33.33333333% - } - .col-lg-offset-3{ - margin-left:25% - } - .col-lg-offset-2{ - margin-left:16.66666667% - } - .col-lg-offset-1{ - margin-left:8.33333333% - } - .col-lg-offset-0{ - margin-left:0 - } -} -table{ - background-color:transparent -} -caption{ - padding-top:8px; - padding-bottom:8px; - color:#777; - text-align:left -} -th{ - text-align:left -} -.table{ - width:100%; - max-width:100%; - margin-bottom:20px -} -.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{ - padding:8px; - line-height:1.42857143; - vertical-align:top; - border-top:1px solid #ddd -} -.table>thead>tr>th{ - vertical-align:bottom; - border-bottom:2px solid #ddd -} -.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{ - border-top:0 -} -.table>tbody+tbody{ - border-top:2px solid #ddd -} -.table .table{ - background-color:#fff -} -.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{ - padding:5px -} -.table-bordered{ - border:1px solid #ddd -} -.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border:1px solid #ddd -} -.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border-bottom-width:2px -} -.table-striped>tbody>tr:nth-of-type(odd){ - background-color:#f9f9f9 -} -.table-hover>tbody>tr:hover{ - background-color:#f5f5f5 -} -table col[class*=col-]{ - position:static; - display:table-column; - float:none -} -table td[class*=col-],table th[class*=col-]{ - position:static; - display:table-cell; - float:none -} -.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{ - background-color:#f5f5f5 -} -.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{ - background-color:#e8e8e8 -} -.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{ - background-color:#dff0d8 -} -.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{ - background-color:#d0e9c6 -} -.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{ - background-color:#d9edf7 -} -.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{ - background-color:#c4e3f3 -} -.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{ - background-color:#fcf8e3 -} -.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{ - background-color:#faf2cc -} -.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{ - background-color:#f2dede -} -.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{ - background-color:#ebcccc -} -.table-responsive{ - min-height:.01%; - overflow-x:auto -} -@media screen and (max-width:767px){ - .table-responsive{ - width:100%; - margin-bottom:15px; - overflow-y:hidden; - -ms-overflow-style:-ms-autohiding-scrollbar; - border:1px solid #ddd - } - .table-responsive>.table{ - margin-bottom:0 - } - .table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{ - white-space:nowrap - } - .table-responsive>.table-bordered{ - border:0 - } - .table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 - } - .table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 - } - .table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 - } -} -fieldset{ - min-width:0; - padding:0; - margin:0; - border:0 -} -legend{ - display:block; - width:100%; - padding:0; - margin-bottom:20px; - font-size:21px; - line-height:inherit; - color:#333; - border:0; - border-bottom:1px solid #e5e5e5 -} -label{ - display:inline-block; - max-width:100%; - margin-bottom:5px; - font-weight:700 -} -input[type=search]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -input[type=checkbox],input[type=radio]{ - margin:4px 0 0; - margin-top:1px\9; - line-height:normal -} -input[type=file]{ - display:block -} -input[type=range]{ - display:block; - width:100% -} -select[multiple],select[size]{ - height:auto -} -input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -output{ - display:block; - padding-top:7px; - font-size:14px; - line-height:1.42857143; - color:#555 -} -.form-control{ - display:block; - width:100%; - height:34px; - padding:6px 12px; - font-size:14px; - line-height:1.42857143; - color:#555; - background-color:#fff; - background-image:none; - border:1px solid #ccc; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - -webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; - -o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s; - transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s -} -.form-control:focus{ - border-color:#66afe9; - outline:0; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6) -} -.form-control::-moz-placeholder{ - color:#999; - opacity:1 -} -.form-control:-ms-input-placeholder{ - color:#999 -} -.form-control::-webkit-input-placeholder{ - color:#999 -} -.form-control::-ms-expand{ - background-color:transparent; - border:0 -} -.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{ - background-color:#eee; - opacity:1 -} -.form-control[disabled],fieldset[disabled] .form-control{ - cursor:not-allowed -} -textarea.form-control{ - height:auto -} -input[type=search]{ - -webkit-appearance:none -} -@media screen and (-webkit-min-device-pixel-ratio:0){ - input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{ - line-height:34px - } - .input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{ - line-height:30px - } - .input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{ - line-height:46px - } -} -.form-group{ - margin-bottom:15px -} -.checkbox,.radio{ - position:relative; - display:block; - margin-top:10px; - margin-bottom:10px -} -.checkbox label,.radio label{ - min-height:20px; - padding-left:20px; - margin-bottom:0; - font-weight:400; - cursor:pointer -} -.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{ - position:absolute; - margin-top:4px\9; - margin-left:-20px -} -.checkbox+.checkbox,.radio+.radio{ - margin-top:-5px -} -.checkbox-inline,.radio-inline{ - position:relative; - display:inline-block; - padding-left:20px; - margin-bottom:0; - font-weight:400; - vertical-align:middle; - cursor:pointer -} -.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{ - margin-top:0; - margin-left:10px -} -fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{ - cursor:not-allowed -} -.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{ - cursor:not-allowed -} -.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{ - cursor:not-allowed -} -.form-control-static{ - min-height:34px; - padding-top:7px; - padding-bottom:7px; - margin-bottom:0 -} -.form-control-static.input-lg,.form-control-static.input-sm{ - padding-right:0; - padding-left:0 -} -.input-sm{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-sm{ - height:30px; - line-height:30px -} -select[multiple].input-sm,textarea.input-sm{ - height:auto -} -.form-group-sm .form-control{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.form-group-sm select.form-control{ - height:30px; - line-height:30px -} -.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{ - height:auto -} -.form-group-sm .form-control-static{ - height:30px; - min-height:32px; - padding:6px 10px; - font-size:12px; - line-height:1.5 -} -.input-lg{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-lg{ - height:46px; - line-height:46px -} -select[multiple].input-lg,textarea.input-lg{ - height:auto -} -.form-group-lg .form-control{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.form-group-lg select.form-control{ - height:46px; - line-height:46px -} -.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{ - height:auto -} -.form-group-lg .form-control-static{ - height:46px; - min-height:38px; - padding:11px 16px; - font-size:18px; - line-height:1.3333333 -} -.has-feedback{ - position:relative -} -.has-feedback .form-control{ - padding-right:42.5px -} -.form-control-feedback{ - position:absolute; - top:0; - right:0; - z-index:2; - display:block; - width:34px; - height:34px; - line-height:34px; - text-align:center; - pointer-events:none -} -.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{ - width:46px; - height:46px; - line-height:46px -} -.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{ - width:30px; - height:30px; - line-height:30px -} -.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{ - color:#3c763d -} -.has-success .form-control{ - border-color:#3c763d; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-success .form-control:focus{ - border-color:#2b542c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168 -} -.has-success .input-group-addon{ - color:#3c763d; - background-color:#dff0d8; - border-color:#3c763d -} -.has-success .form-control-feedback{ - color:#3c763d -} -.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{ - color:#8a6d3b -} -.has-warning .form-control{ - border-color:#8a6d3b; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-warning .form-control:focus{ - border-color:#66512c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b -} -.has-warning .input-group-addon{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#8a6d3b -} -.has-warning .form-control-feedback{ - color:#8a6d3b -} -.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{ - color:#a94442 -} -.has-error .form-control{ - border-color:#a94442; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-error .form-control:focus{ - border-color:#843534; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483 -} -.has-error .input-group-addon{ - color:#a94442; - background-color:#f2dede; - border-color:#a94442 -} -.has-error .form-control-feedback{ - color:#a94442 -} -.has-feedback label~.form-control-feedback{ - top:25px -} -.has-feedback label.sr-only~.form-control-feedback{ - top:0 -} -.help-block{ - display:block; - margin-top:5px; - margin-bottom:10px; - color:#737373 -} -@media (min-width:768px){ - .form-inline .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .form-inline .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .form-inline .form-control-static{ - display:inline-block - } - .form-inline .input-group{ - display:inline-table; - vertical-align:middle - } - .form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{ - width:auto - } - .form-inline .input-group>.form-control{ - width:100% - } - .form-inline .control-label{ - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox,.form-inline .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox label,.form-inline .radio label{ - padding-left:0 - } - .form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .form-inline .has-feedback .form-control-feedback{ - top:0 - } -} -.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{ - padding-top:7px; - margin-top:0; - margin-bottom:0 -} -.form-horizontal .checkbox,.form-horizontal .radio{ - min-height:27px -} -.form-horizontal .form-group{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .form-horizontal .control-label{ - padding-top:7px; - margin-bottom:0; - text-align:right - } -} -.form-horizontal .has-feedback .form-control-feedback{ - right:15px -} -@media (min-width:768px){ - .form-horizontal .form-group-lg .control-label{ - padding-top:11px; - font-size:18px - } -} -@media (min-width:768px){ - .form-horizontal .form-group-sm .control-label{ - padding-top:6px; - font-size:12px - } -} -.btn{ - display:inline-block; - padding:6px 12px; - margin-bottom:0; - font-size:14px; - font-weight:400; - line-height:1.42857143; - text-align:center; - white-space:nowrap; - vertical-align:middle; - -ms-touch-action:manipulation; - touch-action:manipulation; - cursor:pointer; - -webkit-user-select:none; - -moz-user-select:none; - -ms-user-select:none; - user-select:none; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -.btn.focus,.btn:focus,.btn:hover{ - color:#333; - text-decoration:none -} -.btn.active,.btn:active{ - background-image:none; - outline:0; - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn.disabled,.btn[disabled],fieldset[disabled] .btn{ - cursor:not-allowed; - filter:alpha(opacity=65); - -webkit-box-shadow:none; - box-shadow:none; - opacity:.65 -} -a.btn.disabled,fieldset[disabled] a.btn{ - pointer-events:none -} -.btn-default{ - color:#333; - background-color:#fff; - border-color:#ccc -} -.btn-default.focus,.btn-default:focus{ - color:#333; - background-color:#e6e6e6; - border-color:#8c8c8c -} -.btn-default:hover{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{ - color:#333; - background-color:#d4d4d4; - border-color:#8c8c8c -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - background-image:none -} -.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{ - background-color:#fff; - border-color:#ccc -} -.btn-default .badge{ - color:#fff; - background-color:#333 -} -.btn-primary{ - color:#fff; - background-color:#d11010; - border-color:#c40f0f -} -.btn-primary.focus,.btn-primary:focus{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary:hover{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - background-image:none -} -.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{ - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary .badge{ - color:#337ab7; - background-color:#fff -} -.btn-success{ - color:#fff; - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success.focus,.btn-success:focus{ - color:#fff; - background-color:#449d44; - border-color:#255625 -} -.btn-success:hover{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{ - color:#fff; - background-color:#398439; - border-color:#255625 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - background-image:none -} -.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{ - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success .badge{ - color:#5cb85c; - background-color:#fff -} -.btn-info{ - color:#fff; - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info.focus,.btn-info:focus{ - color:#fff; - background-color:#31b0d5; - border-color:#1b6d85 -} -.btn-info:hover{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{ - color:#fff; - background-color:#269abc; - border-color:#1b6d85 -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - background-image:none -} -.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{ - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info .badge{ - color:#5bc0de; - background-color:#fff -} -.btn-warning{ - color:#fff; - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning.focus,.btn-warning:focus{ - color:#fff; - background-color:#ec971f; - border-color:#985f0d -} -.btn-warning:hover{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{ - color:#fff; - background-color:#d58512; - border-color:#985f0d -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - background-image:none -} -.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{ - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning .badge{ - color:#f0ad4e; - background-color:#fff -} -.btn-danger{ - color:#fff; - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger.focus,.btn-danger:focus{ - color:#fff; - background-color:#c9302c; - border-color:#761c19 -} -.btn-danger:hover{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{ - color:#fff; - background-color:#ac2925; - border-color:#761c19 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - background-image:none -} -.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{ - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger .badge{ - color:#d9534f; - background-color:#fff -} -.btn-link{ - font-weight:400; - color:#337ab7; - border-radius:0 -} -.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{ - background-color:transparent; - -webkit-box-shadow:none; - box-shadow:none -} -.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{ - border-color:transparent -} -.btn-link:focus,.btn-link:hover{ - color:#23527c; - text-decoration:underline; - background-color:transparent -} -.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{ - color:#777; - text-decoration:none -} -.btn-group-lg>.btn,.btn-lg{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.btn-group-sm>.btn,.btn-sm{ - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-group-xs>.btn,.btn-xs{ - padding:1px 5px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-block{ - display:block; - width:100% -} -.btn-block+.btn-block{ - margin-top:5px -} -input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{ - width:100% -} -.fade{ - opacity:0; - -webkit-transition:opacity .15s linear; - -o-transition:opacity .15s linear; - transition:opacity .15s linear -} -.fade.in{ - opacity:1 -} -.collapse{ - display:none -} -.collapse.in{ - display:block -} -tr.collapse.in{ - display:table-row -} -tbody.collapse.in{ - display:table-row-group -} -.collapsing{ - position:relative; - height:0; - overflow:hidden; - -webkit-transition-timing-function:ease; - -o-transition-timing-function:ease; - transition-timing-function:ease; - -webkit-transition-duration:.35s; - -o-transition-duration:.35s; - transition-duration:.35s; - -webkit-transition-property:height,visibility; - -o-transition-property:height,visibility; - transition-property:height,visibility -} -.caret{ - display:inline-block; - width:0; - height:0; - margin-left:2px; - vertical-align:middle; - border-top:4px dashed; - border-top:4px solid\9; - border-right:4px solid transparent; - border-left:4px solid transparent -} -.dropdown,.dropup{ - position:relative -} -.dropdown-toggle:focus{ - outline:0 -} -.dropdown-menu{ - position:absolute; - top:100%; - left:0; - z-index:1000; - display:none; - float:left; - min-width:160px; - padding:5px 0; - margin:2px 0 0; - font-size:14px; - text-align:left; - list-style:none; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.15); - border-radius:4px; - -webkit-box-shadow:0 6px 12px rgba(0,0,0,.175); - box-shadow:0 6px 12px rgba(0,0,0,.175) -} -.dropdown-menu.pull-right{ - right:0; - left:auto -} -.dropdown-menu .divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.dropdown-menu>li>a{ - display:block; - padding:3px 20px; - clear:both; - font-weight:400; - line-height:1.42857143; - color:#333; - white-space:nowrap -} -.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{ - color:#262626; - text-decoration:none; - background-color:#f5f5f5 -} -.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{ - color:#fff; - text-decoration:none; - background-color:#337ab7; - outline:0 -} -.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - color:#777 -} -.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - text-decoration:none; - cursor:not-allowed; - background-color:transparent; - background-image:none; - filter:progid:DXImageTransform.Microsoft.gradient(enabled=false) -} -.open>.dropdown-menu{ - display:block -} -.open>a{ - outline:0 -} -.dropdown-menu-right{ - right:0; - left:auto -} -.dropdown-menu-left{ - right:auto; - left:0 -} -.dropdown-header{ - display:block; - padding:3px 20px; - font-size:12px; - line-height:1.42857143; - color:#777; - white-space:nowrap -} -.dropdown-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:990 -} -.pull-right>.dropdown-menu{ - right:0; - left:auto -} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{ - content:""; - border-top:0; - border-bottom:4px dashed; - border-bottom:4px solid\9 -} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{ - top:auto; - bottom:100%; - margin-bottom:2px -} -@media (min-width:768px){ - .navbar-right .dropdown-menu{ - right:0; - left:auto - } - .navbar-right .dropdown-menu-left{ - right:auto; - left:0 - } -} -.btn-group,.btn-group-vertical{ - position:relative; - display:inline-block; - vertical-align:middle -} -.btn-group-vertical>.btn,.btn-group>.btn{ - position:relative; - float:left -} -.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{ - z-index:2 -} -.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{ - margin-left:-1px -} -.btn-toolbar{ - margin-left:-5px -} -.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{ - float:left -} -.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{ - margin-left:5px -} -.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){ - border-radius:0 -} -.btn-group>.btn:first-child{ - margin-left:0 -} -.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group>.btn-group{ - float:left -} -.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{ - outline:0 -} -.btn-group>.btn+.dropdown-toggle{ - padding-right:8px; - padding-left:8px -} -.btn-group>.btn-lg+.dropdown-toggle{ - padding-right:12px; - padding-left:12px -} -.btn-group.open .dropdown-toggle{ - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn-group.open .dropdown-toggle.btn-link{ - -webkit-box-shadow:none; - box-shadow:none -} -.btn .caret{ - margin-left:0 -} -.btn-lg .caret{ - border-width:5px 5px 0; - border-bottom-width:0 -} -.dropup .btn-lg .caret{ - border-width:0 5px 5px -} -.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{ - display:block; - float:none; - width:100%; - max-width:100% -} -.btn-group-vertical>.btn-group>.btn{ - float:none -} -.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{ - margin-top:-1px; - margin-left:0 -} -.btn-group-vertical>.btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.btn-group-vertical>.btn:first-child:not(:last-child){ - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn:last-child:not(:first-child){ - border-top-left-radius:0; - border-top-right-radius:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.btn-group-justified{ - display:table; - width:100%; - table-layout:fixed; - border-collapse:separate -} -.btn-group-justified>.btn,.btn-group-justified>.btn-group{ - display:table-cell; - float:none; - width:1% -} -.btn-group-justified>.btn-group .btn{ - width:100% -} -.btn-group-justified>.btn-group .dropdown-menu{ - left:auto -} -[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{ - position:absolute; - clip:rect(0,0,0,0); - pointer-events:none -} -.input-group{ - position:relative; - display:table; - border-collapse:separate -} -.input-group[class*=col-]{ - float:none; - padding-right:0; - padding-left:0 -} -.input-group .form-control{ - position:relative; - z-index:2; - float:left; - width:100%; - margin-bottom:0 -} -.input-group .form-control:focus{ - z-index:3 -} -.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{ - height:46px; - line-height:46px -} -select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{ - height:auto -} -.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{ - height:30px; - line-height:30px -} -select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{ - height:auto -} -.input-group .form-control,.input-group-addon,.input-group-btn{ - display:table-cell -} -.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.input-group-addon,.input-group-btn{ - width:1%; - white-space:nowrap; - vertical-align:middle -} -.input-group-addon{ - padding:6px 12px; - font-size:14px; - font-weight:400; - line-height:1; - color:#555; - text-align:center; - background-color:#eee; - border:1px solid #ccc; - border-radius:4px -} -.input-group-addon.input-sm{ - padding:5px 10px; - font-size:12px; - border-radius:3px -} -.input-group-addon.input-lg{ - padding:10px 16px; - font-size:18px; - border-radius:6px -} -.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{ - margin-top:0 -} -.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.input-group-addon:first-child{ - border-right:0 -} -.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.input-group-addon:last-child{ - border-left:0 -} -.input-group-btn{ - position:relative; - font-size:0; - white-space:nowrap -} -.input-group-btn>.btn{ - position:relative -} -.input-group-btn>.btn+.btn{ - margin-left:-1px -} -.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{ - z-index:2 -} -.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{ - margin-right:-1px -} -.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{ - z-index:2; - margin-left:-1px -} -.nav{ - padding-left:0; - margin-bottom:0; - list-style:none -} -.nav>li{ - position:relative; - display:block -} -.nav>li>a{ - position:relative; - display:block; - padding:10px 15px -} -.nav>li>a:focus,.nav>li>a:hover{ - text-decoration:none; - background-color:#eee -} -.nav>li.disabled>a{ - color:#777 -} -.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{ - color:#777; - text-decoration:none; - cursor:not-allowed; - background-color:transparent -} -.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{ - background-color:#eee; - border-color:#337ab7 -} -.nav .nav-divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.nav>li>a>img{ - max-width:none -} -.nav-tabs{ - border-bottom:1px solid #ddd -} -.nav-tabs>li{ - float:left; - margin-bottom:-1px -} -.nav-tabs>li>a{ - margin-right:2px; - line-height:1.42857143; - border:1px solid transparent; - border-radius:4px 4px 0 0 -} -.nav-tabs>li>a:hover{ - border-color:#eee #eee #ddd -} -.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{ - color:#555; - cursor:default; - background-color:#fff; - border:1px solid #ddd; - border-bottom-color:transparent -} -.nav-tabs.nav-justified{ - width:100%; - border-bottom:0 -} -.nav-tabs.nav-justified>li{ - float:none -} -.nav-tabs.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-tabs.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li{ - display:table-cell; - width:1% - } - .nav-tabs.nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs.nav-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.nav-pills>li{ - float:left -} -.nav-pills>li>a{ - border-radius:4px -} -.nav-pills>li+li{ - margin-left:2px -} -.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{ - color:#fff; - background-color:#337ab7 -} -.nav-stacked>li{ - float:none -} -.nav-stacked>li+li{ - margin-top:2px; - margin-left:0 -} -.nav-justified{ - width:100% -} -.nav-justified>li{ - float:none -} -.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-justified>li{ - display:table-cell; - width:1% - } - .nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs-justified{ - border-bottom:0 -} -.nav-tabs-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.tab-content>.tab-pane{ - display:none -} -.tab-content>.active{ - display:block -} -.nav-tabs .dropdown-menu{ - margin-top:-1px; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar{ - position:relative; - min-height:50px; - margin-bottom:20px; - border:1px solid transparent -} -@media (min-width:768px){ - .navbar{ - border-radius:4px - } -} -@media (min-width:768px){ - .navbar-header{ - float:left - } -} -.navbar-collapse{ - padding-right:15px; - padding-left:15px; - overflow-x:visible; - -webkit-overflow-scrolling:touch; - border-top:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1) -} -.navbar-collapse.in{ - overflow-y:auto -} -@media (min-width:768px){ - .navbar-collapse{ - width:auto; - border-top:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-collapse.collapse{ - display:block!important; - height:auto!important; - padding-bottom:0; - overflow:visible!important - } - .navbar-collapse.in{ - overflow-y:visible - } - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{ - padding-right:0; - padding-left:0 - } -} -.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:340px -} -@media (max-device-width:480px) and (orientation:landscape){ - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:200px - } -} -.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:0; - margin-left:0 - } -} -.navbar-static-top{ - z-index:1000; - border-width:0 0 1px -} -@media (min-width:768px){ - .navbar-static-top{ - border-radius:0 - } -} -.navbar-fixed-bottom,.navbar-fixed-top{ - position:fixed; - right:0; - left:0; - z-index:1030 -} -@media (min-width:768px){ - .navbar-fixed-bottom,.navbar-fixed-top{ - border-radius:0 - } -} -.navbar-fixed-top{ - top:0; - border-width:0 0 1px -} -.navbar-fixed-bottom{ - bottom:0; - margin-bottom:0; - border-width:1px 0 0 -} -.navbar-brand{ - float:left; - height:50px; - padding:15px 15px; - font-size:18px; - line-height:20px -} -.navbar-brand:focus,.navbar-brand:hover{ - text-decoration:none -} -.navbar-brand>img{ - display:block -} -@media (min-width:768px){ - .navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{ - margin-left:-15px - } -} -.navbar-toggle{ - position:relative; - float:right; - padding:9px 10px; - margin-top:8px; - margin-right:15px; - margin-bottom:8px; - background-color:transparent; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.navbar-toggle:focus{ - outline:0 -} -.navbar-toggle .icon-bar{ - display:block; - width:22px; - height:2px; - border-radius:1px -} -.navbar-toggle .icon-bar+.icon-bar{ - margin-top:4px -} -@media (min-width:768px){ - .navbar-toggle{ - display:none - } -} -.navbar-nav{ - margin:7.5px -15px -} -.navbar-nav>li>a{ - padding-top:10px; - padding-bottom:10px; - line-height:20px -} -@media (max-width:767px){ - .navbar-nav .open .dropdown-menu{ - position:static; - float:none; - width:auto; - margin-top:0; - background-color:transparent; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{ - padding:5px 15px 5px 25px - } - .navbar-nav .open .dropdown-menu>li>a{ - line-height:20px - } - .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{ - background-image:none - } -} -@media (min-width:768px){ - .navbar-nav{ - float:left; - margin:0 - } - .navbar-nav>li{ - float:left - } - .navbar-nav>li>a{ - padding-top:15px; - padding-bottom:15px - } -} -.navbar-form{ - padding:10px 15px; - margin-top:8px; - margin-right:-15px; - margin-bottom:8px; - margin-left:-15px; - border-top:1px solid transparent; - border-bottom:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1) -} -@media (min-width:768px){ - .navbar-form .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .navbar-form .form-control-static{ - display:inline-block - } - .navbar-form .input-group{ - display:inline-table; - vertical-align:middle - } - .navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{ - width:auto - } - .navbar-form .input-group>.form-control{ - width:100% - } - .navbar-form .control-label{ - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox,.navbar-form .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox label,.navbar-form .radio label{ - padding-left:0 - } - .navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .navbar-form .has-feedback .form-control-feedback{ - top:0 - } -} -@media (max-width:767px){ - .navbar-form .form-group{ - margin-bottom:5px - } - .navbar-form .form-group:last-child{ - margin-bottom:0 - } -} -@media (min-width:768px){ - .navbar-form{ - width:auto; - padding-top:0; - padding-bottom:0; - margin-right:0; - margin-left:0; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } -} -.navbar-nav>li>.dropdown-menu{ - margin-top:0; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{ - margin-bottom:0; - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.navbar-btn{ - margin-top:8px; - margin-bottom:8px -} -.navbar-btn.btn-sm{ - margin-top:10px; - margin-bottom:10px -} -.navbar-btn.btn-xs{ - margin-top:14px; - margin-bottom:14px -} -.navbar-text{ - margin-top:15px; - margin-bottom:15px -} -@media (min-width:768px){ - .navbar-text{ - float:left; - margin-right:15px; - margin-left:15px - } -} -@media (min-width:768px){ - .navbar-left{ - float:left!important - } - .navbar-right{ - float:right!important; - margin-right:-15px - } - .navbar-right~.navbar-right{ - margin-right:0 - } -} -.navbar-default{ - background-color:#f8f8f8; - border-color:#e7e7e7 -} -.navbar-default .navbar-brand{ - color:#777 -} -.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{ - color:#5e5e5e; - background-color:transparent -} -.navbar-default .navbar-text{ - color:#777 -} -.navbar-default .navbar-nav>li>a{ - color:#777 -} -.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{ - color:#333; - background-color:transparent -} -.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{ - color:#555; - background-color:#e7e7e7 -} -.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{ - color:#ccc; - background-color:transparent -} -.navbar-default .navbar-toggle{ - border-color:#ddd -} -.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{ - background-color:#ddd -} -.navbar-default .navbar-toggle .icon-bar{ - background-color:#888 -} -.navbar-default .navbar-collapse,.navbar-default .navbar-form{ - border-color:#e7e7e7 -} -.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{ - color:#555; - background-color:#e7e7e7 -} -@media (max-width:767px){ - .navbar-default .navbar-nav .open .dropdown-menu>li>a{ - color:#777 - } - .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#333; - background-color:transparent - } - .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#555; - background-color:#e7e7e7 - } - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#ccc; - background-color:transparent - } -} -.navbar-default .navbar-link{ - color:#777 -} -.navbar-default .navbar-link:hover{ - color:#333 -} -.navbar-default .btn-link{ - color:#777 -} -.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{ - color:#333 -} -.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{ - color:#ccc -} -.navbar-inverse{ - background-color:#222; - border-color:#080808 -} -.navbar-inverse .navbar-brand{ - color:#9d9d9d -} -.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-text{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{ - color:#fff; - background-color:#080808 -} -.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{ - color:#444; - background-color:transparent -} -.navbar-inverse .navbar-toggle{ - border-color:#333 -} -.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{ - background-color:#333 -} -.navbar-inverse .navbar-toggle .icon-bar{ - background-color:#fff -} -.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{ - border-color:#101010 -} -.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{ - color:#fff; - background-color:#080808 -} -@media (max-width:767px){ - .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{ - border-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider{ - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{ - color:#9d9d9d - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#fff; - background-color:transparent - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#fff; - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#444; - background-color:transparent - } -} -.navbar-inverse .navbar-link{ - color:#9d9d9d -} -.navbar-inverse .navbar-link:hover{ - color:#fff -} -.navbar-inverse .btn-link{ - color:#9d9d9d -} -.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{ - color:#fff -} -.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{ - color:#444 -} -.breadcrumb{ - padding:8px 15px; - margin-bottom:20px; - list-style:none; - background-color:#f5f5f5; - border-radius:4px -} -.breadcrumb>li{ - display:inline-block -} -.breadcrumb>li+li:before{ - padding:0 5px; - color:#ccc; - content:"/\00a0" -} -.breadcrumb>.active{ - color:#777 -} -.pagination{ - display:inline-block; - padding-left:0; - margin:20px 0; - border-radius:4px -} -.pagination>li{ - display:inline -} -.pagination>li>a,.pagination>li>span{ - position:relative; - float:left; - padding:6px 12px; - margin-left:-1px; - line-height:1.42857143; - color:#337ab7; - text-decoration:none; - background-color:#fff; - border:1px solid #ddd -} -.pagination>li:first-child>a,.pagination>li:first-child>span{ - margin-left:0; - border-top-left-radius:4px; - border-bottom-left-radius:4px -} -.pagination>li:last-child>a,.pagination>li:last-child>span{ - border-top-right-radius:4px; - border-bottom-right-radius:4px -} -.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{ - z-index:2; - color:#23527c; - background-color:#eee; - border-color:#ddd -} -.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{ - z-index:3; - color:#fff; - cursor:default; - background-color:#337ab7; - border-color:#337ab7 -} -.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{ - color:#777; - cursor:not-allowed; - background-color:#fff; - border-color:#ddd -} -.pagination-lg>li>a,.pagination-lg>li>span{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333 -} -.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{ - border-top-left-radius:6px; - border-bottom-left-radius:6px -} -.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{ - border-top-right-radius:6px; - border-bottom-right-radius:6px -} -.pagination-sm>li>a,.pagination-sm>li>span{ - padding:5px 10px; - font-size:12px; - line-height:1.5 -} -.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{ - border-top-left-radius:3px; - border-bottom-left-radius:3px -} -.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{ - border-top-right-radius:3px; - border-bottom-right-radius:3px -} -.pager{ - padding-left:0; - margin:20px 0; - text-align:center; - list-style:none -} -.pager li{ - display:inline -} -.pager li>a,.pager li>span{ - display:inline-block; - padding:5px 14px; - background-color:#fff; - border:1px solid #ddd; - border-radius:15px -} -.pager li>a:focus,.pager li>a:hover{ - text-decoration:none; - background-color:#eee -} -.pager .next>a,.pager .next>span{ - float:right -} -.pager .previous>a,.pager .previous>span{ - float:left -} -.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{ - color:#777; - cursor:not-allowed; - background-color:#fff -} -.label{ - display:inline; - padding:.2em .6em .3em; - font-size:75%; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:baseline; - border-radius:.25em -} -a.label:focus,a.label:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.label:empty{ - display:none -} -.btn .label{ - position:relative; - top:-1px -} -.label-default{ - background-color:#777 -} -.label-default[href]:focus,.label-default[href]:hover{ - background-color:#5e5e5e -} -.label-primary{ - background-color:#337ab7 -} -.label-primary[href]:focus,.label-primary[href]:hover{ - background-color:#286090 -} -.label-success{ - background-color:#5cb85c -} -.label-success[href]:focus,.label-success[href]:hover{ - background-color:#449d44 -} -.label-info{ - background-color:#5bc0de -} -.label-info[href]:focus,.label-info[href]:hover{ - background-color:#31b0d5 -} -.label-warning{ - background-color:#f0ad4e -} -.label-warning[href]:focus,.label-warning[href]:hover{ - background-color:#ec971f -} -.label-danger{ - background-color:#d9534f -} -.label-danger[href]:focus,.label-danger[href]:hover{ - background-color:#c9302c -} -.badge{ - display:inline-block; - min-width:10px; - padding:3px 7px; - font-size:12px; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:middle; - background-color:#777; - border-radius:10px -} -.badge:empty{ - display:none -} -.btn .badge{ - position:relative; - top:-1px -} -.btn-group-xs>.btn .badge,.btn-xs .badge{ - top:0; - padding:1px 5px -} -a.badge:focus,a.badge:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.list-group-item.active>.badge,.nav-pills>.active>a>.badge{ - color:#337ab7; - background-color:#fff -} -.list-group-item>.badge{ - float:right -} -.list-group-item>.badge+.badge{ - margin-right:5px -} -.nav-pills>li>a>.badge{ - margin-left:3px -} -.jumbotron{ - padding-top:30px; - padding-bottom:30px; - margin-bottom:30px; - color:inherit; - background-color:#eee -} -.jumbotron .h1,.jumbotron h1{ - color:inherit -} -.jumbotron p{ - margin-bottom:15px; - font-size:21px; - font-weight:200 -} -.jumbotron>hr{ - border-top-color:#d5d5d5 -} -.container .jumbotron,.container-fluid .jumbotron{ - padding-right:15px; - padding-left:15px; - border-radius:6px -} -.jumbotron .container{ - max-width:100% -} -@media screen and (min-width:768px){ - .jumbotron{ - padding-top:48px; - padding-bottom:48px - } - .container .jumbotron,.container-fluid .jumbotron{ - padding-right:60px; - padding-left:60px - } - .jumbotron .h1,.jumbotron h1{ - font-size:63px - } -} -.thumbnail{ - display:block; - padding:4px; - margin-bottom:20px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:border .2s ease-in-out; - -o-transition:border .2s ease-in-out; - transition:border .2s ease-in-out -} -.thumbnail a>img,.thumbnail>img{ - margin-right:auto; - margin-left:auto -} -a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{ - border-color:#337ab7 -} -.thumbnail .caption{ - padding:9px; - color:#333 -} -.alert{ - padding:15px; - margin-bottom:20px; - border:1px solid transparent; - border-radius:4px -} -.alert h4{ - margin-top:0; - color:inherit -} -.alert .alert-link{ - font-weight:700 -} -.alert>p,.alert>ul{ - margin-bottom:0 -} -.alert>p+p{ - margin-top:5px -} -.alert-dismissable,.alert-dismissible{ - padding-right:35px -} -.alert-dismissable .close,.alert-dismissible .close{ - position:relative; - top:-2px; - right:-21px; - color:inherit -} -.alert-success{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.alert-success hr{ - border-top-color:#c9e2b3 -} -.alert-success .alert-link{ - color:#2b542c -} -.alert-info{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.alert-info hr{ - border-top-color:#a6e1ec -} -.alert-info .alert-link{ - color:#245269 -} -.alert-warning{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.alert-warning hr{ - border-top-color:#f7e1b5 -} -.alert-warning .alert-link{ - color:#66512c -} -.alert-danger{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.alert-danger hr{ - border-top-color:#e4b9c0 -} -.alert-danger .alert-link{ - color:#843534 -} -@-webkit-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@-o-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -.progress{ - height:20px; - margin-bottom:20px; - overflow:hidden; - background-color:#f5f5f5; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1); - box-shadow:inset 0 1px 2px rgba(0,0,0,.1) -} -.progress-bar{ - float:left; - width:0; - height:100%; - font-size:12px; - line-height:20px; - color:#fff; - text-align:center; - background-color:#337ab7; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - -webkit-transition:width .6s ease; - -o-transition:width .6s ease; - transition:width .6s ease -} -.progress-bar-striped,.progress-striped .progress-bar{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - -webkit-background-size:40px 40px; - background-size:40px 40px -} -.progress-bar.active,.progress.active .progress-bar{ - -webkit-animation:progress-bar-stripes 2s linear infinite; - -o-animation:progress-bar-stripes 2s linear infinite; - animation:progress-bar-stripes 2s linear infinite -} -.progress-bar-success{ - background-color:#5cb85c -} -.progress-striped .progress-bar-success{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-info{ - background-color:#5bc0de -} -.progress-striped .progress-bar-info{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-warning{ - background-color:#f0ad4e -} -.progress-striped .progress-bar-warning{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-danger{ - background-color:#d9534f -} -.progress-striped .progress-bar-danger{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.media{ - margin-top:15px -} -.media:first-child{ - margin-top:0 -} -.media,.media-body{ - overflow:hidden; - zoom:1 -} -.media-body{ - width:10000px -} -.media-object{ - display:block -} -.media-object.img-thumbnail{ - max-width:none -} -.media-right,.media>.pull-right{ - padding-left:10px -} -.media-left,.media>.pull-left{ - padding-right:10px -} -.media-body,.media-left,.media-right{ - display:table-cell; - vertical-align:top -} -.media-middle{ - vertical-align:middle -} -.media-bottom{ - vertical-align:bottom -} -.media-heading{ - margin-top:0; - margin-bottom:5px -} -.media-list{ - padding-left:0; - list-style:none -} -.list-group{ - padding-left:0; - margin-bottom:20px -} -.list-group-item{ - position:relative; - display:block; - padding:10px 15px; - margin-bottom:-1px; - background-color:#fff; - border:1px solid #ddd -} -.list-group-item:first-child{ - border-top-left-radius:4px; - border-top-right-radius:4px -} -.list-group-item:last-child{ - margin-bottom:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -a.list-group-item,button.list-group-item{ - color:#555 -} -a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{ - color:#333 -} -a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{ - color:#555; - text-decoration:none; - background-color:#f5f5f5 -} -button.list-group-item{ - width:100%; - text-align:left -} -.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{ - color:#777; - cursor:not-allowed; - background-color:#eee -} -.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{ - color:inherit -} -.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{ - color:#777 -} -.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{ - z-index:2; - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{ - color:inherit -} -.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{ - color:#c7ddef -} -.list-group-item-success{ - color:#3c763d; - background-color:#dff0d8 -} -a.list-group-item-success,button.list-group-item-success{ - color:#3c763d -} -a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{ - color:inherit -} -a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{ - color:#3c763d; - background-color:#d0e9c6 -} -a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{ - color:#fff; - background-color:#3c763d; - border-color:#3c763d -} -.list-group-item-info{ - color:#31708f; - background-color:#d9edf7 -} -a.list-group-item-info,button.list-group-item-info{ - color:#31708f -} -a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{ - color:inherit -} -a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{ - color:#31708f; - background-color:#c4e3f3 -} -a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{ - color:#fff; - background-color:#31708f; - border-color:#31708f -} -.list-group-item-warning{ - color:#8a6d3b; - background-color:#fcf8e3 -} -a.list-group-item-warning,button.list-group-item-warning{ - color:#8a6d3b -} -a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{ - color:inherit -} -a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{ - color:#8a6d3b; - background-color:#faf2cc -} -a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{ - color:#fff; - background-color:#8a6d3b; - border-color:#8a6d3b -} -.list-group-item-danger{ - color:#a94442; - background-color:#f2dede -} -a.list-group-item-danger,button.list-group-item-danger{ - color:#a94442 -} -a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{ - color:inherit -} -a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{ - color:#a94442; - background-color:#ebcccc -} -a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{ - color:#fff; - background-color:#a94442; - border-color:#a94442 -} -.list-group-item-heading{ - margin-top:0; - margin-bottom:5px -} -.list-group-item-text{ - margin-bottom:0; - line-height:1.3 -} -.panel{ - margin-bottom:20px; - background-color:#fff; - border:1px solid transparent; - border-radius:4px; - -webkit-box-shadow:0 1px 1px rgba(0,0,0,.05); - box-shadow:0 1px 1px rgba(0,0,0,.05) -} -.panel-body{ - padding:15px -} -.panel-heading{ - padding:10px 15px; - border-bottom:1px solid transparent; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel-heading>.dropdown .dropdown-toggle{ - color:inherit -} -.panel-title{ - margin-top:0; - margin-bottom:0; - font-size:16px; - color:inherit -} -.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{ - color:inherit -} -.panel-footer{ - padding:10px 15px; - background-color:#f5f5f5; - border-top:1px solid #ddd; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.list-group,.panel>.panel-collapse>.list-group{ - margin-bottom:0 -} -.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{ - border-width:1px 0; - border-radius:0 -} -.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{ - border-top:0; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{ - border-bottom:0; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.panel-heading+.list-group .list-group-item:first-child{ - border-top-width:0 -} -.list-group+.panel-footer{ - border-top-width:0 -} -.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{ - margin-bottom:0 -} -.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{ - padding-right:15px; - padding-left:15px -} -.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{ - border-top-left-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{ - border-top-right-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{ - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{ - border-bottom-right-radius:3px -} -.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{ - border-top:1px solid #ddd -} -.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{ - border-top:0 -} -.panel>.table-bordered,.panel>.table-responsive>.table-bordered{ - border:0 -} -.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 -} -.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 -} -.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{ - border-bottom:0 -} -.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 -} -.panel>.table-responsive{ - margin-bottom:0; - border:0 -} -.panel-group{ - margin-bottom:20px -} -.panel-group .panel{ - margin-bottom:0; - border-radius:4px -} -.panel-group .panel+.panel{ - margin-top:5px -} -.panel-group .panel-heading{ - border-bottom:0 -} -.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{ - border-top:1px solid #ddd -} -.panel-group .panel-footer{ - border-top:0 -} -.panel-group .panel-footer+.panel-collapse .panel-body{ - border-bottom:1px solid #ddd -} -.panel-default{ - border-color:#ddd -} -.panel-default>.panel-heading{ - color:#333; - background-color:#f5f5f5; - border-color:#ddd -} -.panel-default>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ddd -} -.panel-default>.panel-heading .badge{ - color:#f5f5f5; - background-color:#333 -} -.panel-default>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ddd -} -.panel-primary{ - border-color:#337ab7 -} -.panel-primary>.panel-heading{ - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.panel-primary>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#337ab7 -} -.panel-primary>.panel-heading .badge{ - color:#337ab7; - background-color:#fff -} -.panel-primary>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#337ab7 -} -.panel-success{ - border-color:#d6e9c6 -} -.panel-success>.panel-heading{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.panel-success>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#d6e9c6 -} -.panel-success>.panel-heading .badge{ - color:#dff0d8; - background-color:#3c763d -} -.panel-success>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#d6e9c6 -} -.panel-info{ - border-color:#bce8f1 -} -.panel-info>.panel-heading{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.panel-info>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#bce8f1 -} -.panel-info>.panel-heading .badge{ - color:#d9edf7; - background-color:#31708f -} -.panel-info>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#bce8f1 -} -.panel-warning{ - border-color:#faebcc -} -.panel-warning>.panel-heading{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.panel-warning>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#faebcc -} -.panel-warning>.panel-heading .badge{ - color:#fcf8e3; - background-color:#8a6d3b -} -.panel-warning>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#faebcc -} -.panel-danger{ - border-color:#ebccd1 -} -.panel-danger>.panel-heading{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.panel-danger>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ebccd1 -} -.panel-danger>.panel-heading .badge{ - color:#f2dede; - background-color:#a94442 -} -.panel-danger>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ebccd1 -} -.embed-responsive{ - position:relative; - display:block; - height:0; - padding:0; - overflow:hidden -} -.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{ - position:absolute; - top:0; - bottom:0; - left:0; - width:100%; - height:100%; - border:0 -} -.embed-responsive-16by9{ - padding-bottom:56.25% -} -.embed-responsive-4by3{ - padding-bottom:75% -} -.well{ - min-height:20px; - padding:19px; - margin-bottom:20px; - background-color:#f5f5f5; - border:1px solid #e3e3e3; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05); - box-shadow:inset 0 1px 1px rgba(0,0,0,.05) -} -.well blockquote{ - border-color:#ddd; - border-color:rgba(0,0,0,.15) -} -.well-lg{ - padding:24px; - border-radius:6px -} -.well-sm{ - padding:9px; - border-radius:3px -} -.close{ - float:right; - font-size:21px; - font-weight:700; - line-height:1; - color:#000; - text-shadow:0 1px 0 #fff; - filter:alpha(opacity=20); - opacity:.2 -} -.close:focus,.close:hover{ - color:#000; - text-decoration:none; - cursor:pointer; - filter:alpha(opacity=50); - opacity:.5 -} -button.close{ - -webkit-appearance:none; - padding:0; - cursor:pointer; - background:0 0; - border:0 -} -.modal-open{ - overflow:hidden -} -.modal{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1050; - display:none; - overflow:hidden; - -webkit-overflow-scrolling:touch; - outline:0 -} -.modal.fade .modal-dialog{ - -webkit-transition:-webkit-transform .3s ease-out; - -o-transition:-o-transform .3s ease-out; - transition:transform .3s ease-out; - -webkit-transform:translate(0,-25%); - -ms-transform:translate(0,-25%); - -o-transform:translate(0,-25%); - transform:translate(0,-25%) -} -.modal.in .modal-dialog{ - -webkit-transform:translate(0,0); - -ms-transform:translate(0,0); - -o-transform:translate(0,0); - transform:translate(0,0) -} -.modal-open .modal{ - overflow-x:hidden; - overflow-y:auto -} -.modal-dialog{ - position:relative; - width:auto; - margin:10px -} -.modal-content{ - position:relative; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #999; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - outline:0; - -webkit-box-shadow:0 3px 9px rgba(0,0,0,.5); - box-shadow:0 3px 9px rgba(0,0,0,.5) -} -.modal-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1040; - background-color:#000 -} -.modal-backdrop.fade{ - filter:alpha(opacity=0); - opacity:0 -} -.modal-backdrop.in{ - filter:alpha(opacity=50); - opacity:.5 -} -.modal-header{ - padding:15px; - border-bottom:1px solid #e5e5e5 -} -.modal-header .close{ - margin-top:-2px -} -.modal-title{ - margin:0; - line-height:1.42857143 -} -.modal-body{ - position:relative; - padding:15px -} -.modal-footer{ - padding:15px; - text-align:right; - border-top:1px solid #e5e5e5 -} -.modal-footer .btn+.btn{ - margin-bottom:0; - margin-left:5px -} -.modal-footer .btn-group .btn+.btn{ - margin-left:-1px -} -.modal-footer .btn-block+.btn-block{ - margin-left:0 -} -.modal-scrollbar-measure{ - position:absolute; - top:-9999px; - width:50px; - height:50px; - overflow:scroll -} -@media (min-width:768px){ - .modal-dialog{ - width:600px; - margin:30px auto - } - .modal-content{ - -webkit-box-shadow:0 5px 15px rgba(0,0,0,.5); - box-shadow:0 5px 15px rgba(0,0,0,.5) - } - .modal-sm{ - width:300px - } -} -@media (min-width:992px){ - .modal-lg{ - width:900px - } -} -.tooltip{ - position:absolute; - z-index:1070; - display:block; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:12px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - filter:alpha(opacity=0); - opacity:0; - line-break:auto -} -.tooltip.in{ - filter:alpha(opacity=90); - opacity:.9 -} -.tooltip.top{ - padding:5px 0; - margin-top:-3px -} -.tooltip.right{ - padding:0 5px; - margin-left:3px -} -.tooltip.bottom{ - padding:5px 0; - margin-top:3px -} -.tooltip.left{ - padding:0 5px; - margin-left:-3px -} -.tooltip-inner{ - max-width:200px; - padding:3px 8px; - color:#fff; - text-align:center; - background-color:#000; - border-radius:4px -} -.tooltip-arrow{ - position:absolute; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.tooltip.top .tooltip-arrow{ - bottom:0; - left:50%; - margin-left:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-left .tooltip-arrow{ - right:5px; - bottom:0; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-right .tooltip-arrow{ - bottom:0; - left:5px; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.right .tooltip-arrow{ - top:50%; - left:0; - margin-top:-5px; - border-width:5px 5px 5px 0; - border-right-color:#000 -} -.tooltip.left .tooltip-arrow{ - top:50%; - right:0; - margin-top:-5px; - border-width:5px 0 5px 5px; - border-left-color:#000 -} -.tooltip.bottom .tooltip-arrow{ - top:0; - left:50%; - margin-left:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-left .tooltip-arrow{ - top:0; - right:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-right .tooltip-arrow{ - top:0; - left:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.popover{ - position:absolute; - top:0; - left:0; - z-index:1060; - display:none; - max-width:276px; - padding:1px; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - -webkit-box-shadow:0 5px 10px rgba(0,0,0,.2); - box-shadow:0 5px 10px rgba(0,0,0,.2); - line-break:auto -} -.popover.top{ - margin-top:-10px -} -.popover.right{ - margin-left:10px -} -.popover.bottom{ - margin-top:10px -} -.popover.left{ - margin-left:-10px -} -.popover-title{ - padding:8px 14px; - margin:0; - font-size:14px; - background-color:#f7f7f7; - border-bottom:1px solid #ebebeb; - border-radius:5px 5px 0 0 -} -.popover-content{ - padding:9px 14px -} -.popover>.arrow,.popover>.arrow:after{ - position:absolute; - display:block; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.popover>.arrow{ - border-width:11px -} -.popover>.arrow:after{ - content:""; - border-width:10px -} -.popover.top>.arrow{ - bottom:-11px; - left:50%; - margin-left:-11px; - border-top-color:#999; - border-top-color:rgba(0,0,0,.25); - border-bottom-width:0 -} -.popover.top>.arrow:after{ - bottom:1px; - margin-left:-10px; - content:" "; - border-top-color:#fff; - border-bottom-width:0 -} -.popover.right>.arrow{ - top:50%; - left:-11px; - margin-top:-11px; - border-right-color:#999; - border-right-color:rgba(0,0,0,.25); - border-left-width:0 -} -.popover.right>.arrow:after{ - bottom:-10px; - left:1px; - content:" "; - border-right-color:#fff; - border-left-width:0 -} -.popover.bottom>.arrow{ - top:-11px; - left:50%; - margin-left:-11px; - border-top-width:0; - border-bottom-color:#999; - border-bottom-color:rgba(0,0,0,.25) -} -.popover.bottom>.arrow:after{ - top:1px; - margin-left:-10px; - content:" "; - border-top-width:0; - border-bottom-color:#fff -} -.popover.left>.arrow{ - top:50%; - right:-11px; - margin-top:-11px; - border-right-width:0; - border-left-color:#999; - border-left-color:rgba(0,0,0,.25) -} -.popover.left>.arrow:after{ - right:1px; - bottom:-10px; - content:" "; - border-right-width:0; - border-left-color:#fff -} -.carousel{ - position:relative -} -.carousel-inner{ - position:relative; - width:100%; - overflow:hidden -} -.carousel-inner>.item{ - position:relative; - display:none; - -webkit-transition:.6s ease-in-out left; - -o-transition:.6s ease-in-out left; - transition:.6s ease-in-out left -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img{ - line-height:1 -} -@media all and (transform-3d),(-webkit-transform-3d){ - .carousel-inner>.item{ - -webkit-transition:-webkit-transform .6s ease-in-out; - -o-transition:-o-transform .6s ease-in-out; - transition:transform .6s ease-in-out; - -webkit-backface-visibility:hidden; - backface-visibility:hidden; - -webkit-perspective:1000px; - perspective:1000px - } - .carousel-inner>.item.active.right,.carousel-inner>.item.next{ - left:0; - -webkit-transform:translate3d(100%,0,0); - transform:translate3d(100%,0,0) - } - .carousel-inner>.item.active.left,.carousel-inner>.item.prev{ - left:0; - -webkit-transform:translate3d(-100%,0,0); - transform:translate3d(-100%,0,0) - } - .carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{ - left:0; - -webkit-transform:translate3d(0,0,0); - transform:translate3d(0,0,0) - } -} -.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{ - display:block -} -.carousel-inner>.active{ - left:0 -} -.carousel-inner>.next,.carousel-inner>.prev{ - position:absolute; - top:0; - width:100% -} -.carousel-inner>.next{ - left:100% -} -.carousel-inner>.prev{ - left:-100% -} -.carousel-inner>.next.left,.carousel-inner>.prev.right{ - left:0 -} -.carousel-inner>.active.left{ - left:-100% -} -.carousel-inner>.active.right{ - left:100% -} -.carousel-control{ - position:absolute; - top:0; - bottom:0; - left:0; - width:15%; - font-size:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6); - background-color:rgba(0,0,0,0); - filter:alpha(opacity=50); - opacity:.5 -} -.carousel-control.left{ - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001))); - background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control.right{ - right:0; - left:auto; - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5))); - background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control:focus,.carousel-control:hover{ - color:#fff; - text-decoration:none; - filter:alpha(opacity=90); - outline:0; - opacity:.9 -} -.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - position:absolute; - top:50%; - z-index:5; - display:inline-block; - margin-top:-10px -} -.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - left:50%; - margin-left:-10px -} -.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - right:50%; - margin-right:-10px -} -.carousel-control .icon-next,.carousel-control .icon-prev{ - width:20px; - height:20px; - font-family:serif; - line-height:1 -} -.carousel-control .icon-prev:before{ - content:'\2039' -} -.carousel-control .icon-next:before{ - content:'\203a' -} -.carousel-indicators{ - position:absolute; - bottom:10px; - left:50%; - z-index:15; - width:60%; - padding-left:0; - margin-left:-30%; - text-align:center; - list-style:none -} -.carousel-indicators li{ - display:inline-block; - width:10px; - height:10px; - margin:1px; - text-indent:-999px; - cursor:pointer; - background-color:#000\9; - background-color:rgba(0,0,0,0); - border:1px solid #fff; - border-radius:10px -} -.carousel-indicators .active{ - width:12px; - height:12px; - margin:0; - background-color:#fff -} -.carousel-caption{ - position:absolute; - right:15%; - bottom:20px; - left:15%; - z-index:10; - padding-top:20px; - padding-bottom:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6) -} -.carousel-caption .btn{ - text-shadow:none -} -@media screen and (min-width:768px){ - .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - width:30px; - height:30px; - margin-top:-10px; - font-size:30px - } - .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - margin-left:-10px - } - .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - margin-right:-10px - } - .carousel-caption{ - right:20%; - left:20%; - padding-bottom:30px - } - .carousel-indicators{ - bottom:20px - } -} -.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{ - display:table; - content:" " -} -.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{ - clear:both -} -.center-block{ - display:block; - margin-right:auto; - margin-left:auto -} -.pull-right{ - float:right!important -} -.pull-left{ - float:left!important -} -.hide{ - display:none!important -} -.show{ - display:block!important -} -.invisible{ - visibility:hidden -} -.text-hide{ - font:0/0 a; - color:transparent; - text-shadow:none; - background-color:transparent; - border:0 -} -.hidden{ - display:none!important -} -.affix{ - position:fixed -} -@-ms-viewport{ - width:device-width -} -.visible-lg,.visible-md,.visible-sm,.visible-xs{ - display:none!important -} -.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{ - display:none!important -} -@media (max-width:767px){ - .visible-xs{ - display:block!important - } - table.visible-xs{ - display:table!important - } - tr.visible-xs{ - display:table-row!important - } - td.visible-xs,th.visible-xs{ - display:table-cell!important - } -} -@media (max-width:767px){ - .visible-xs-block{ - display:block!important - } -} -@media (max-width:767px){ - .visible-xs-inline{ - display:inline!important - } -} -@media (max-width:767px){ - .visible-xs-inline-block{ - display:inline-block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm{ - display:block!important - } - table.visible-sm{ - display:table!important - } - tr.visible-sm{ - display:table-row!important - } - td.visible-sm,th.visible-sm{ - display:table-cell!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-block{ - display:block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline{ - display:inline!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline-block{ - display:inline-block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md{ - display:block!important - } - table.visible-md{ - display:table!important - } - tr.visible-md{ - display:table-row!important - } - td.visible-md,th.visible-md{ - display:table-cell!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-block{ - display:block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline{ - display:inline!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline-block{ - display:inline-block!important - } -} -@media (min-width:1200px){ - .visible-lg{ - display:block!important - } - table.visible-lg{ - display:table!important - } - tr.visible-lg{ - display:table-row!important - } - td.visible-lg,th.visible-lg{ - display:table-cell!important - } -} -@media (min-width:1200px){ - .visible-lg-block{ - display:block!important - } -} -@media (min-width:1200px){ - .visible-lg-inline{ - display:inline!important - } -} -@media (min-width:1200px){ - .visible-lg-inline-block{ - display:inline-block!important - } -} -@media (max-width:767px){ - .hidden-xs{ - display:none!important - } -} -@media (min-width:768px) and (max-width:991px){ - .hidden-sm{ - display:none!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .hidden-md{ - display:none!important - } -} -@media (min-width:1200px){ - .hidden-lg{ - display:none!important - } -} -.visible-print{ - display:none!important -} -@media print{ - .visible-print{ - display:block!important - } - table.visible-print{ - display:table!important - } - tr.visible-print{ - display:table-row!important - } - td.visible-print,th.visible-print{ - display:table-cell!important - } -} -.visible-print-block{ - display:none!important -} -@media print{ - .visible-print-block{ - display:block!important - } -} -.visible-print-inline{ - display:none!important -} -@media print{ - .visible-print-inline{ - display:inline!important - } -} -.visible-print-inline-block{ - display:none!important -} -@media print{ - .visible-print-inline-block{ - display:inline-block!important - } -} -@media print{ - .hidden-print{ - display:none!important - } -} -/*# sourceMappingURL=bootstrap.min.css.map */ - diff --git a/themes/squares/client/src/css/01-main.css b/themes/squares/client/src/css/01-main.css deleted file mode 100644 index be80c2227..000000000 --- a/themes/squares/client/src/css/01-main.css +++ /dev/null @@ -1,77 +0,0 @@ -body { - /*background-image: url("//*img//*LargeTriangles.svg");*/ - /*background-image: url("//*img//*RandomizedPattern.svg");*/ - background-image: url("/img/background.svg"); - /*background-color:#000000;*/ -} -canvas{ - position:absolute; - top:0; - left:0; -} -.authelia-brand { - font-weight: bold; - font-style: italic; - color: #ffffff -} -.poweredby-block { - margin: 0px 30px; - margin-top: 10px; - padding-top: 15px; - border-top: 1px solid rgba(0, 0, 0, 0.15); - -} -.poweredby { - font-size: 0.7em; - color: white; -} -/* notifications */ -.notification { - padding: 10px; - margin: 15px 0px; - border-radius: 6px; - display: none; - position: absolute; -} -.notification img { - width: 24px; - margin-right: 10px; -} -.notification i, -.notification span { - display:table-cell; - vertical-align:middle; -} -.info { - border: 1px solid #9cb1ff; - background-color: rgb(192, 220, 255); -} -.success { - border: 1px solid #65ec7c; - background-color: rgb(163, 255, 157); -} -.error { - border: 1px solid #ffa3a3; - background-color: rgb(255, 175, 175); -} -.warning { - border: 1px solid #ffd743; - background-color: rgb(255, 230, 143); -} -.bottom-right-links { - text-align: right; - margin-top: 10px; - font-size: 0.8em; - color: white; -} -.header { - background-color: #000000; - color: white; - margin: 0px; -} -.body { - padding: 10px; -} -h1 { - font-size: 25px; -} diff --git a/themes/squares/client/src/css/02-login.css b/themes/squares/client/src/css/02-login.css deleted file mode 100644 index a6984267b..000000000 --- a/themes/squares/client/src/css/02-login.css +++ /dev/null @@ -1,136 +0,0 @@ -.form-signin -{ - margin: 0 auto; -} - -.form-signin .form-signin-heading, .form-signin .checkbox -{ - margin-bottom: 10px; -} - -.form-signin .checkbox -{ - font-weight: normal; -} - -.form-signin .form-control -{ - position: relative; - font-size: 16px; - height: auto; - padding: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-signin .form-control:focus -{ - z-index: 2; -} -.form-signin input[type="text"] -{ - margin-bottom: -1px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.form-signin input[type="password"] -{ - /* margin-bottom: 10px; */ - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.account-wall -{ - border: 1px solid #000; - margin-top: 20px; - padding-bottom: 20px; - background-color: #000000; - -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); -} -.account-wall h1 -{ - margin-bottom: 15px; - margin-top: 15px; - font-weight: 800; - display: block; - text-align: center; -} -.account-wall h3 -{ - display: block; - text-align: center; -} -.account-wall p -{ - text-align: center; - margin: 10px; - color: white; -} -.account-wall .form-inputs -{ - margin-bottom: 10px; - border-color: #b20c0c; -} -.account-wall hr { - border-color: #c5c5c5; -} - -.header-img -{ - width: 96px; - height: 96px; - margin: 0 auto 10px; - display: block; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - border-radius: 50%; -} - -.link -{ - margin-top: 10px; - color: white; -} - -.btn-primary.totp -{ - background-color: rgb(102, 135, 162); -} - -.btn-primary.u2f -{ - background-color: rgb(83, 149, 204); -} - -.u2f-token { - text-align: center; -} - -.u2f-token img { - width: 70px; -} - -.keep-me-logged-in { - margin-top: 10px; - font-size: 0.8em; - color: white; -} - -.keep-me-logged-in input[type=checkbox] { - transform: scale(0.8); - margin: 0; - margin-right: 4px; -} - -.keep-me-logged-in label { - font-weight: 300; -} - -.keep-me-logged-in input, -.keep-me-logged-in label { - display: inline-block; - margin-bottom: 0; /* I added this after I posted my reply */ - vertical-align: middle; /* Fixes any weird issues in Firefox and IE */ -} diff --git a/themes/squares/client/src/css/03-errors.css b/themes/squares/client/src/css/03-errors.css deleted file mode 100644 index e9f97f33b..000000000 --- a/themes/squares/client/src/css/03-errors.css +++ /dev/null @@ -1,12 +0,0 @@ - -.error-401 .header-img { - border-radius: 0%; -} - -.error-403 .header-img { - border-radius: 0%; -} - -.error-404 .header-img { - border-radius: 0%; -} \ No newline at end of file diff --git a/themes/squares/client/src/css/03-password-reset-form.css b/themes/squares/client/src/css/03-password-reset-form.css deleted file mode 100644 index 34066bc24..000000000 --- a/themes/squares/client/src/css/03-password-reset-form.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-form .header-img { - border-radius: 0%; -} diff --git a/themes/squares/client/src/css/03-password-reset-request.css b/themes/squares/client/src/css/03-password-reset-request.css deleted file mode 100644 index 1a2ad4df8..000000000 --- a/themes/squares/client/src/css/03-password-reset-request.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-request .header-img { - border-radius: 0%; -} diff --git a/themes/squares/client/src/css/03-totp-register.css b/themes/squares/client/src/css/03-totp-register.css deleted file mode 100644 index cb76720ad..000000000 --- a/themes/squares/client/src/css/03-totp-register.css +++ /dev/null @@ -1,22 +0,0 @@ -.totp-register #secret { - background-color: white; - font-size: 0.9em; - font-weight: bold; - padding: 5px; - border: 1px solid #c7c7c7; - word-wrap: break-word; -} -.totp-register #qrcode img { - margin: 10px auto; -} -.totp-register .need-google-authenticator { - text-align: center; - margin-top: 20px; -} -.totp-register .store-badges { - margin-top: 5px; -} -.totp-register .store-badge { - width: 110px; - height: 30px; -} \ No newline at end of file diff --git a/themes/squares/client/src/css/03-u2f-register.css b/themes/squares/client/src/css/03-u2f-register.css deleted file mode 100644 index e54cddf89..000000000 --- a/themes/squares/client/src/css/03-u2f-register.css +++ /dev/null @@ -1,5 +0,0 @@ - -.u2f-register img { - display: block; - margin: 20px auto; -} \ No newline at end of file diff --git a/themes/squares/client/src/img/LargeTriangles.svg b/themes/squares/client/src/img/LargeTriangles.svg deleted file mode 100644 index 0988bcb39..000000000 --- a/themes/squares/client/src/img/LargeTriangles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/themes/squares/client/src/img/RandomizedPattern.svg b/themes/squares/client/src/img/RandomizedPattern.svg deleted file mode 100644 index 51afee6d6..000000000 --- a/themes/squares/client/src/img/RandomizedPattern.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/themes/squares/client/src/img/background.jpg b/themes/squares/client/src/img/background.jpg deleted file mode 100644 index 974ea273f..000000000 Binary files a/themes/squares/client/src/img/background.jpg and /dev/null differ diff --git a/themes/squares/client/src/img/background.svg b/themes/squares/client/src/img/background.svg deleted file mode 100644 index 668312f9f..000000000 --- a/themes/squares/client/src/img/background.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/themes/squares/client/src/img/icon.png b/themes/squares/client/src/img/icon.png deleted file mode 100644 index 040d10c1a..000000000 Binary files a/themes/squares/client/src/img/icon.png and /dev/null differ diff --git a/themes/squares/client/src/img/mail.png b/themes/squares/client/src/img/mail.png deleted file mode 100644 index 834bfce91..000000000 Binary files a/themes/squares/client/src/img/mail.png and /dev/null differ diff --git a/themes/squares/client/src/img/matrix_circle_128x128.png b/themes/squares/client/src/img/matrix_circle_128x128.png deleted file mode 100644 index 856e01556..000000000 Binary files a/themes/squares/client/src/img/matrix_circle_128x128.png and /dev/null differ diff --git a/themes/squares/client/src/img/notifications/.directory b/themes/squares/client/src/img/notifications/.directory deleted file mode 100644 index 7c8b80541..000000000 --- a/themes/squares/client/src/img/notifications/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,35 -Version=3 -ViewMode=1 diff --git a/themes/squares/client/src/img/notifications/error.png b/themes/squares/client/src/img/notifications/error.png deleted file mode 100644 index bf64d28f7..000000000 Binary files a/themes/squares/client/src/img/notifications/error.png and /dev/null differ diff --git a/themes/squares/client/src/img/notifications/info.png b/themes/squares/client/src/img/notifications/info.png deleted file mode 100644 index 67928e88c..000000000 Binary files a/themes/squares/client/src/img/notifications/info.png and /dev/null differ diff --git a/themes/squares/client/src/img/notifications/success.png b/themes/squares/client/src/img/notifications/success.png deleted file mode 100644 index d3998392d..000000000 Binary files a/themes/squares/client/src/img/notifications/success.png and /dev/null differ diff --git a/themes/squares/client/src/img/notifications/warning.png b/themes/squares/client/src/img/notifications/warning.png deleted file mode 100644 index ab8b54ffc..000000000 Binary files a/themes/squares/client/src/img/notifications/warning.png and /dev/null differ diff --git a/themes/squares/client/src/img/padlock.png b/themes/squares/client/src/img/padlock.png deleted file mode 100644 index 31abbaeef..000000000 Binary files a/themes/squares/client/src/img/padlock.png and /dev/null differ diff --git a/themes/squares/client/src/img/password_white.png b/themes/squares/client/src/img/password_white.png deleted file mode 100644 index 0b93ef3fb..000000000 Binary files a/themes/squares/client/src/img/password_white.png and /dev/null differ diff --git a/themes/squares/client/src/img/pendrive.png b/themes/squares/client/src/img/pendrive.png deleted file mode 100644 index fa49178c3..000000000 Binary files a/themes/squares/client/src/img/pendrive.png and /dev/null differ diff --git a/themes/squares/client/src/img/sharingan.png b/themes/squares/client/src/img/sharingan.png deleted file mode 100644 index 526787d3b..000000000 Binary files a/themes/squares/client/src/img/sharingan.png and /dev/null differ diff --git a/themes/squares/client/src/img/stores/.directory b/themes/squares/client/src/img/stores/.directory deleted file mode 100644 index 7bdc8daf8..000000000 --- a/themes/squares/client/src/img/stores/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,25 -Version=3 -ViewMode=1 diff --git a/themes/squares/client/src/img/stores/applestore-badge.svg b/themes/squares/client/src/img/stores/applestore-badge.svg deleted file mode 100644 index ac111e597..000000000 --- a/themes/squares/client/src/img/stores/applestore-badge.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/squares/client/src/img/stores/googleplay-badge.svg b/themes/squares/client/src/img/stores/googleplay-badge.svg deleted file mode 100644 index 9e33e3aa2..000000000 --- a/themes/squares/client/src/img/stores/googleplay-badge.svg +++ /dev/null @@ -1,429 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/themes/squares/client/src/img/success.png b/themes/squares/client/src/img/success.png deleted file mode 100644 index ee9d6841b..000000000 Binary files a/themes/squares/client/src/img/success.png and /dev/null differ diff --git a/themes/squares/client/src/img/user.png b/themes/squares/client/src/img/user.png deleted file mode 100644 index 00941399d..000000000 Binary files a/themes/squares/client/src/img/user.png and /dev/null differ diff --git a/themes/squares/client/src/img/warning.png b/themes/squares/client/src/img/warning.png deleted file mode 100644 index c6acd953b..000000000 Binary files a/themes/squares/client/src/img/warning.png and /dev/null differ diff --git a/themes/squares/client/src/thirdparties/qrcode.min.js b/themes/squares/client/src/thirdparties/qrcode.min.js deleted file mode 100644 index 993e88f39..000000000 --- a/themes/squares/client/src/thirdparties/qrcode.min.js +++ /dev/null @@ -1 +0,0 @@ -var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/themes/squares/client/src/thirdparties/u2f-api.js b/themes/squares/client/src/thirdparties/u2f-api.js deleted file mode 100644 index 8c7801e3b..000000000 --- a/themes/squares/client/src/thirdparties/u2f-api.js +++ /dev/null @@ -1,749 +0,0 @@ -//Copyright 2014-2015 Google Inc. All rights reserved. - -//Use of this source code is governed by a BSD-style -//license that can be found in the LICENSE file or at -//https://developers.google.com/open-source/licenses/bsd - -/** - * @fileoverview The U2F api. - */ -'use strict'; - - -/** - * Namespace for the U2F api. - * @type {Object} - */ -var u2f = u2f || {}; - -/** - * FIDO U2F Javascript API Version - * @number - */ -var js_api_version; - -/** - * The U2F extension id - * @const {string} - */ -// The Chrome packaged app extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the package Chrome app and does not require installing the U2F Chrome extension. - u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd'; -// The U2F Chrome extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the U2F Chrome extension to authenticate. -// u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne'; - - -/** - * Message types for messsages to/from the extension - * @const - * @enum {string} - */ -u2f.MessageTypes = { - 'U2F_REGISTER_REQUEST': 'u2f_register_request', - 'U2F_REGISTER_RESPONSE': 'u2f_register_response', - 'U2F_SIGN_REQUEST': 'u2f_sign_request', - 'U2F_SIGN_RESPONSE': 'u2f_sign_response', - 'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request', - 'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response' -}; - - -/** - * Response status codes - * @const - * @enum {number} - */ -u2f.ErrorCodes = { - 'OK': 0, - 'OTHER_ERROR': 1, - 'BAD_REQUEST': 2, - 'CONFIGURATION_UNSUPPORTED': 3, - 'DEVICE_INELIGIBLE': 4, - 'TIMEOUT': 5 -}; - - -/** - * A message for registration requests - * @typedef {{ - * type: u2f.MessageTypes, - * appId: ?string, - * timeoutSeconds: ?number, - * requestId: ?number - * }} - */ -u2f.U2fRequest; - - -/** - * A message for registration responses - * @typedef {{ - * type: u2f.MessageTypes, - * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse), - * requestId: ?number - * }} - */ -u2f.U2fResponse; - - -/** - * An error object for responses - * @typedef {{ - * errorCode: u2f.ErrorCodes, - * errorMessage: ?string - * }} - */ -u2f.Error; - -/** - * Data object for a single sign request. - * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}} - */ -u2f.Transport; - - -/** - * Data object for a single sign request. - * @typedef {Array} - */ -u2f.Transports; - -/** - * Data object for a single sign request. - * @typedef {{ - * version: string, - * challenge: string, - * keyHandle: string, - * appId: string - * }} - */ -u2f.SignRequest; - - -/** - * Data object for a sign response. - * @typedef {{ - * keyHandle: string, - * signatureData: string, - * clientData: string - * }} - */ -u2f.SignResponse; - - -/** - * Data object for a registration request. - * @typedef {{ - * version: string, - * challenge: string - * }} - */ -u2f.RegisterRequest; - - -/** - * Data object for a registration response. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: Transports, - * appId: string - * }} - */ -u2f.RegisterResponse; - - -/** - * Data object for a registered key. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: ?Transports, - * appId: ?string - * }} - */ -u2f.RegisteredKey; - - -/** - * Data object for a get API register response. - * @typedef {{ - * js_api_version: number - * }} - */ -u2f.GetJsApiVersionResponse; - - -//Low level MessagePort API support - -/** - * Sets up a MessagePort to the U2F extension using the - * available mechanisms. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - */ -u2f.getMessagePort = function(callback) { - if (typeof chrome != 'undefined' && chrome.runtime) { - // The actual message here does not matter, but we need to get a reply - // for the callback to run. Thus, send an empty signature request - // in order to get a failure response. - var msg = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: [] - }; - chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() { - if (!chrome.runtime.lastError) { - // We are on a whitelisted origin and can talk directly - // with the extension. - u2f.getChromeRuntimePort_(callback); - } else { - // chrome.runtime was available, but we couldn't message - // the extension directly, use iframe - u2f.getIframePort_(callback); - } - }); - } else if (u2f.isAndroidChrome_()) { - u2f.getAuthenticatorPort_(callback); - } else if (u2f.isIosChrome_()) { - u2f.getIosPort_(callback); - } else { - // chrome.runtime was not available at all, which is normal - // when this origin doesn't have access to any extensions. - u2f.getIframePort_(callback); - } -}; - -/** - * Detect chrome running on android based on the browser's useragent. - * @private - */ -u2f.isAndroidChrome_ = function() { - var userAgent = navigator.userAgent; - return userAgent.indexOf('Chrome') != -1 && - userAgent.indexOf('Android') != -1; -}; - -/** - * Detect chrome running on iOS based on the browser's platform. - * @private - */ -u2f.isIosChrome_ = function() { - return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1; -}; - -/** - * Connects directly to the extension via chrome.runtime.connect. - * @param {function(u2f.WrappedChromeRuntimePort_)} callback - * @private - */ -u2f.getChromeRuntimePort_ = function(callback) { - var port = chrome.runtime.connect(u2f.EXTENSION_ID, - {'includeTlsChannelId': true}); - setTimeout(function() { - callback(new u2f.WrappedChromeRuntimePort_(port)); - }, 0); -}; - -/** - * Return a 'port' abstraction to the Authenticator app. - * @param {function(u2f.WrappedAuthenticatorPort_)} callback - * @private - */ -u2f.getAuthenticatorPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedAuthenticatorPort_()); - }, 0); -}; - -/** - * Return a 'port' abstraction to the iOS client app. - * @param {function(u2f.WrappedIosPort_)} callback - * @private - */ -u2f.getIosPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedIosPort_()); - }, 0); -}; - -/** - * A wrapper for chrome.runtime.Port that is compatible with MessagePort. - * @param {Port} port - * @constructor - * @private - */ -u2f.WrappedChromeRuntimePort_ = function(port) { - this.port_ = port; -}; - -/** - * Format and return a sign request compliant with the JS API version supported by the extension. - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatSignRequest_ = - function(appId, challenge, registeredKeys, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: challenge, - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: signRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - appId: appId, - challenge: challenge, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - -/** - * Format and return a register request compliant with the JS API version supported by the extension.. - * @param {Array} signRequests - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatRegisterRequest_ = - function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - for (var i = 0; i < registerRequests.length; i++) { - registerRequests[i].appId = appId; - } - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: registerRequests[0], - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - signRequests: signRequests, - registerRequests: registerRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - appId: appId, - registerRequests: registerRequests, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - - -/** - * Posts a message on the underlying channel. - * @param {Object} message - */ -u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) { - this.port_.postMessage(message); -}; - - -/** - * Emulates the HTML 5 addEventListener interface. Works only for the - * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedChromeRuntimePort_.prototype.addEventListener = - function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message' || name == 'onmessage') { - this.port_.onMessage.addListener(function(message) { - // Emulate a minimal MessageEvent object - handler({'data': message}); - }); - } else { - console.error('WrappedChromeRuntimePort only supports onMessage'); - } -}; - -/** - * Wrap the Authenticator app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedAuthenticatorPort_ = function() { - this.requestId_ = -1; - this.requestObject_ = null; -} - -/** - * Launch the Authenticator intent. - * @param {Object} message - */ -u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) { - var intentUrl = - u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ + - ';S.request=' + encodeURIComponent(JSON.stringify(message)) + - ';end'; - document.location = intentUrl; -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() { - return "WrappedAuthenticatorPort_"; -}; - - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message') { - var self = this; - /* Register a callback to that executes when - * chrome injects the response. */ - window.addEventListener( - 'message', self.onRequestUpdate_.bind(self, handler), false); - } else { - console.error('WrappedAuthenticatorPort only supports message'); - } -}; - -/** - * Callback invoked when a response is received from the Authenticator. - * @param function({data: Object}) callback - * @param {Object} message message Object - */ -u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ = - function(callback, message) { - var messageObject = JSON.parse(message.data); - var intentUrl = messageObject['intentURL']; - - var errorCode = messageObject['errorCode']; - var responseObject = null; - if (messageObject.hasOwnProperty('data')) { - responseObject = /** @type {Object} */ ( - JSON.parse(messageObject['data'])); - } - - callback({'data': responseObject}); -}; - -/** - * Base URL for intents to Authenticator. - * @const - * @private - */ -u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ = - 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE'; - -/** - * Wrap the iOS client app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedIosPort_ = function() {}; - -/** - * Launch the iOS client app request - * @param {Object} message - */ -u2f.WrappedIosPort_.prototype.postMessage = function(message) { - var str = JSON.stringify(message); - var url = "u2f://auth?" + encodeURI(str); - location.replace(url); -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedIosPort_.prototype.getPortType = function() { - return "WrappedIosPort_"; -}; - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name !== 'message') { - console.error('WrappedIosPort only supports message'); - } -}; - -/** - * Sets up an embedded trampoline iframe, sourced from the extension. - * @param {function(MessagePort)} callback - * @private - */ -u2f.getIframePort_ = function(callback) { - // Create the iframe - var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID; - var iframe = document.createElement('iframe'); - iframe.src = iframeOrigin + '/u2f-comms.html'; - iframe.setAttribute('style', 'display:none'); - document.body.appendChild(iframe); - - var channel = new MessageChannel(); - var ready = function(message) { - if (message.data == 'ready') { - channel.port1.removeEventListener('message', ready); - callback(channel.port1); - } else { - console.error('First event on iframe port was not "ready"'); - } - }; - channel.port1.addEventListener('message', ready); - channel.port1.start(); - - iframe.addEventListener('load', function() { - // Deliver the port to the iframe and initialize - iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]); - }); -}; - - -//High-level JS API - -/** - * Default extension response timeout in seconds. - * @const - */ -u2f.EXTENSION_TIMEOUT_SEC = 30; - -/** - * A singleton instance for a MessagePort to the extension. - * @type {MessagePort|u2f.WrappedChromeRuntimePort_} - * @private - */ -u2f.port_ = null; - -/** - * Callbacks waiting for a port - * @type {Array} - * @private - */ -u2f.waitingForPort_ = []; - -/** - * A counter for requestIds. - * @type {number} - * @private - */ -u2f.reqCounter_ = 0; - -/** - * A map from requestIds to client callbacks - * @type {Object.} - * @private - */ -u2f.callbackMap_ = {}; - -/** - * Creates or retrieves the MessagePort singleton to use. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - * @private - */ -u2f.getPortSingleton_ = function(callback) { - if (u2f.port_) { - callback(u2f.port_); - } else { - if (u2f.waitingForPort_.length == 0) { - u2f.getMessagePort(function(port) { - u2f.port_ = port; - u2f.port_.addEventListener('message', - /** @type {function(Event)} */ (u2f.responseHandler_)); - - // Careful, here be async callbacks. Maybe. - while (u2f.waitingForPort_.length) - u2f.waitingForPort_.shift()(u2f.port_); - }); - } - u2f.waitingForPort_.push(callback); - } -}; - -/** - * Handles response messages from the extension. - * @param {MessageEvent.} message - * @private - */ -u2f.responseHandler_ = function(message) { - var response = message.data; - var reqId = response['requestId']; - if (!reqId || !u2f.callbackMap_[reqId]) { - console.error('Unknown or missing requestId in response.'); - return; - } - var cb = u2f.callbackMap_[reqId]; - delete u2f.callbackMap_[reqId]; - cb(response['responseData']); -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the sign request. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual sign request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual sign request in the supported API version. - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the register request. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual register request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual register request in the supported API version. - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatRegisterRequest_( - appId, registeredKeys, registerRequests, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - - -/** - * Dispatches a message to the extension to find out the supported - * JS API version. - * If the user is on a mobile phone and is thus using Google Authenticator instead - * of the Chrome extension, don't send the request and simply return 0. - * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.getApiVersion = function(callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - // If we are using Android Google Authenticator or iOS client app, - // do not fire an intent to ask which JS API version to use. - if (port.getPortType) { - var apiVersion; - switch (port.getPortType()) { - case 'WrappedIosPort_': - case 'WrappedAuthenticatorPort_': - apiVersion = 1.1; - break; - - default: - apiVersion = 0; - break; - } - callback({ 'js_api_version': apiVersion }); - return; - } - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); -}; - diff --git a/themes/squares/server/.directory b/themes/squares/server/.directory deleted file mode 100644 index b7754766c..000000000 --- a/themes/squares/server/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,58,20 -Version=3 -ViewMode=1 diff --git a/themes/squares/server/src/resources/email-template.ejs b/themes/squares/server/src/resources/email-template.ejs deleted file mode 100644 index f59c2f944..000000000 --- a/themes/squares/server/src/resources/email-template.ejs +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - Simples-Minimalistic Responsive Template - - - - - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - -
-

<%= title %>

-
- -
 
-
-
- - - - - - - - -
- - - - - - -
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - - - - - - - - - - - - -
- This email has been sent to you in order to validate your identity. Please ignore it if you do not know why you received it. -
 
- <%= button_title %> -
-
 
-
-
- - - - - - - - -
- - - - - - - - - - - - -
 
 
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - -
- Please ignore this email if you did not initiate the process. -
-
-
- - - - - diff --git a/themes/squares/server/src/views/already-logged-in.pug b/themes/squares/server/src/views/already-logged-in.pug deleted file mode 100644 index 137bbea30..000000000 --- a/themes/squares/server/src/views/already-logged-in.pug +++ /dev/null @@ -1,14 +0,0 @@ -extends layout/layout.pug - -block form-header - h1 Sign in - -block content - img(class="header-img" src="/img/success.png" alt="success") - if redirection_url - p You are already logged in as #{ username }.

- | If you are not redirected in few seconds, click here.

- | Otherwise, click here to log off. - else - p You are already logged in as #{ username }.

- | Click here to log off. diff --git a/themes/squares/server/src/views/errors/.directory b/themes/squares/server/src/views/errors/.directory deleted file mode 100644 index 33f71bea4..000000000 --- a/themes/squares/server/src/views/errors/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,59,57 -Version=3 -ViewMode=1 diff --git a/themes/squares/server/src/views/errors/401.pug b/themes/squares/server/src/views/errors/401.pug deleted file mode 100644 index b7a222ad0..000000000 --- a/themes/squares/server/src/views/errors/401.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-401"; - -block form-header - h1 Error 401 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You are not authorized to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You are not authorized to access this resource. \ No newline at end of file diff --git a/themes/squares/server/src/views/errors/403.pug b/themes/squares/server/src/views/errors/403.pug deleted file mode 100644 index f4b5ca8a2..000000000 --- a/themes/squares/server/src/views/errors/403.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-403"; - -block form-header - h1 Error 403 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You don't have enough privileges to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You don't have enough privileges to access this resource. diff --git a/themes/squares/server/src/views/errors/404.pug b/themes/squares/server/src/views/errors/404.pug deleted file mode 100644 index 06d6375fc..000000000 --- a/themes/squares/server/src/views/errors/404.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-404"; - -block form-header -

Error 404

- -block content - img(class="header-img" src="/img/warning.png" alt="warning") - p Page not found. diff --git a/themes/squares/server/src/views/firstfactor.pug b/themes/squares/server/src/views/firstfactor.pug deleted file mode 100644 index 574470710..000000000 --- a/themes/squares/server/src/views/firstfactor.pug +++ /dev/null @@ -1,23 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "firstfactor"; - -block form-header - h1 Sign in - -block content - div(class="notification") - img(class="header-img" src="/img/sharingan.png" alt="user profile") - p Enter your credentials to sign in - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" id="username" placeholder="Username" required autofocus) - input(type="password" class="form-control" id="password" placeholder="Password" required) - button(id="signin" class="btn btn-lg btn-primary btn-block" type="submit") Sign in - div(class="keep-me-logged-in pull-left") - input(type="checkbox" id="keep_me_logged_in" name="keep_me_logged_in" value="true") - label(for="keep_me_logged_in") Keep me logged in - div(class="bottom-right-links pull-right") - a(href=reset_password_request_endpoint, class="link forgot-password") Forgot password? - span(class="clearfix") diff --git a/themes/squares/server/src/views/layout/layout.pug b/themes/squares/server/src/views/layout/layout.pug deleted file mode 100644 index 43247436d..000000000 --- a/themes/squares/server/src/views/layout/layout.pug +++ /dev/null @@ -1,28 +0,0 @@ -block variables - -doctype html -html - head - title Authelia - 2FA - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="robots", content="noindex, nofollow, nosnippet, noarchive") - meta(http-equiv="Content-Security-Policy", content="default-src 'self'; img-src 'self' data:;") - link(rel="icon", href="/img/icon.png" type="image/png" sizes="32x32") - link(rel="stylesheet", type="text/css", href="/css/authelia.css") - if redirection_url - meta(http-equiv="refresh" content="4;url=" + redirection_url) - body - div(class="container") - div(class="row") - div(class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3") - div(class="account-wall " + page_classname) - div(class="row header") - block form-header - div(class="row body") - div(class="form col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2") - block content - div(class="row footer poweredby-block") - div(class="poweredby col-xs-6 col-xs-offset-4 col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4") - | Powered by Authelia - block entrypoint - script(src="/js/authelia.js", type="text/javascript") diff --git a/themes/squares/server/src/views/need-identity-validation.pug b/themes/squares/server/src/views/need-identity-validation.pug deleted file mode 100644 index 4cfd62717..000000000 --- a/themes/squares/server/src/views/need-identity-validation.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "identity-validation"; - -block form-header - h1 Registration - -block content - img(class="header-img" src="/img/mail.png" alt="mail") - p A confirmation email has been sent to your mailbox. - | Please open it and click on the link within 15 minutes to confirm the registration. diff --git a/themes/squares/server/src/views/password-reset-form.pug b/themes/squares/server/src/views/password-reset-form.pug deleted file mode 100644 index fd9311892..000000000 --- a/themes/squares/server/src/views/password-reset-form.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-form"; - -block form-header - h1 Reset password - -block content - div(class="notification") - img(class="header-img" src="/img/password_white.png" alt="password") - p Set your new password and confirm it. - form(class="form-signin") - div(class="form-inputs") - input(class="form-control" type="password" name="password1" id="password1" placeholder="New password" required="required") - input(class="form-control" type="password" name="password2" id="password2" placeholder="Password confirmation" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/squares/server/src/views/password-reset-request.pug b/themes/squares/server/src/views/password-reset-request.pug deleted file mode 100644 index 855b5998b..000000000 --- a/themes/squares/server/src/views/password-reset-request.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-request"; - -block form-header - h1 Reset password - -block content - div(class="notification") - div - img(class="header-img" src="/img/password_white.png" alt="password") - p After giving your username, you will receive an email to change your password. - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" name="username" id="username" placeholder="Your username" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/squares/server/src/views/secondfactor.pug b/themes/squares/server/src/views/secondfactor.pug deleted file mode 100644 index 87b578185..000000000 --- a/themes/squares/server/src/views/secondfactor.pug +++ /dev/null @@ -1,31 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "secondfactor"; - -block form-header - h1 Sign in - -block content - div - div(class="notification notification-totp") - h3 Hi #{username} - div(class="row") - div(class="u2f-token") - img(src="/img/pendrive.png", alt="security key") - p - | Please, touch your security key
- b Or
- | Get a one-time password - form(class="form-signin totp") - div(class="form-inputs") - input(type="text" autocomplete="off" class="form-control" id="token" placeholder="Token" required autofocus) - button(class="btn btn-lg btn-primary btn-block totp-button" type="submit") Sign in - div(class="pull-right bottom-right-links") - div Need to register? - div - a(href=u2f_identity_start_endpoint, class="link register-u2f", data-toggle="tooltip", title="A security key is required to register.") Security key - | | - a(href=totp_identity_start_endpoint, class="link register-totp") Google Authenticator - span(class="clearfix") - script(src="/js/u2f-api.js", type="text/javascript") diff --git a/themes/squares/server/src/views/totp-register.pug b/themes/squares/server/src/views/totp-register.pug deleted file mode 100644 index 1b4d98354..000000000 --- a/themes/squares/server/src/views/totp-register.pug +++ /dev/null @@ -1,25 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "totp-register"; - -block form-header - h1 One-time passwords - -block content - p Open Google Authenticator and add this entry - p(id="secret") #{ base32_secret } - p or scan this barcode - div(id="qrcode") #{ otpauth_url } - p - a(href=login_endpoint, id="login-button") Login - div(class="need-google-authenticator") - | Need Google Authenticator? - div(class="store-badges") - a(href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1', target="_blank") - img(alt='Get it on Google Play', src='/img/stores/googleplay-badge.svg', class="store-badge") - a(href='https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8', target="_blank") - img(alt='Get it on Apple Store' src='/img/stores/applestore-badge.svg' class="store-badge") - -block entrypoint - script(src="/js/qrcode.min.js", type="text/javascript" ) diff --git a/themes/squares/server/src/views/u2f-register.pug b/themes/squares/server/src/views/u2f-register.pug deleted file mode 100644 index d52eba6ca..000000000 --- a/themes/squares/server/src/views/u2f-register.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "u2f-register"; - -block form-header - h1 Register your security key - -block content - p Touch the token to register your security key. - img(src="/img/pendrive.png" alt="pendrive") - script(src="/js/u2f-api.js", type="text/javascript") \ No newline at end of file diff --git a/themes/triangles/client/src/.directory b/themes/triangles/client/src/.directory deleted file mode 100644 index 72a940d6a..000000000 --- a/themes/triangles/client/src/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,18,8,25,40 -Version=3 -ViewMode=1 diff --git a/themes/triangles/client/src/css/.directory b/themes/triangles/client/src/css/.directory deleted file mode 100644 index 6e4b3f639..000000000 --- a/themes/triangles/client/src/css/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,56,41 -Version=3 -ViewMode=1 diff --git a/themes/triangles/client/src/css/00-bootstrap.min.css b/themes/triangles/client/src/css/00-bootstrap.min.css deleted file mode 100644 index dfeacbb88..000000000 --- a/themes/triangles/client/src/css/00-bootstrap.min.css +++ /dev/null @@ -1,5768 +0,0 @@ -/*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html{ - font-family:sans-serif; - -webkit-text-size-adjust:100%; - -ms-text-size-adjust:100% -} -body{ - margin:0 -} -article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{ - display:block -} -audio,canvas,progress,video{ - display:inline-block; - vertical-align:baseline -} -audio:not([controls]){ - display:none; - height:0 -} -[hidden],template{ - display:none -} -a{ - background-color:transparent -} -a:active,a:hover{ - outline:0 -} -abbr[title]{ - border-bottom:1px dotted -} -b,strong{ - font-weight:700 -} -dfn{ - font-style:italic -} -h1{ - margin:.67em 0; - font-size:2em -} -mark{ - color:#000; - background:#ff0 -} -small{ - font-size:80% -} -sub,sup{ - position:relative; - font-size:75%; - line-height:0; - vertical-align:baseline -} -sup{ - top:-.5em -} -sub{ - bottom:-.25em -} -img{ - border:0 -} -svg:not(:root){ - overflow:hidden -} -figure{ - margin:1em 40px -} -hr{ - height:0; - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box -} -pre{ - overflow:auto -} -code,kbd,pre,samp{ - font-family:monospace,monospace; - font-size:1em -} -button,input,optgroup,select,textarea{ - margin:0; - font:inherit; - color:inherit -} -button{ - overflow:visible -} -button,select{ - text-transform:none -} -button,html input[type=button],input[type=reset],input[type=submit]{ - -webkit-appearance:button; - cursor:pointer -} -button[disabled],html input[disabled]{ - cursor:default -} -button::-moz-focus-inner,input::-moz-focus-inner{ - padding:0; - border:0 -} -input{ - line-height:normal -} -input[type=checkbox],input[type=radio]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - padding:0 -} -input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{ - height:auto -} -input[type=search]{ - -webkit-box-sizing:content-box; - -moz-box-sizing:content-box; - box-sizing:content-box; - -webkit-appearance:textfield -} -input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{ - -webkit-appearance:none -} -fieldset{ - padding:.35em .625em .75em; - margin:0 2px; - border:1px solid silver -} -legend{ - padding:0; - border:0 -} -textarea{ - overflow:auto -} -optgroup{ - font-weight:700 -} -table{ - border-spacing:0; - border-collapse:collapse -} -td,th{ - padding:0 -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print{ - *,:after,:before{ - color:#000!important; - text-shadow:none!important; - background:0 0!important; - -webkit-box-shadow:none!important; - box-shadow:none!important - } - a,a:visited{ - text-decoration:underline - } - a[href]:after{ - content:" (" attr(href) ")" - } - abbr[title]:after{ - content:" (" attr(title) ")" - } - a[href^="javascript:"]:after,a[href^="#"]:after{ - content:"" - } - blockquote,pre{ - border:1px solid #999; - page-break-inside:avoid - } - thead{ - display:table-header-group - } - img,tr{ - page-break-inside:avoid - } - img{ - max-width:100%!important - } - h2,h3,p{ - orphans:3; - widows:3 - } - h2,h3{ - page-break-after:avoid - } - .navbar{ - display:none - } - .btn>.caret,.dropup>.btn>.caret{ - border-top-color:#000!important - } - .label{ - border:1px solid #000 - } - .table{ - border-collapse:collapse!important - } - .table td,.table th{ - background-color:#fff!important - } - .table-bordered td,.table-bordered th{ - border:1px solid #ddd!important - } -} -@font-face{ - font-family:'Glyphicons Halflings'; - src:url(../fonts/glyphicons-halflings-regular.eot); - src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg') -} -.glyphicon{ - position:relative; - top:1px; - display:inline-block; - font-family:'Glyphicons Halflings'; - font-style:normal; - font-weight:400; - line-height:1; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale -} -.glyphicon-asterisk:before{ - content:"\002a" -} -.glyphicon-plus:before{ - content:"\002b" -} -.glyphicon-eur:before,.glyphicon-euro:before{ - content:"\20ac" -} -.glyphicon-minus:before{ - content:"\2212" -} -.glyphicon-cloud:before{ - content:"\2601" -} -.glyphicon-envelope:before{ - content:"\2709" -} -.glyphicon-pencil:before{ - content:"\270f" -} -.glyphicon-glass:before{ - content:"\e001" -} -.glyphicon-music:before{ - content:"\e002" -} -.glyphicon-search:before{ - content:"\e003" -} -.glyphicon-heart:before{ - content:"\e005" -} -.glyphicon-star:before{ - content:"\e006" -} -.glyphicon-star-empty:before{ - content:"\e007" -} -.glyphicon-user:before{ - content:"\e008" -} -.glyphicon-film:before{ - content:"\e009" -} -.glyphicon-th-large:before{ - content:"\e010" -} -.glyphicon-th:before{ - content:"\e011" -} -.glyphicon-th-list:before{ - content:"\e012" -} -.glyphicon-ok:before{ - content:"\e013" -} -.glyphicon-remove:before{ - content:"\e014" -} -.glyphicon-zoom-in:before{ - content:"\e015" -} -.glyphicon-zoom-out:before{ - content:"\e016" -} -.glyphicon-off:before{ - content:"\e017" -} -.glyphicon-signal:before{ - content:"\e018" -} -.glyphicon-cog:before{ - content:"\e019" -} -.glyphicon-trash:before{ - content:"\e020" -} -.glyphicon-home:before{ - content:"\e021" -} -.glyphicon-file:before{ - content:"\e022" -} -.glyphicon-time:before{ - content:"\e023" -} -.glyphicon-road:before{ - content:"\e024" -} -.glyphicon-download-alt:before{ - content:"\e025" -} -.glyphicon-download:before{ - content:"\e026" -} -.glyphicon-upload:before{ - content:"\e027" -} -.glyphicon-inbox:before{ - content:"\e028" -} -.glyphicon-play-circle:before{ - content:"\e029" -} -.glyphicon-repeat:before{ - content:"\e030" -} -.glyphicon-refresh:before{ - content:"\e031" -} -.glyphicon-list-alt:before{ - content:"\e032" -} -.glyphicon-lock:before{ - content:"\e033" -} -.glyphicon-flag:before{ - content:"\e034" -} -.glyphicon-headphones:before{ - content:"\e035" -} -.glyphicon-volume-off:before{ - content:"\e036" -} -.glyphicon-volume-down:before{ - content:"\e037" -} -.glyphicon-volume-up:before{ - content:"\e038" -} -.glyphicon-qrcode:before{ - content:"\e039" -} -.glyphicon-barcode:before{ - content:"\e040" -} -.glyphicon-tag:before{ - content:"\e041" -} -.glyphicon-tags:before{ - content:"\e042" -} -.glyphicon-book:before{ - content:"\e043" -} -.glyphicon-bookmark:before{ - content:"\e044" -} -.glyphicon-print:before{ - content:"\e045" -} -.glyphicon-camera:before{ - content:"\e046" -} -.glyphicon-font:before{ - content:"\e047" -} -.glyphicon-bold:before{ - content:"\e048" -} -.glyphicon-italic:before{ - content:"\e049" -} -.glyphicon-text-height:before{ - content:"\e050" -} -.glyphicon-text-width:before{ - content:"\e051" -} -.glyphicon-align-left:before{ - content:"\e052" -} -.glyphicon-align-center:before{ - content:"\e053" -} -.glyphicon-align-right:before{ - content:"\e054" -} -.glyphicon-align-justify:before{ - content:"\e055" -} -.glyphicon-list:before{ - content:"\e056" -} -.glyphicon-indent-left:before{ - content:"\e057" -} -.glyphicon-indent-right:before{ - content:"\e058" -} -.glyphicon-facetime-video:before{ - content:"\e059" -} -.glyphicon-picture:before{ - content:"\e060" -} -.glyphicon-map-marker:before{ - content:"\e062" -} -.glyphicon-adjust:before{ - content:"\e063" -} -.glyphicon-tint:before{ - content:"\e064" -} -.glyphicon-edit:before{ - content:"\e065" -} -.glyphicon-share:before{ - content:"\e066" -} -.glyphicon-check:before{ - content:"\e067" -} -.glyphicon-move:before{ - content:"\e068" -} -.glyphicon-step-backward:before{ - content:"\e069" -} -.glyphicon-fast-backward:before{ - content:"\e070" -} -.glyphicon-backward:before{ - content:"\e071" -} -.glyphicon-play:before{ - content:"\e072" -} -.glyphicon-pause:before{ - content:"\e073" -} -.glyphicon-stop:before{ - content:"\e074" -} -.glyphicon-forward:before{ - content:"\e075" -} -.glyphicon-fast-forward:before{ - content:"\e076" -} -.glyphicon-step-forward:before{ - content:"\e077" -} -.glyphicon-eject:before{ - content:"\e078" -} -.glyphicon-chevron-left:before{ - content:"\e079" -} -.glyphicon-chevron-right:before{ - content:"\e080" -} -.glyphicon-plus-sign:before{ - content:"\e081" -} -.glyphicon-minus-sign:before{ - content:"\e082" -} -.glyphicon-remove-sign:before{ - content:"\e083" -} -.glyphicon-ok-sign:before{ - content:"\e084" -} -.glyphicon-question-sign:before{ - content:"\e085" -} -.glyphicon-info-sign:before{ - content:"\e086" -} -.glyphicon-screenshot:before{ - content:"\e087" -} -.glyphicon-remove-circle:before{ - content:"\e088" -} -.glyphicon-ok-circle:before{ - content:"\e089" -} -.glyphicon-ban-circle:before{ - content:"\e090" -} -.glyphicon-arrow-left:before{ - content:"\e091" -} -.glyphicon-arrow-right:before{ - content:"\e092" -} -.glyphicon-arrow-up:before{ - content:"\e093" -} -.glyphicon-arrow-down:before{ - content:"\e094" -} -.glyphicon-share-alt:before{ - content:"\e095" -} -.glyphicon-resize-full:before{ - content:"\e096" -} -.glyphicon-resize-small:before{ - content:"\e097" -} -.glyphicon-exclamation-sign:before{ - content:"\e101" -} -.glyphicon-gift:before{ - content:"\e102" -} -.glyphicon-leaf:before{ - content:"\e103" -} -.glyphicon-fire:before{ - content:"\e104" -} -.glyphicon-eye-open:before{ - content:"\e105" -} -.glyphicon-eye-close:before{ - content:"\e106" -} -.glyphicon-warning-sign:before{ - content:"\e107" -} -.glyphicon-plane:before{ - content:"\e108" -} -.glyphicon-calendar:before{ - content:"\e109" -} -.glyphicon-random:before{ - content:"\e110" -} -.glyphicon-comment:before{ - content:"\e111" -} -.glyphicon-magnet:before{ - content:"\e112" -} -.glyphicon-chevron-up:before{ - content:"\e113" -} -.glyphicon-chevron-down:before{ - content:"\e114" -} -.glyphicon-retweet:before{ - content:"\e115" -} -.glyphicon-shopping-cart:before{ - content:"\e116" -} -.glyphicon-folder-close:before{ - content:"\e117" -} -.glyphicon-folder-open:before{ - content:"\e118" -} -.glyphicon-resize-vertical:before{ - content:"\e119" -} -.glyphicon-resize-horizontal:before{ - content:"\e120" -} -.glyphicon-hdd:before{ - content:"\e121" -} -.glyphicon-bullhorn:before{ - content:"\e122" -} -.glyphicon-bell:before{ - content:"\e123" -} -.glyphicon-certificate:before{ - content:"\e124" -} -.glyphicon-thumbs-up:before{ - content:"\e125" -} -.glyphicon-thumbs-down:before{ - content:"\e126" -} -.glyphicon-hand-right:before{ - content:"\e127" -} -.glyphicon-hand-left:before{ - content:"\e128" -} -.glyphicon-hand-up:before{ - content:"\e129" -} -.glyphicon-hand-down:before{ - content:"\e130" -} -.glyphicon-circle-arrow-right:before{ - content:"\e131" -} -.glyphicon-circle-arrow-left:before{ - content:"\e132" -} -.glyphicon-circle-arrow-up:before{ - content:"\e133" -} -.glyphicon-circle-arrow-down:before{ - content:"\e134" -} -.glyphicon-globe:before{ - content:"\e135" -} -.glyphicon-wrench:before{ - content:"\e136" -} -.glyphicon-tasks:before{ - content:"\e137" -} -.glyphicon-filter:before{ - content:"\e138" -} -.glyphicon-briefcase:before{ - content:"\e139" -} -.glyphicon-fullscreen:before{ - content:"\e140" -} -.glyphicon-dashboard:before{ - content:"\e141" -} -.glyphicon-paperclip:before{ - content:"\e142" -} -.glyphicon-heart-empty:before{ - content:"\e143" -} -.glyphicon-link:before{ - content:"\e144" -} -.glyphicon-phone:before{ - content:"\e145" -} -.glyphicon-pushpin:before{ - content:"\e146" -} -.glyphicon-usd:before{ - content:"\e148" -} -.glyphicon-gbp:before{ - content:"\e149" -} -.glyphicon-sort:before{ - content:"\e150" -} -.glyphicon-sort-by-alphabet:before{ - content:"\e151" -} -.glyphicon-sort-by-alphabet-alt:before{ - content:"\e152" -} -.glyphicon-sort-by-order:before{ - content:"\e153" -} -.glyphicon-sort-by-order-alt:before{ - content:"\e154" -} -.glyphicon-sort-by-attributes:before{ - content:"\e155" -} -.glyphicon-sort-by-attributes-alt:before{ - content:"\e156" -} -.glyphicon-unchecked:before{ - content:"\e157" -} -.glyphicon-expand:before{ - content:"\e158" -} -.glyphicon-collapse-down:before{ - content:"\e159" -} -.glyphicon-collapse-up:before{ - content:"\e160" -} -.glyphicon-log-in:before{ - content:"\e161" -} -.glyphicon-flash:before{ - content:"\e162" -} -.glyphicon-log-out:before{ - content:"\e163" -} -.glyphicon-new-window:before{ - content:"\e164" -} -.glyphicon-record:before{ - content:"\e165" -} -.glyphicon-save:before{ - content:"\e166" -} -.glyphicon-open:before{ - content:"\e167" -} -.glyphicon-saved:before{ - content:"\e168" -} -.glyphicon-import:before{ - content:"\e169" -} -.glyphicon-export:before{ - content:"\e170" -} -.glyphicon-send:before{ - content:"\e171" -} -.glyphicon-floppy-disk:before{ - content:"\e172" -} -.glyphicon-floppy-saved:before{ - content:"\e173" -} -.glyphicon-floppy-remove:before{ - content:"\e174" -} -.glyphicon-floppy-save:before{ - content:"\e175" -} -.glyphicon-floppy-open:before{ - content:"\e176" -} -.glyphicon-credit-card:before{ - content:"\e177" -} -.glyphicon-transfer:before{ - content:"\e178" -} -.glyphicon-cutlery:before{ - content:"\e179" -} -.glyphicon-header:before{ - content:"\e180" -} -.glyphicon-compressed:before{ - content:"\e181" -} -.glyphicon-earphone:before{ - content:"\e182" -} -.glyphicon-phone-alt:before{ - content:"\e183" -} -.glyphicon-tower:before{ - content:"\e184" -} -.glyphicon-stats:before{ - content:"\e185" -} -.glyphicon-sd-video:before{ - content:"\e186" -} -.glyphicon-hd-video:before{ - content:"\e187" -} -.glyphicon-subtitles:before{ - content:"\e188" -} -.glyphicon-sound-stereo:before{ - content:"\e189" -} -.glyphicon-sound-dolby:before{ - content:"\e190" -} -.glyphicon-sound-5-1:before{ - content:"\e191" -} -.glyphicon-sound-6-1:before{ - content:"\e192" -} -.glyphicon-sound-7-1:before{ - content:"\e193" -} -.glyphicon-copyright-mark:before{ - content:"\e194" -} -.glyphicon-registration-mark:before{ - content:"\e195" -} -.glyphicon-cloud-download:before{ - content:"\e197" -} -.glyphicon-cloud-upload:before{ - content:"\e198" -} -.glyphicon-tree-conifer:before{ - content:"\e199" -} -.glyphicon-tree-deciduous:before{ - content:"\e200" -} -.glyphicon-cd:before{ - content:"\e201" -} -.glyphicon-save-file:before{ - content:"\e202" -} -.glyphicon-open-file:before{ - content:"\e203" -} -.glyphicon-level-up:before{ - content:"\e204" -} -.glyphicon-copy:before{ - content:"\e205" -} -.glyphicon-paste:before{ - content:"\e206" -} -.glyphicon-alert:before{ - content:"\e209" -} -.glyphicon-equalizer:before{ - content:"\e210" -} -.glyphicon-king:before{ - content:"\e211" -} -.glyphicon-queen:before{ - content:"\e212" -} -.glyphicon-pawn:before{ - content:"\e213" -} -.glyphicon-bishop:before{ - content:"\e214" -} -.glyphicon-knight:before{ - content:"\e215" -} -.glyphicon-baby-formula:before{ - content:"\e216" -} -.glyphicon-tent:before{ - content:"\26fa" -} -.glyphicon-blackboard:before{ - content:"\e218" -} -.glyphicon-bed:before{ - content:"\e219" -} -.glyphicon-apple:before{ - content:"\f8ff" -} -.glyphicon-erase:before{ - content:"\e221" -} -.glyphicon-hourglass:before{ - content:"\231b" -} -.glyphicon-lamp:before{ - content:"\e223" -} -.glyphicon-duplicate:before{ - content:"\e224" -} -.glyphicon-piggy-bank:before{ - content:"\e225" -} -.glyphicon-scissors:before{ - content:"\e226" -} -.glyphicon-bitcoin:before{ - content:"\e227" -} -.glyphicon-btc:before{ - content:"\e227" -} -.glyphicon-xbt:before{ - content:"\e227" -} -.glyphicon-yen:before{ - content:"\00a5" -} -.glyphicon-jpy:before{ - content:"\00a5" -} -.glyphicon-ruble:before{ - content:"\20bd" -} -.glyphicon-rub:before{ - content:"\20bd" -} -.glyphicon-scale:before{ - content:"\e230" -} -.glyphicon-ice-lolly:before{ - content:"\e231" -} -.glyphicon-ice-lolly-tasted:before{ - content:"\e232" -} -.glyphicon-education:before{ - content:"\e233" -} -.glyphicon-option-horizontal:before{ - content:"\e234" -} -.glyphicon-option-vertical:before{ - content:"\e235" -} -.glyphicon-menu-hamburger:before{ - content:"\e236" -} -.glyphicon-modal-window:before{ - content:"\e237" -} -.glyphicon-oil:before{ - content:"\e238" -} -.glyphicon-grain:before{ - content:"\e239" -} -.glyphicon-sunglasses:before{ - content:"\e240" -} -.glyphicon-text-size:before{ - content:"\e241" -} -.glyphicon-text-color:before{ - content:"\e242" -} -.glyphicon-text-background:before{ - content:"\e243" -} -.glyphicon-object-align-top:before{ - content:"\e244" -} -.glyphicon-object-align-bottom:before{ - content:"\e245" -} -.glyphicon-object-align-horizontal:before{ - content:"\e246" -} -.glyphicon-object-align-left:before{ - content:"\e247" -} -.glyphicon-object-align-vertical:before{ - content:"\e248" -} -.glyphicon-object-align-right:before{ - content:"\e249" -} -.glyphicon-triangle-right:before{ - content:"\e250" -} -.glyphicon-triangle-left:before{ - content:"\e251" -} -.glyphicon-triangle-bottom:before{ - content:"\e252" -} -.glyphicon-triangle-top:before{ - content:"\e253" -} -.glyphicon-console:before{ - content:"\e254" -} -.glyphicon-superscript:before{ - content:"\e255" -} -.glyphicon-subscript:before{ - content:"\e256" -} -.glyphicon-menu-left:before{ - content:"\e257" -} -.glyphicon-menu-right:before{ - content:"\e258" -} -.glyphicon-menu-down:before{ - content:"\e259" -} -.glyphicon-menu-up:before{ - content:"\e260" -} -*{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -:after,:before{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -html{ - font-size:10px; - -webkit-tap-highlight-color:rgba(0,0,0,0) -} -body{ - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - line-height:1.42857143; - color:#333; - background-color:#fff -} -button,input,select,textarea{ - font-family:inherit; - font-size:inherit; - line-height:inherit -} -a{ - color:#337ab7; - text-decoration:none -} -a:focus,a:hover{ - color:#23527c; - text-decoration:underline -} -a:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -figure{ - margin:0 -} -img{ - vertical-align:middle -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{ - display:block; - max-width:100%; - height:auto -} -.img-rounded{ - border-radius:6px -} -.img-thumbnail{ - display:inline-block; - max-width:100%; - height:auto; - padding:4px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:all .2s ease-in-out; - -o-transition:all .2s ease-in-out; - transition:all .2s ease-in-out -} -.img-circle{ - border-radius:50% -} -hr{ - margin-top:20px; - margin-bottom:20px; - border:0; - border-top:1px solid #eee -} -.sr-only{ - position:absolute; - width:1px; - height:1px; - padding:0; - margin:-1px; - overflow:hidden; - clip:rect(0,0,0,0); - border:0 -} -.sr-only-focusable:active,.sr-only-focusable:focus{ - position:static; - width:auto; - height:auto; - margin:0; - overflow:visible; - clip:auto -} -[role=button]{ - cursor:pointer -} -.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{ - font-family:inherit; - font-weight:500; - line-height:1.1; - color:inherit -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-weight:400; - line-height:1; - color:#777 -} -.h1,.h2,.h3,h1,h2,h3{ - margin-top:20px; - margin-bottom:10px -} -.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{ - font-size:65% -} -.h4,.h5,.h6,h4,h5,h6{ - margin-top:10px; - margin-bottom:10px -} -.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{ - font-size:75% -} -.h1,h1{ - font-size:36px -} -.h2,h2{ - font-size:30px -} -.h3,h3{ - font-size:24px -} -.h4,h4{ - font-size:18px -} -.h5,h5{ - font-size:14px -} -.h6,h6{ - font-size:12px -} -p{ - margin:0 0 10px -} -.lead{ - margin-bottom:20px; - font-size:16px; - font-weight:300; - line-height:1.4 -} -@media (min-width:768px){ - .lead{ - font-size:21px - } -} -.small,small{ - font-size:85% -} -.mark,mark{ - padding:.2em; - background-color:#fcf8e3 -} -.text-left{ - text-align:left -} -.text-right{ - text-align:right -} -.text-center{ - text-align:center -} -.text-justify{ - text-align:justify -} -.text-nowrap{ - white-space:nowrap -} -.text-lowercase{ - text-transform:lowercase -} -.text-uppercase{ - text-transform:uppercase -} -.text-capitalize{ - text-transform:capitalize -} -.text-muted{ - color:#777 -} -.text-primary{ - color:#337ab7 -} -a.text-primary:focus,a.text-primary:hover{ - color:#286090 -} -.text-success{ - color:#3c763d -} -a.text-success:focus,a.text-success:hover{ - color:#2b542c -} -.text-info{ - color:#31708f -} -a.text-info:focus,a.text-info:hover{ - color:#245269 -} -.text-warning{ - color:#8a6d3b -} -a.text-warning:focus,a.text-warning:hover{ - color:#66512c -} -.text-danger{ - color:#a94442 -} -a.text-danger:focus,a.text-danger:hover{ - color:#843534 -} -.bg-primary{ - color:#fff; - background-color:#337ab7 -} -a.bg-primary:focus,a.bg-primary:hover{ - background-color:#286090 -} -.bg-success{ - background-color:#dff0d8 -} -a.bg-success:focus,a.bg-success:hover{ - background-color:#c1e2b3 -} -.bg-info{ - background-color:#d9edf7 -} -a.bg-info:focus,a.bg-info:hover{ - background-color:#afd9ee -} -.bg-warning{ - background-color:#fcf8e3 -} -a.bg-warning:focus,a.bg-warning:hover{ - background-color:#f7ecb5 -} -.bg-danger{ - background-color:#f2dede -} -a.bg-danger:focus,a.bg-danger:hover{ - background-color:#e4b9b9 -} -.page-header{ - padding-bottom:9px; - margin:40px 0 20px; - border-bottom:1px solid #eee -} -ol,ul{ - margin-top:0; - margin-bottom:10px -} -ol ol,ol ul,ul ol,ul ul{ - margin-bottom:0 -} -.list-unstyled{ - padding-left:0; - list-style:none -} -.list-inline{ - padding-left:0; - margin-left:-5px; - list-style:none -} -.list-inline>li{ - display:inline-block; - padding-right:5px; - padding-left:5px -} -dl{ - margin-top:0; - margin-bottom:20px -} -dd,dt{ - line-height:1.42857143 -} -dt{ - font-weight:700 -} -dd{ - margin-left:0 -} -@media (min-width:768px){ - .dl-horizontal dt{ - float:left; - width:160px; - overflow:hidden; - clear:left; - text-align:right; - text-overflow:ellipsis; - white-space:nowrap - } - .dl-horizontal dd{ - margin-left:180px - } -} -abbr[data-original-title],abbr[title]{ - cursor:help; - border-bottom:1px dotted #777 -} -.initialism{ - font-size:90%; - text-transform:uppercase -} -blockquote{ - padding:10px 20px; - margin:0 0 20px; - font-size:17.5px; - border-left:5px solid #eee -} -blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{ - margin-bottom:0 -} -blockquote .small,blockquote footer,blockquote small{ - display:block; - font-size:80%; - line-height:1.42857143; - color:#777 -} -blockquote .small:before,blockquote footer:before,blockquote small:before{ - content:'\2014 \00A0' -} -.blockquote-reverse,blockquote.pull-right{ - padding-right:15px; - padding-left:0; - text-align:right; - border-right:5px solid #eee; - border-left:0 -} -.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{ - content:'' -} -.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{ - content:'\00A0 \2014' -} -address{ - margin-bottom:20px; - font-style:normal; - line-height:1.42857143 -} -code,kbd,pre,samp{ - font-family:Menlo,Monaco,Consolas,"Courier New",monospace -} -code{ - padding:2px 4px; - font-size:90%; - color:#c7254e; - background-color:#f9f2f4; - border-radius:4px -} -kbd{ - padding:2px 4px; - font-size:90%; - color:#fff; - background-color:#333; - border-radius:3px; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.25) -} -kbd kbd{ - padding:0; - font-size:100%; - font-weight:700; - -webkit-box-shadow:none; - box-shadow:none -} -pre{ - display:block; - padding:9.5px; - margin:0 0 10px; - font-size:13px; - line-height:1.42857143; - color:#333; - word-break:break-all; - word-wrap:break-word; - background-color:#f5f5f5; - border:1px solid #ccc; - border-radius:4px -} -pre code{ - padding:0; - font-size:inherit; - color:inherit; - white-space:pre-wrap; - background-color:transparent; - border-radius:0 -} -.pre-scrollable{ - max-height:340px; - overflow-y:scroll -} -.container{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -@media (min-width:768px){ - .container{ - width:750px - } -} -@media (min-width:992px){ - .container{ - width:970px - } -} -@media (min-width:1200px){ - .container{ - width:1170px - } -} -.container-fluid{ - padding-right:15px; - padding-left:15px; - margin-right:auto; - margin-left:auto -} -.row{ - margin-right:-15px; - margin-left:-15px -} -.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - position:relative; - min-height:1px; - padding-right:15px; - padding-left:15px -} -.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{ - float:left -} -.col-xs-12{ - width:100% -} -.col-xs-11{ - width:91.66666667% -} -.col-xs-10{ - width:83.33333333% -} -.col-xs-9{ - width:75% -} -.col-xs-8{ - width:66.66666667% -} -.col-xs-7{ - width:58.33333333% -} -.col-xs-6{ - width:50% -} -.col-xs-5{ - width:41.66666667% -} -.col-xs-4{ - width:33.33333333% -} -.col-xs-3{ - width:25% -} -.col-xs-2{ - width:16.66666667% -} -.col-xs-1{ - width:8.33333333% -} -.col-xs-pull-12{ - right:100% -} -.col-xs-pull-11{ - right:91.66666667% -} -.col-xs-pull-10{ - right:83.33333333% -} -.col-xs-pull-9{ - right:75% -} -.col-xs-pull-8{ - right:66.66666667% -} -.col-xs-pull-7{ - right:58.33333333% -} -.col-xs-pull-6{ - right:50% -} -.col-xs-pull-5{ - right:41.66666667% -} -.col-xs-pull-4{ - right:33.33333333% -} -.col-xs-pull-3{ - right:25% -} -.col-xs-pull-2{ - right:16.66666667% -} -.col-xs-pull-1{ - right:8.33333333% -} -.col-xs-pull-0{ - right:auto -} -.col-xs-push-12{ - left:100% -} -.col-xs-push-11{ - left:91.66666667% -} -.col-xs-push-10{ - left:83.33333333% -} -.col-xs-push-9{ - left:75% -} -.col-xs-push-8{ - left:66.66666667% -} -.col-xs-push-7{ - left:58.33333333% -} -.col-xs-push-6{ - left:50% -} -.col-xs-push-5{ - left:41.66666667% -} -.col-xs-push-4{ - left:33.33333333% -} -.col-xs-push-3{ - left:25% -} -.col-xs-push-2{ - left:16.66666667% -} -.col-xs-push-1{ - left:8.33333333% -} -.col-xs-push-0{ - left:auto -} -.col-xs-offset-12{ - margin-left:100% -} -.col-xs-offset-11{ - margin-left:91.66666667% -} -.col-xs-offset-10{ - margin-left:83.33333333% -} -.col-xs-offset-9{ - margin-left:75% -} -.col-xs-offset-8{ - margin-left:66.66666667% -} -.col-xs-offset-7{ - margin-left:58.33333333% -} -.col-xs-offset-6{ - margin-left:50% -} -.col-xs-offset-5{ - margin-left:41.66666667% -} -.col-xs-offset-4{ - margin-left:33.33333333% -} -.col-xs-offset-3{ - margin-left:25% -} -.col-xs-offset-2{ - margin-left:16.66666667% -} -.col-xs-offset-1{ - margin-left:8.33333333% -} -.col-xs-offset-0{ - margin-left:0 -} -@media (min-width:768px){ - .col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{ - float:left - } - .col-sm-12{ - width:100% - } - .col-sm-11{ - width:91.66666667% - } - .col-sm-10{ - width:83.33333333% - } - .col-sm-9{ - width:75% - } - .col-sm-8{ - width:66.66666667% - } - .col-sm-7{ - width:58.33333333% - } - .col-sm-6{ - width:50% - } - .col-sm-5{ - width:41.66666667% - } - .col-sm-4{ - width:33.33333333% - } - .col-sm-3{ - width:25% - } - .col-sm-2{ - width:16.66666667% - } - .col-sm-1{ - width:8.33333333% - } - .col-sm-pull-12{ - right:100% - } - .col-sm-pull-11{ - right:91.66666667% - } - .col-sm-pull-10{ - right:83.33333333% - } - .col-sm-pull-9{ - right:75% - } - .col-sm-pull-8{ - right:66.66666667% - } - .col-sm-pull-7{ - right:58.33333333% - } - .col-sm-pull-6{ - right:50% - } - .col-sm-pull-5{ - right:41.66666667% - } - .col-sm-pull-4{ - right:33.33333333% - } - .col-sm-pull-3{ - right:25% - } - .col-sm-pull-2{ - right:16.66666667% - } - .col-sm-pull-1{ - right:8.33333333% - } - .col-sm-pull-0{ - right:auto - } - .col-sm-push-12{ - left:100% - } - .col-sm-push-11{ - left:91.66666667% - } - .col-sm-push-10{ - left:83.33333333% - } - .col-sm-push-9{ - left:75% - } - .col-sm-push-8{ - left:66.66666667% - } - .col-sm-push-7{ - left:58.33333333% - } - .col-sm-push-6{ - left:50% - } - .col-sm-push-5{ - left:41.66666667% - } - .col-sm-push-4{ - left:33.33333333% - } - .col-sm-push-3{ - left:25% - } - .col-sm-push-2{ - left:16.66666667% - } - .col-sm-push-1{ - left:8.33333333% - } - .col-sm-push-0{ - left:auto - } - .col-sm-offset-12{ - margin-left:100% - } - .col-sm-offset-11{ - margin-left:91.66666667% - } - .col-sm-offset-10{ - margin-left:83.33333333% - } - .col-sm-offset-9{ - margin-left:75% - } - .col-sm-offset-8{ - margin-left:66.66666667% - } - .col-sm-offset-7{ - margin-left:58.33333333% - } - .col-sm-offset-6{ - margin-left:50% - } - .col-sm-offset-5{ - margin-left:41.66666667% - } - .col-sm-offset-4{ - margin-left:33.33333333% - } - .col-sm-offset-3{ - margin-left:25% - } - .col-sm-offset-2{ - margin-left:16.66666667% - } - .col-sm-offset-1{ - margin-left:8.33333333% - } - .col-sm-offset-0{ - margin-left:0 - } -} -@media (min-width:992px){ - .col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{ - float:left - } - .col-md-12{ - width:100% - } - .col-md-11{ - width:91.66666667% - } - .col-md-10{ - width:83.33333333% - } - .col-md-9{ - width:75% - } - .col-md-8{ - width:66.66666667% - } - .col-md-7{ - width:58.33333333% - } - .col-md-6{ - width:50% - } - .col-md-5{ - width:41.66666667% - } - .col-md-4{ - width:33.33333333% - } - .col-md-3{ - width:25% - } - .col-md-2{ - width:16.66666667% - } - .col-md-1{ - width:8.33333333% - } - .col-md-pull-12{ - right:100% - } - .col-md-pull-11{ - right:91.66666667% - } - .col-md-pull-10{ - right:83.33333333% - } - .col-md-pull-9{ - right:75% - } - .col-md-pull-8{ - right:66.66666667% - } - .col-md-pull-7{ - right:58.33333333% - } - .col-md-pull-6{ - right:50% - } - .col-md-pull-5{ - right:41.66666667% - } - .col-md-pull-4{ - right:33.33333333% - } - .col-md-pull-3{ - right:25% - } - .col-md-pull-2{ - right:16.66666667% - } - .col-md-pull-1{ - right:8.33333333% - } - .col-md-pull-0{ - right:auto - } - .col-md-push-12{ - left:100% - } - .col-md-push-11{ - left:91.66666667% - } - .col-md-push-10{ - left:83.33333333% - } - .col-md-push-9{ - left:75% - } - .col-md-push-8{ - left:66.66666667% - } - .col-md-push-7{ - left:58.33333333% - } - .col-md-push-6{ - left:50% - } - .col-md-push-5{ - left:41.66666667% - } - .col-md-push-4{ - left:33.33333333% - } - .col-md-push-3{ - left:25% - } - .col-md-push-2{ - left:16.66666667% - } - .col-md-push-1{ - left:8.33333333% - } - .col-md-push-0{ - left:auto - } - .col-md-offset-12{ - margin-left:100% - } - .col-md-offset-11{ - margin-left:91.66666667% - } - .col-md-offset-10{ - margin-left:83.33333333% - } - .col-md-offset-9{ - margin-left:75% - } - .col-md-offset-8{ - margin-left:66.66666667% - } - .col-md-offset-7{ - margin-left:58.33333333% - } - .col-md-offset-6{ - margin-left:50% - } - .col-md-offset-5{ - margin-left:41.66666667% - } - .col-md-offset-4{ - margin-left:33.33333333% - } - .col-md-offset-3{ - margin-left:25% - } - .col-md-offset-2{ - margin-left:16.66666667% - } - .col-md-offset-1{ - margin-left:8.33333333% - } - .col-md-offset-0{ - margin-left:0 - } -} -@media (min-width:1200px){ - .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{ - float:left - } - .col-lg-12{ - width:100% - } - .col-lg-11{ - width:91.66666667% - } - .col-lg-10{ - width:83.33333333% - } - .col-lg-9{ - width:75% - } - .col-lg-8{ - width:66.66666667% - } - .col-lg-7{ - width:58.33333333% - } - .col-lg-6{ - width:50% - } - .col-lg-5{ - width:41.66666667% - } - .col-lg-4{ - width:33.33333333% - } - .col-lg-3{ - width:25% - } - .col-lg-2{ - width:16.66666667% - } - .col-lg-1{ - width:8.33333333% - } - .col-lg-pull-12{ - right:100% - } - .col-lg-pull-11{ - right:91.66666667% - } - .col-lg-pull-10{ - right:83.33333333% - } - .col-lg-pull-9{ - right:75% - } - .col-lg-pull-8{ - right:66.66666667% - } - .col-lg-pull-7{ - right:58.33333333% - } - .col-lg-pull-6{ - right:50% - } - .col-lg-pull-5{ - right:41.66666667% - } - .col-lg-pull-4{ - right:33.33333333% - } - .col-lg-pull-3{ - right:25% - } - .col-lg-pull-2{ - right:16.66666667% - } - .col-lg-pull-1{ - right:8.33333333% - } - .col-lg-pull-0{ - right:auto - } - .col-lg-push-12{ - left:100% - } - .col-lg-push-11{ - left:91.66666667% - } - .col-lg-push-10{ - left:83.33333333% - } - .col-lg-push-9{ - left:75% - } - .col-lg-push-8{ - left:66.66666667% - } - .col-lg-push-7{ - left:58.33333333% - } - .col-lg-push-6{ - left:50% - } - .col-lg-push-5{ - left:41.66666667% - } - .col-lg-push-4{ - left:33.33333333% - } - .col-lg-push-3{ - left:25% - } - .col-lg-push-2{ - left:16.66666667% - } - .col-lg-push-1{ - left:8.33333333% - } - .col-lg-push-0{ - left:auto - } - .col-lg-offset-12{ - margin-left:100% - } - .col-lg-offset-11{ - margin-left:91.66666667% - } - .col-lg-offset-10{ - margin-left:83.33333333% - } - .col-lg-offset-9{ - margin-left:75% - } - .col-lg-offset-8{ - margin-left:66.66666667% - } - .col-lg-offset-7{ - margin-left:58.33333333% - } - .col-lg-offset-6{ - margin-left:50% - } - .col-lg-offset-5{ - margin-left:41.66666667% - } - .col-lg-offset-4{ - margin-left:33.33333333% - } - .col-lg-offset-3{ - margin-left:25% - } - .col-lg-offset-2{ - margin-left:16.66666667% - } - .col-lg-offset-1{ - margin-left:8.33333333% - } - .col-lg-offset-0{ - margin-left:0 - } -} -table{ - background-color:transparent -} -caption{ - padding-top:8px; - padding-bottom:8px; - color:#777; - text-align:left -} -th{ - text-align:left -} -.table{ - width:100%; - max-width:100%; - margin-bottom:20px -} -.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{ - padding:8px; - line-height:1.42857143; - vertical-align:top; - border-top:1px solid #ddd -} -.table>thead>tr>th{ - vertical-align:bottom; - border-bottom:2px solid #ddd -} -.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{ - border-top:0 -} -.table>tbody+tbody{ - border-top:2px solid #ddd -} -.table .table{ - background-color:#fff -} -.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{ - padding:5px -} -.table-bordered{ - border:1px solid #ddd -} -.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border:1px solid #ddd -} -.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{ - border-bottom-width:2px -} -.table-striped>tbody>tr:nth-of-type(odd){ - background-color:#f9f9f9 -} -.table-hover>tbody>tr:hover{ - background-color:#f5f5f5 -} -table col[class*=col-]{ - position:static; - display:table-column; - float:none -} -table td[class*=col-],table th[class*=col-]{ - position:static; - display:table-cell; - float:none -} -.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{ - background-color:#f5f5f5 -} -.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{ - background-color:#e8e8e8 -} -.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{ - background-color:#dff0d8 -} -.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{ - background-color:#d0e9c6 -} -.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{ - background-color:#d9edf7 -} -.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{ - background-color:#c4e3f3 -} -.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{ - background-color:#fcf8e3 -} -.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{ - background-color:#faf2cc -} -.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{ - background-color:#f2dede -} -.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{ - background-color:#ebcccc -} -.table-responsive{ - min-height:.01%; - overflow-x:auto -} -@media screen and (max-width:767px){ - .table-responsive{ - width:100%; - margin-bottom:15px; - overflow-y:hidden; - -ms-overflow-style:-ms-autohiding-scrollbar; - border:1px solid #ddd - } - .table-responsive>.table{ - margin-bottom:0 - } - .table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{ - white-space:nowrap - } - .table-responsive>.table-bordered{ - border:0 - } - .table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 - } - .table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 - } - .table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 - } -} -fieldset{ - min-width:0; - padding:0; - margin:0; - border:0 -} -legend{ - display:block; - width:100%; - padding:0; - margin-bottom:20px; - font-size:21px; - line-height:inherit; - color:#333; - border:0; - border-bottom:1px solid #e5e5e5 -} -label{ - display:inline-block; - max-width:100%; - margin-bottom:5px; - font-weight:700 -} -input[type=search]{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box -} -input[type=checkbox],input[type=radio]{ - margin:4px 0 0; - margin-top:1px\9; - line-height:normal -} -input[type=file]{ - display:block -} -input[type=range]{ - display:block; - width:100% -} -select[multiple],select[size]{ - height:auto -} -input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -output{ - display:block; - padding-top:7px; - font-size:14px; - line-height:1.42857143; - color:#555 -} -.form-control{ - display:block; - width:100%; - height:34px; - padding:6px 12px; - font-size:14px; - line-height:1.42857143; - color:#555; - background-color:#fff; - background-image:none; - border:1px solid #ccc; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - -webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; - -o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s; - transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s -} -.form-control:focus{ - border-color:#66afe9; - outline:0; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6) -} -.form-control::-moz-placeholder{ - color:#999; - opacity:1 -} -.form-control:-ms-input-placeholder{ - color:#999 -} -.form-control::-webkit-input-placeholder{ - color:#999 -} -.form-control::-ms-expand{ - background-color:transparent; - border:0 -} -.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{ - background-color:#eee; - opacity:1 -} -.form-control[disabled],fieldset[disabled] .form-control{ - cursor:not-allowed -} -textarea.form-control{ - height:auto -} -input[type=search]{ - -webkit-appearance:none -} -@media screen and (-webkit-min-device-pixel-ratio:0){ - input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{ - line-height:34px - } - .input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{ - line-height:30px - } - .input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{ - line-height:46px - } -} -.form-group{ - margin-bottom:15px -} -.checkbox,.radio{ - position:relative; - display:block; - margin-top:10px; - margin-bottom:10px -} -.checkbox label,.radio label{ - min-height:20px; - padding-left:20px; - margin-bottom:0; - font-weight:400; - cursor:pointer -} -.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{ - position:absolute; - margin-top:4px\9; - margin-left:-20px -} -.checkbox+.checkbox,.radio+.radio{ - margin-top:-5px -} -.checkbox-inline,.radio-inline{ - position:relative; - display:inline-block; - padding-left:20px; - margin-bottom:0; - font-weight:400; - vertical-align:middle; - cursor:pointer -} -.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{ - margin-top:0; - margin-left:10px -} -fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{ - cursor:not-allowed -} -.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{ - cursor:not-allowed -} -.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{ - cursor:not-allowed -} -.form-control-static{ - min-height:34px; - padding-top:7px; - padding-bottom:7px; - margin-bottom:0 -} -.form-control-static.input-lg,.form-control-static.input-sm{ - padding-right:0; - padding-left:0 -} -.input-sm{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-sm{ - height:30px; - line-height:30px -} -select[multiple].input-sm,textarea.input-sm{ - height:auto -} -.form-group-sm .form-control{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.form-group-sm select.form-control{ - height:30px; - line-height:30px -} -.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{ - height:auto -} -.form-group-sm .form-control-static{ - height:30px; - min-height:32px; - padding:6px 10px; - font-size:12px; - line-height:1.5 -} -.input-lg{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-lg{ - height:46px; - line-height:46px -} -select[multiple].input-lg,textarea.input-lg{ - height:auto -} -.form-group-lg .form-control{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.form-group-lg select.form-control{ - height:46px; - line-height:46px -} -.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{ - height:auto -} -.form-group-lg .form-control-static{ - height:46px; - min-height:38px; - padding:11px 16px; - font-size:18px; - line-height:1.3333333 -} -.has-feedback{ - position:relative -} -.has-feedback .form-control{ - padding-right:42.5px -} -.form-control-feedback{ - position:absolute; - top:0; - right:0; - z-index:2; - display:block; - width:34px; - height:34px; - line-height:34px; - text-align:center; - pointer-events:none -} -.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{ - width:46px; - height:46px; - line-height:46px -} -.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{ - width:30px; - height:30px; - line-height:30px -} -.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{ - color:#3c763d -} -.has-success .form-control{ - border-color:#3c763d; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-success .form-control:focus{ - border-color:#2b542c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168 -} -.has-success .input-group-addon{ - color:#3c763d; - background-color:#dff0d8; - border-color:#3c763d -} -.has-success .form-control-feedback{ - color:#3c763d -} -.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{ - color:#8a6d3b -} -.has-warning .form-control{ - border-color:#8a6d3b; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-warning .form-control:focus{ - border-color:#66512c; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b -} -.has-warning .input-group-addon{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#8a6d3b -} -.has-warning .form-control-feedback{ - color:#8a6d3b -} -.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{ - color:#a94442 -} -.has-error .form-control{ - border-color:#a94442; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075); - box-shadow:inset 0 1px 1px rgba(0,0,0,.075) -} -.has-error .form-control:focus{ - border-color:#843534; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483; - box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483 -} -.has-error .input-group-addon{ - color:#a94442; - background-color:#f2dede; - border-color:#a94442 -} -.has-error .form-control-feedback{ - color:#a94442 -} -.has-feedback label~.form-control-feedback{ - top:25px -} -.has-feedback label.sr-only~.form-control-feedback{ - top:0 -} -.help-block{ - display:block; - margin-top:5px; - margin-bottom:10px; - color:#737373 -} -@media (min-width:768px){ - .form-inline .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .form-inline .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .form-inline .form-control-static{ - display:inline-block - } - .form-inline .input-group{ - display:inline-table; - vertical-align:middle - } - .form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{ - width:auto - } - .form-inline .input-group>.form-control{ - width:100% - } - .form-inline .control-label{ - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox,.form-inline .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .form-inline .checkbox label,.form-inline .radio label{ - padding-left:0 - } - .form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .form-inline .has-feedback .form-control-feedback{ - top:0 - } -} -.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{ - padding-top:7px; - margin-top:0; - margin-bottom:0 -} -.form-horizontal .checkbox,.form-horizontal .radio{ - min-height:27px -} -.form-horizontal .form-group{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .form-horizontal .control-label{ - padding-top:7px; - margin-bottom:0; - text-align:right - } -} -.form-horizontal .has-feedback .form-control-feedback{ - right:15px -} -@media (min-width:768px){ - .form-horizontal .form-group-lg .control-label{ - padding-top:11px; - font-size:18px - } -} -@media (min-width:768px){ - .form-horizontal .form-group-sm .control-label{ - padding-top:6px; - font-size:12px - } -} -.btn{ - display:inline-block; - padding:6px 12px; - margin-bottom:0; - font-size:14px; - font-weight:400; - line-height:1.42857143; - text-align:center; - white-space:nowrap; - vertical-align:middle; - -ms-touch-action:manipulation; - touch-action:manipulation; - cursor:pointer; - -webkit-user-select:none; - -moz-user-select:none; - -ms-user-select:none; - user-select:none; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{ - outline:5px auto -webkit-focus-ring-color; - outline-offset:-2px -} -.btn.focus,.btn:focus,.btn:hover{ - color:#333; - text-decoration:none -} -.btn.active,.btn:active{ - background-image:none; - outline:0; - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn.disabled,.btn[disabled],fieldset[disabled] .btn{ - cursor:not-allowed; - filter:alpha(opacity=65); - -webkit-box-shadow:none; - box-shadow:none; - opacity:.65 -} -a.btn.disabled,fieldset[disabled] a.btn{ - pointer-events:none -} -.btn-default{ - color:#333; - background-color:#fff; - border-color:#ccc -} -.btn-default.focus,.btn-default:focus{ - color:#333; - background-color:#e6e6e6; - border-color:#8c8c8c -} -.btn-default:hover{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - color:#333; - background-color:#e6e6e6; - border-color:#adadad -} -.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{ - color:#333; - background-color:#d4d4d4; - border-color:#8c8c8c -} -.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{ - background-image:none -} -.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{ - background-color:#fff; - border-color:#ccc -} -.btn-default .badge{ - color:#fff; - background-color:#333 -} -.btn-primary{ - color:#fff; - background-color:#d11010; - border-color:#c40f0f -} -.btn-primary.focus,.btn-primary:focus{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary:hover{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{ - color:#fff; - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{ - background-image:none -} -.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{ - background-color:#b20c0c; - border-color:#c40f0f -} -.btn-primary .badge{ - color:#337ab7; - background-color:#fff -} -.btn-success{ - color:#fff; - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success.focus,.btn-success:focus{ - color:#fff; - background-color:#449d44; - border-color:#255625 -} -.btn-success:hover{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - color:#fff; - background-color:#449d44; - border-color:#398439 -} -.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{ - color:#fff; - background-color:#398439; - border-color:#255625 -} -.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{ - background-image:none -} -.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{ - background-color:#5cb85c; - border-color:#4cae4c -} -.btn-success .badge{ - color:#5cb85c; - background-color:#fff -} -.btn-info{ - color:#fff; - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info.focus,.btn-info:focus{ - color:#fff; - background-color:#31b0d5; - border-color:#1b6d85 -} -.btn-info:hover{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - color:#fff; - background-color:#31b0d5; - border-color:#269abc -} -.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{ - color:#fff; - background-color:#269abc; - border-color:#1b6d85 -} -.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{ - background-image:none -} -.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{ - background-color:#5bc0de; - border-color:#46b8da -} -.btn-info .badge{ - color:#5bc0de; - background-color:#fff -} -.btn-warning{ - color:#fff; - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning.focus,.btn-warning:focus{ - color:#fff; - background-color:#ec971f; - border-color:#985f0d -} -.btn-warning:hover{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - color:#fff; - background-color:#ec971f; - border-color:#d58512 -} -.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{ - color:#fff; - background-color:#d58512; - border-color:#985f0d -} -.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{ - background-image:none -} -.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{ - background-color:#f0ad4e; - border-color:#eea236 -} -.btn-warning .badge{ - color:#f0ad4e; - background-color:#fff -} -.btn-danger{ - color:#fff; - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger.focus,.btn-danger:focus{ - color:#fff; - background-color:#c9302c; - border-color:#761c19 -} -.btn-danger:hover{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - color:#fff; - background-color:#c9302c; - border-color:#ac2925 -} -.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{ - color:#fff; - background-color:#ac2925; - border-color:#761c19 -} -.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{ - background-image:none -} -.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{ - background-color:#d9534f; - border-color:#d43f3a -} -.btn-danger .badge{ - color:#d9534f; - background-color:#fff -} -.btn-link{ - font-weight:400; - color:#337ab7; - border-radius:0 -} -.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{ - background-color:transparent; - -webkit-box-shadow:none; - box-shadow:none -} -.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{ - border-color:transparent -} -.btn-link:focus,.btn-link:hover{ - color:#23527c; - text-decoration:underline; - background-color:transparent -} -.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{ - color:#777; - text-decoration:none -} -.btn-group-lg>.btn,.btn-lg{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -.btn-group-sm>.btn,.btn-sm{ - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-group-xs>.btn,.btn-xs{ - padding:1px 5px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -.btn-block{ - display:block; - width:100% -} -.btn-block+.btn-block{ - margin-top:5px -} -input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{ - width:100% -} -.fade{ - opacity:0; - -webkit-transition:opacity .15s linear; - -o-transition:opacity .15s linear; - transition:opacity .15s linear -} -.fade.in{ - opacity:1 -} -.collapse{ - display:none -} -.collapse.in{ - display:block -} -tr.collapse.in{ - display:table-row -} -tbody.collapse.in{ - display:table-row-group -} -.collapsing{ - position:relative; - height:0; - overflow:hidden; - -webkit-transition-timing-function:ease; - -o-transition-timing-function:ease; - transition-timing-function:ease; - -webkit-transition-duration:.35s; - -o-transition-duration:.35s; - transition-duration:.35s; - -webkit-transition-property:height,visibility; - -o-transition-property:height,visibility; - transition-property:height,visibility -} -.caret{ - display:inline-block; - width:0; - height:0; - margin-left:2px; - vertical-align:middle; - border-top:4px dashed; - border-top:4px solid\9; - border-right:4px solid transparent; - border-left:4px solid transparent -} -.dropdown,.dropup{ - position:relative -} -.dropdown-toggle:focus{ - outline:0 -} -.dropdown-menu{ - position:absolute; - top:100%; - left:0; - z-index:1000; - display:none; - float:left; - min-width:160px; - padding:5px 0; - margin:2px 0 0; - font-size:14px; - text-align:left; - list-style:none; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.15); - border-radius:4px; - -webkit-box-shadow:0 6px 12px rgba(0,0,0,.175); - box-shadow:0 6px 12px rgba(0,0,0,.175) -} -.dropdown-menu.pull-right{ - right:0; - left:auto -} -.dropdown-menu .divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.dropdown-menu>li>a{ - display:block; - padding:3px 20px; - clear:both; - font-weight:400; - line-height:1.42857143; - color:#333; - white-space:nowrap -} -.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{ - color:#262626; - text-decoration:none; - background-color:#f5f5f5 -} -.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{ - color:#fff; - text-decoration:none; - background-color:#337ab7; - outline:0 -} -.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - color:#777 -} -.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{ - text-decoration:none; - cursor:not-allowed; - background-color:transparent; - background-image:none; - filter:progid:DXImageTransform.Microsoft.gradient(enabled=false) -} -.open>.dropdown-menu{ - display:block -} -.open>a{ - outline:0 -} -.dropdown-menu-right{ - right:0; - left:auto -} -.dropdown-menu-left{ - right:auto; - left:0 -} -.dropdown-header{ - display:block; - padding:3px 20px; - font-size:12px; - line-height:1.42857143; - color:#777; - white-space:nowrap -} -.dropdown-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:990 -} -.pull-right>.dropdown-menu{ - right:0; - left:auto -} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{ - content:""; - border-top:0; - border-bottom:4px dashed; - border-bottom:4px solid\9 -} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{ - top:auto; - bottom:100%; - margin-bottom:2px -} -@media (min-width:768px){ - .navbar-right .dropdown-menu{ - right:0; - left:auto - } - .navbar-right .dropdown-menu-left{ - right:auto; - left:0 - } -} -.btn-group,.btn-group-vertical{ - position:relative; - display:inline-block; - vertical-align:middle -} -.btn-group-vertical>.btn,.btn-group>.btn{ - position:relative; - float:left -} -.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{ - z-index:2 -} -.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{ - margin-left:-1px -} -.btn-toolbar{ - margin-left:-5px -} -.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{ - float:left -} -.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{ - margin-left:5px -} -.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){ - border-radius:0 -} -.btn-group>.btn:first-child{ - margin-left:0 -} -.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group>.btn-group{ - float:left -} -.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{ - outline:0 -} -.btn-group>.btn+.dropdown-toggle{ - padding-right:8px; - padding-left:8px -} -.btn-group>.btn-lg+.dropdown-toggle{ - padding-right:12px; - padding-left:12px -} -.btn-group.open .dropdown-toggle{ - -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125); - box-shadow:inset 0 3px 5px rgba(0,0,0,.125) -} -.btn-group.open .dropdown-toggle.btn-link{ - -webkit-box-shadow:none; - box-shadow:none -} -.btn .caret{ - margin-left:0 -} -.btn-lg .caret{ - border-width:5px 5px 0; - border-bottom-width:0 -} -.dropup .btn-lg .caret{ - border-width:0 5px 5px -} -.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{ - display:block; - float:none; - width:100%; - max-width:100% -} -.btn-group-vertical>.btn-group>.btn{ - float:none -} -.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{ - margin-top:-1px; - margin-left:0 -} -.btn-group-vertical>.btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.btn-group-vertical>.btn:first-child:not(:last-child){ - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn:last-child:not(:first-child){ - border-top-left-radius:0; - border-top-right-radius:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{ - border-radius:0 -} -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{ - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.btn-group-justified{ - display:table; - width:100%; - table-layout:fixed; - border-collapse:separate -} -.btn-group-justified>.btn,.btn-group-justified>.btn-group{ - display:table-cell; - float:none; - width:1% -} -.btn-group-justified>.btn-group .btn{ - width:100% -} -.btn-group-justified>.btn-group .dropdown-menu{ - left:auto -} -[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{ - position:absolute; - clip:rect(0,0,0,0); - pointer-events:none -} -.input-group{ - position:relative; - display:table; - border-collapse:separate -} -.input-group[class*=col-]{ - float:none; - padding-right:0; - padding-left:0 -} -.input-group .form-control{ - position:relative; - z-index:2; - float:left; - width:100%; - margin-bottom:0 -} -.input-group .form-control:focus{ - z-index:3 -} -.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{ - height:46px; - padding:10px 16px; - font-size:18px; - line-height:1.3333333; - border-radius:6px -} -select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{ - height:46px; - line-height:46px -} -select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{ - height:auto -} -.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{ - height:30px; - padding:5px 10px; - font-size:12px; - line-height:1.5; - border-radius:3px -} -select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{ - height:30px; - line-height:30px -} -select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{ - height:auto -} -.input-group .form-control,.input-group-addon,.input-group-btn{ - display:table-cell -} -.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){ - border-radius:0 -} -.input-group-addon,.input-group-btn{ - width:1%; - white-space:nowrap; - vertical-align:middle -} -.input-group-addon{ - padding:6px 12px; - font-size:14px; - font-weight:400; - line-height:1; - color:#555; - text-align:center; - background-color:#eee; - border:1px solid #ccc; - border-radius:4px -} -.input-group-addon.input-sm{ - padding:5px 10px; - font-size:12px; - border-radius:3px -} -.input-group-addon.input-lg{ - padding:10px 16px; - font-size:18px; - border-radius:6px -} -.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{ - margin-top:0 -} -.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){ - border-top-right-radius:0; - border-bottom-right-radius:0 -} -.input-group-addon:first-child{ - border-right:0 -} -.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{ - border-top-left-radius:0; - border-bottom-left-radius:0 -} -.input-group-addon:last-child{ - border-left:0 -} -.input-group-btn{ - position:relative; - font-size:0; - white-space:nowrap -} -.input-group-btn>.btn{ - position:relative -} -.input-group-btn>.btn+.btn{ - margin-left:-1px -} -.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{ - z-index:2 -} -.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{ - margin-right:-1px -} -.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{ - z-index:2; - margin-left:-1px -} -.nav{ - padding-left:0; - margin-bottom:0; - list-style:none -} -.nav>li{ - position:relative; - display:block -} -.nav>li>a{ - position:relative; - display:block; - padding:10px 15px -} -.nav>li>a:focus,.nav>li>a:hover{ - text-decoration:none; - background-color:#eee -} -.nav>li.disabled>a{ - color:#777 -} -.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{ - color:#777; - text-decoration:none; - cursor:not-allowed; - background-color:transparent -} -.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{ - background-color:#eee; - border-color:#337ab7 -} -.nav .nav-divider{ - height:1px; - margin:9px 0; - overflow:hidden; - background-color:#e5e5e5 -} -.nav>li>a>img{ - max-width:none -} -.nav-tabs{ - border-bottom:1px solid #ddd -} -.nav-tabs>li{ - float:left; - margin-bottom:-1px -} -.nav-tabs>li>a{ - margin-right:2px; - line-height:1.42857143; - border:1px solid transparent; - border-radius:4px 4px 0 0 -} -.nav-tabs>li>a:hover{ - border-color:#eee #eee #ddd -} -.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{ - color:#555; - cursor:default; - background-color:#fff; - border:1px solid #ddd; - border-bottom-color:transparent -} -.nav-tabs.nav-justified{ - width:100%; - border-bottom:0 -} -.nav-tabs.nav-justified>li{ - float:none -} -.nav-tabs.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-tabs.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li{ - display:table-cell; - width:1% - } - .nav-tabs.nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs.nav-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs.nav-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.nav-pills>li{ - float:left -} -.nav-pills>li>a{ - border-radius:4px -} -.nav-pills>li+li{ - margin-left:2px -} -.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{ - color:#fff; - background-color:#337ab7 -} -.nav-stacked>li{ - float:none -} -.nav-stacked>li+li{ - margin-top:2px; - margin-left:0 -} -.nav-justified{ - width:100% -} -.nav-justified>li{ - float:none -} -.nav-justified>li>a{ - margin-bottom:5px; - text-align:center -} -.nav-justified>.dropdown .dropdown-menu{ - top:auto; - left:auto -} -@media (min-width:768px){ - .nav-justified>li{ - display:table-cell; - width:1% - } - .nav-justified>li>a{ - margin-bottom:0 - } -} -.nav-tabs-justified{ - border-bottom:0 -} -.nav-tabs-justified>li>a{ - margin-right:0; - border-radius:4px -} -.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border:1px solid #ddd -} -@media (min-width:768px){ - .nav-tabs-justified>li>a{ - border-bottom:1px solid #ddd; - border-radius:4px 4px 0 0 - } - .nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{ - border-bottom-color:#fff - } -} -.tab-content>.tab-pane{ - display:none -} -.tab-content>.active{ - display:block -} -.nav-tabs .dropdown-menu{ - margin-top:-1px; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar{ - position:relative; - min-height:50px; - margin-bottom:20px; - border:1px solid transparent -} -@media (min-width:768px){ - .navbar{ - border-radius:4px - } -} -@media (min-width:768px){ - .navbar-header{ - float:left - } -} -.navbar-collapse{ - padding-right:15px; - padding-left:15px; - overflow-x:visible; - -webkit-overflow-scrolling:touch; - border-top:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1) -} -.navbar-collapse.in{ - overflow-y:auto -} -@media (min-width:768px){ - .navbar-collapse{ - width:auto; - border-top:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-collapse.collapse{ - display:block!important; - height:auto!important; - padding-bottom:0; - overflow:visible!important - } - .navbar-collapse.in{ - overflow-y:visible - } - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{ - padding-right:0; - padding-left:0 - } -} -.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:340px -} -@media (max-device-width:480px) and (orientation:landscape){ - .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{ - max-height:200px - } -} -.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:-15px; - margin-left:-15px -} -@media (min-width:768px){ - .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{ - margin-right:0; - margin-left:0 - } -} -.navbar-static-top{ - z-index:1000; - border-width:0 0 1px -} -@media (min-width:768px){ - .navbar-static-top{ - border-radius:0 - } -} -.navbar-fixed-bottom,.navbar-fixed-top{ - position:fixed; - right:0; - left:0; - z-index:1030 -} -@media (min-width:768px){ - .navbar-fixed-bottom,.navbar-fixed-top{ - border-radius:0 - } -} -.navbar-fixed-top{ - top:0; - border-width:0 0 1px -} -.navbar-fixed-bottom{ - bottom:0; - margin-bottom:0; - border-width:1px 0 0 -} -.navbar-brand{ - float:left; - height:50px; - padding:15px 15px; - font-size:18px; - line-height:20px -} -.navbar-brand:focus,.navbar-brand:hover{ - text-decoration:none -} -.navbar-brand>img{ - display:block -} -@media (min-width:768px){ - .navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{ - margin-left:-15px - } -} -.navbar-toggle{ - position:relative; - float:right; - padding:9px 10px; - margin-top:8px; - margin-right:15px; - margin-bottom:8px; - background-color:transparent; - background-image:none; - border:1px solid transparent; - border-radius:4px -} -.navbar-toggle:focus{ - outline:0 -} -.navbar-toggle .icon-bar{ - display:block; - width:22px; - height:2px; - border-radius:1px -} -.navbar-toggle .icon-bar+.icon-bar{ - margin-top:4px -} -@media (min-width:768px){ - .navbar-toggle{ - display:none - } -} -.navbar-nav{ - margin:7.5px -15px -} -.navbar-nav>li>a{ - padding-top:10px; - padding-bottom:10px; - line-height:20px -} -@media (max-width:767px){ - .navbar-nav .open .dropdown-menu{ - position:static; - float:none; - width:auto; - margin-top:0; - background-color:transparent; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } - .navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{ - padding:5px 15px 5px 25px - } - .navbar-nav .open .dropdown-menu>li>a{ - line-height:20px - } - .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{ - background-image:none - } -} -@media (min-width:768px){ - .navbar-nav{ - float:left; - margin:0 - } - .navbar-nav>li{ - float:left - } - .navbar-nav>li>a{ - padding-top:15px; - padding-bottom:15px - } -} -.navbar-form{ - padding:10px 15px; - margin-top:8px; - margin-right:-15px; - margin-bottom:8px; - margin-left:-15px; - border-top:1px solid transparent; - border-bottom:1px solid transparent; - -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1); - box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1) -} -@media (min-width:768px){ - .navbar-form .form-group{ - display:inline-block; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .form-control{ - display:inline-block; - width:auto; - vertical-align:middle - } - .navbar-form .form-control-static{ - display:inline-block - } - .navbar-form .input-group{ - display:inline-table; - vertical-align:middle - } - .navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{ - width:auto - } - .navbar-form .input-group>.form-control{ - width:100% - } - .navbar-form .control-label{ - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox,.navbar-form .radio{ - display:inline-block; - margin-top:0; - margin-bottom:0; - vertical-align:middle - } - .navbar-form .checkbox label,.navbar-form .radio label{ - padding-left:0 - } - .navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{ - position:relative; - margin-left:0 - } - .navbar-form .has-feedback .form-control-feedback{ - top:0 - } -} -@media (max-width:767px){ - .navbar-form .form-group{ - margin-bottom:5px - } - .navbar-form .form-group:last-child{ - margin-bottom:0 - } -} -@media (min-width:768px){ - .navbar-form{ - width:auto; - padding-top:0; - padding-bottom:0; - margin-right:0; - margin-left:0; - border:0; - -webkit-box-shadow:none; - box-shadow:none - } -} -.navbar-nav>li>.dropdown-menu{ - margin-top:0; - border-top-left-radius:0; - border-top-right-radius:0 -} -.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{ - margin-bottom:0; - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom-right-radius:0; - border-bottom-left-radius:0 -} -.navbar-btn{ - margin-top:8px; - margin-bottom:8px -} -.navbar-btn.btn-sm{ - margin-top:10px; - margin-bottom:10px -} -.navbar-btn.btn-xs{ - margin-top:14px; - margin-bottom:14px -} -.navbar-text{ - margin-top:15px; - margin-bottom:15px -} -@media (min-width:768px){ - .navbar-text{ - float:left; - margin-right:15px; - margin-left:15px - } -} -@media (min-width:768px){ - .navbar-left{ - float:left!important - } - .navbar-right{ - float:right!important; - margin-right:-15px - } - .navbar-right~.navbar-right{ - margin-right:0 - } -} -.navbar-default{ - background-color:#f8f8f8; - border-color:#e7e7e7 -} -.navbar-default .navbar-brand{ - color:#777 -} -.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{ - color:#5e5e5e; - background-color:transparent -} -.navbar-default .navbar-text{ - color:#777 -} -.navbar-default .navbar-nav>li>a{ - color:#777 -} -.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{ - color:#333; - background-color:transparent -} -.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{ - color:#555; - background-color:#e7e7e7 -} -.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{ - color:#ccc; - background-color:transparent -} -.navbar-default .navbar-toggle{ - border-color:#ddd -} -.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{ - background-color:#ddd -} -.navbar-default .navbar-toggle .icon-bar{ - background-color:#888 -} -.navbar-default .navbar-collapse,.navbar-default .navbar-form{ - border-color:#e7e7e7 -} -.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{ - color:#555; - background-color:#e7e7e7 -} -@media (max-width:767px){ - .navbar-default .navbar-nav .open .dropdown-menu>li>a{ - color:#777 - } - .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#333; - background-color:transparent - } - .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#555; - background-color:#e7e7e7 - } - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#ccc; - background-color:transparent - } -} -.navbar-default .navbar-link{ - color:#777 -} -.navbar-default .navbar-link:hover{ - color:#333 -} -.navbar-default .btn-link{ - color:#777 -} -.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{ - color:#333 -} -.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{ - color:#ccc -} -.navbar-inverse{ - background-color:#222; - border-color:#080808 -} -.navbar-inverse .navbar-brand{ - color:#9d9d9d -} -.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-text{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a{ - color:#9d9d9d -} -.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{ - color:#fff; - background-color:transparent -} -.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{ - color:#fff; - background-color:#080808 -} -.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{ - color:#444; - background-color:transparent -} -.navbar-inverse .navbar-toggle{ - border-color:#333 -} -.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{ - background-color:#333 -} -.navbar-inverse .navbar-toggle .icon-bar{ - background-color:#fff -} -.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{ - border-color:#101010 -} -.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{ - color:#fff; - background-color:#080808 -} -@media (max-width:767px){ - .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{ - border-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider{ - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{ - color:#9d9d9d - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{ - color:#fff; - background-color:transparent - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{ - color:#fff; - background-color:#080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{ - color:#444; - background-color:transparent - } -} -.navbar-inverse .navbar-link{ - color:#9d9d9d -} -.navbar-inverse .navbar-link:hover{ - color:#fff -} -.navbar-inverse .btn-link{ - color:#9d9d9d -} -.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{ - color:#fff -} -.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{ - color:#444 -} -.breadcrumb{ - padding:8px 15px; - margin-bottom:20px; - list-style:none; - background-color:#f5f5f5; - border-radius:4px -} -.breadcrumb>li{ - display:inline-block -} -.breadcrumb>li+li:before{ - padding:0 5px; - color:#ccc; - content:"/\00a0" -} -.breadcrumb>.active{ - color:#777 -} -.pagination{ - display:inline-block; - padding-left:0; - margin:20px 0; - border-radius:4px -} -.pagination>li{ - display:inline -} -.pagination>li>a,.pagination>li>span{ - position:relative; - float:left; - padding:6px 12px; - margin-left:-1px; - line-height:1.42857143; - color:#337ab7; - text-decoration:none; - background-color:#fff; - border:1px solid #ddd -} -.pagination>li:first-child>a,.pagination>li:first-child>span{ - margin-left:0; - border-top-left-radius:4px; - border-bottom-left-radius:4px -} -.pagination>li:last-child>a,.pagination>li:last-child>span{ - border-top-right-radius:4px; - border-bottom-right-radius:4px -} -.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{ - z-index:2; - color:#23527c; - background-color:#eee; - border-color:#ddd -} -.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{ - z-index:3; - color:#fff; - cursor:default; - background-color:#337ab7; - border-color:#337ab7 -} -.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{ - color:#777; - cursor:not-allowed; - background-color:#fff; - border-color:#ddd -} -.pagination-lg>li>a,.pagination-lg>li>span{ - padding:10px 16px; - font-size:18px; - line-height:1.3333333 -} -.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{ - border-top-left-radius:6px; - border-bottom-left-radius:6px -} -.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{ - border-top-right-radius:6px; - border-bottom-right-radius:6px -} -.pagination-sm>li>a,.pagination-sm>li>span{ - padding:5px 10px; - font-size:12px; - line-height:1.5 -} -.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{ - border-top-left-radius:3px; - border-bottom-left-radius:3px -} -.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{ - border-top-right-radius:3px; - border-bottom-right-radius:3px -} -.pager{ - padding-left:0; - margin:20px 0; - text-align:center; - list-style:none -} -.pager li{ - display:inline -} -.pager li>a,.pager li>span{ - display:inline-block; - padding:5px 14px; - background-color:#fff; - border:1px solid #ddd; - border-radius:15px -} -.pager li>a:focus,.pager li>a:hover{ - text-decoration:none; - background-color:#eee -} -.pager .next>a,.pager .next>span{ - float:right -} -.pager .previous>a,.pager .previous>span{ - float:left -} -.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{ - color:#777; - cursor:not-allowed; - background-color:#fff -} -.label{ - display:inline; - padding:.2em .6em .3em; - font-size:75%; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:baseline; - border-radius:.25em -} -a.label:focus,a.label:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.label:empty{ - display:none -} -.btn .label{ - position:relative; - top:-1px -} -.label-default{ - background-color:#777 -} -.label-default[href]:focus,.label-default[href]:hover{ - background-color:#5e5e5e -} -.label-primary{ - background-color:#337ab7 -} -.label-primary[href]:focus,.label-primary[href]:hover{ - background-color:#286090 -} -.label-success{ - background-color:#5cb85c -} -.label-success[href]:focus,.label-success[href]:hover{ - background-color:#449d44 -} -.label-info{ - background-color:#5bc0de -} -.label-info[href]:focus,.label-info[href]:hover{ - background-color:#31b0d5 -} -.label-warning{ - background-color:#f0ad4e -} -.label-warning[href]:focus,.label-warning[href]:hover{ - background-color:#ec971f -} -.label-danger{ - background-color:#d9534f -} -.label-danger[href]:focus,.label-danger[href]:hover{ - background-color:#c9302c -} -.badge{ - display:inline-block; - min-width:10px; - padding:3px 7px; - font-size:12px; - font-weight:700; - line-height:1; - color:#fff; - text-align:center; - white-space:nowrap; - vertical-align:middle; - background-color:#777; - border-radius:10px -} -.badge:empty{ - display:none -} -.btn .badge{ - position:relative; - top:-1px -} -.btn-group-xs>.btn .badge,.btn-xs .badge{ - top:0; - padding:1px 5px -} -a.badge:focus,a.badge:hover{ - color:#fff; - text-decoration:none; - cursor:pointer -} -.list-group-item.active>.badge,.nav-pills>.active>a>.badge{ - color:#337ab7; - background-color:#fff -} -.list-group-item>.badge{ - float:right -} -.list-group-item>.badge+.badge{ - margin-right:5px -} -.nav-pills>li>a>.badge{ - margin-left:3px -} -.jumbotron{ - padding-top:30px; - padding-bottom:30px; - margin-bottom:30px; - color:inherit; - background-color:#eee -} -.jumbotron .h1,.jumbotron h1{ - color:inherit -} -.jumbotron p{ - margin-bottom:15px; - font-size:21px; - font-weight:200 -} -.jumbotron>hr{ - border-top-color:#d5d5d5 -} -.container .jumbotron,.container-fluid .jumbotron{ - padding-right:15px; - padding-left:15px; - border-radius:6px -} -.jumbotron .container{ - max-width:100% -} -@media screen and (min-width:768px){ - .jumbotron{ - padding-top:48px; - padding-bottom:48px - } - .container .jumbotron,.container-fluid .jumbotron{ - padding-right:60px; - padding-left:60px - } - .jumbotron .h1,.jumbotron h1{ - font-size:63px - } -} -.thumbnail{ - display:block; - padding:4px; - margin-bottom:20px; - line-height:1.42857143; - background-color:#fff; - border:1px solid #ddd; - border-radius:4px; - -webkit-transition:border .2s ease-in-out; - -o-transition:border .2s ease-in-out; - transition:border .2s ease-in-out -} -.thumbnail a>img,.thumbnail>img{ - margin-right:auto; - margin-left:auto -} -a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{ - border-color:#337ab7 -} -.thumbnail .caption{ - padding:9px; - color:#333 -} -.alert{ - padding:15px; - margin-bottom:20px; - border:1px solid transparent; - border-radius:4px -} -.alert h4{ - margin-top:0; - color:inherit -} -.alert .alert-link{ - font-weight:700 -} -.alert>p,.alert>ul{ - margin-bottom:0 -} -.alert>p+p{ - margin-top:5px -} -.alert-dismissable,.alert-dismissible{ - padding-right:35px -} -.alert-dismissable .close,.alert-dismissible .close{ - position:relative; - top:-2px; - right:-21px; - color:inherit -} -.alert-success{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.alert-success hr{ - border-top-color:#c9e2b3 -} -.alert-success .alert-link{ - color:#2b542c -} -.alert-info{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.alert-info hr{ - border-top-color:#a6e1ec -} -.alert-info .alert-link{ - color:#245269 -} -.alert-warning{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.alert-warning hr{ - border-top-color:#f7e1b5 -} -.alert-warning .alert-link{ - color:#66512c -} -.alert-danger{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.alert-danger hr{ - border-top-color:#e4b9c0 -} -.alert-danger .alert-link{ - color:#843534 -} -@-webkit-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@-o-keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -@keyframes progress-bar-stripes{ - from{ - background-position:40px 0 - } - to{ - background-position:0 0 - } -} -.progress{ - height:20px; - margin-bottom:20px; - overflow:hidden; - background-color:#f5f5f5; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1); - box-shadow:inset 0 1px 2px rgba(0,0,0,.1) -} -.progress-bar{ - float:left; - width:0; - height:100%; - font-size:12px; - line-height:20px; - color:#fff; - text-align:center; - background-color:#337ab7; - -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow:inset 0 -1px 0 rgba(0,0,0,.15); - -webkit-transition:width .6s ease; - -o-transition:width .6s ease; - transition:width .6s ease -} -.progress-bar-striped,.progress-striped .progress-bar{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - -webkit-background-size:40px 40px; - background-size:40px 40px -} -.progress-bar.active,.progress.active .progress-bar{ - -webkit-animation:progress-bar-stripes 2s linear infinite; - -o-animation:progress-bar-stripes 2s linear infinite; - animation:progress-bar-stripes 2s linear infinite -} -.progress-bar-success{ - background-color:#5cb85c -} -.progress-striped .progress-bar-success{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-info{ - background-color:#5bc0de -} -.progress-striped .progress-bar-info{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-warning{ - background-color:#f0ad4e -} -.progress-striped .progress-bar-warning{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.progress-bar-danger{ - background-color:#d9534f -} -.progress-striped .progress-bar-danger{ - background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent) -} -.media{ - margin-top:15px -} -.media:first-child{ - margin-top:0 -} -.media,.media-body{ - overflow:hidden; - zoom:1 -} -.media-body{ - width:10000px -} -.media-object{ - display:block -} -.media-object.img-thumbnail{ - max-width:none -} -.media-right,.media>.pull-right{ - padding-left:10px -} -.media-left,.media>.pull-left{ - padding-right:10px -} -.media-body,.media-left,.media-right{ - display:table-cell; - vertical-align:top -} -.media-middle{ - vertical-align:middle -} -.media-bottom{ - vertical-align:bottom -} -.media-heading{ - margin-top:0; - margin-bottom:5px -} -.media-list{ - padding-left:0; - list-style:none -} -.list-group{ - padding-left:0; - margin-bottom:20px -} -.list-group-item{ - position:relative; - display:block; - padding:10px 15px; - margin-bottom:-1px; - background-color:#fff; - border:1px solid #ddd -} -.list-group-item:first-child{ - border-top-left-radius:4px; - border-top-right-radius:4px -} -.list-group-item:last-child{ - margin-bottom:0; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px -} -a.list-group-item,button.list-group-item{ - color:#555 -} -a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{ - color:#333 -} -a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{ - color:#555; - text-decoration:none; - background-color:#f5f5f5 -} -button.list-group-item{ - width:100%; - text-align:left -} -.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{ - color:#777; - cursor:not-allowed; - background-color:#eee -} -.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{ - color:inherit -} -.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{ - color:#777 -} -.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{ - z-index:2; - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{ - color:inherit -} -.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{ - color:#c7ddef -} -.list-group-item-success{ - color:#3c763d; - background-color:#dff0d8 -} -a.list-group-item-success,button.list-group-item-success{ - color:#3c763d -} -a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{ - color:inherit -} -a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{ - color:#3c763d; - background-color:#d0e9c6 -} -a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{ - color:#fff; - background-color:#3c763d; - border-color:#3c763d -} -.list-group-item-info{ - color:#31708f; - background-color:#d9edf7 -} -a.list-group-item-info,button.list-group-item-info{ - color:#31708f -} -a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{ - color:inherit -} -a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{ - color:#31708f; - background-color:#c4e3f3 -} -a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{ - color:#fff; - background-color:#31708f; - border-color:#31708f -} -.list-group-item-warning{ - color:#8a6d3b; - background-color:#fcf8e3 -} -a.list-group-item-warning,button.list-group-item-warning{ - color:#8a6d3b -} -a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{ - color:inherit -} -a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{ - color:#8a6d3b; - background-color:#faf2cc -} -a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{ - color:#fff; - background-color:#8a6d3b; - border-color:#8a6d3b -} -.list-group-item-danger{ - color:#a94442; - background-color:#f2dede -} -a.list-group-item-danger,button.list-group-item-danger{ - color:#a94442 -} -a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{ - color:inherit -} -a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{ - color:#a94442; - background-color:#ebcccc -} -a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{ - color:#fff; - background-color:#a94442; - border-color:#a94442 -} -.list-group-item-heading{ - margin-top:0; - margin-bottom:5px -} -.list-group-item-text{ - margin-bottom:0; - line-height:1.3 -} -.panel{ - margin-bottom:20px; - background-color:#fff; - border:1px solid transparent; - border-radius:4px; - -webkit-box-shadow:0 1px 1px rgba(0,0,0,.05); - box-shadow:0 1px 1px rgba(0,0,0,.05) -} -.panel-body{ - padding:15px -} -.panel-heading{ - padding:10px 15px; - border-bottom:1px solid transparent; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel-heading>.dropdown .dropdown-toggle{ - color:inherit -} -.panel-title{ - margin-top:0; - margin-bottom:0; - font-size:16px; - color:inherit -} -.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{ - color:inherit -} -.panel-footer{ - padding:10px 15px; - background-color:#f5f5f5; - border-top:1px solid #ddd; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.list-group,.panel>.panel-collapse>.list-group{ - margin-bottom:0 -} -.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{ - border-width:1px 0; - border-radius:0 -} -.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{ - border-top:0; - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{ - border-bottom:0; - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{ - border-top-left-radius:0; - border-top-right-radius:0 -} -.panel-heading+.list-group .list-group-item:first-child{ - border-top-width:0 -} -.list-group+.panel-footer{ - border-top-width:0 -} -.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{ - margin-bottom:0 -} -.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{ - padding-right:15px; - padding-left:15px -} -.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{ - border-top-left-radius:3px; - border-top-right-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{ - border-top-left-radius:3px -} -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{ - border-top-right-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{ - border-bottom-right-radius:3px; - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{ - border-bottom-left-radius:3px -} -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{ - border-bottom-right-radius:3px -} -.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{ - border-top:1px solid #ddd -} -.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{ - border-top:0 -} -.panel>.table-bordered,.panel>.table-responsive>.table-bordered{ - border:0 -} -.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{ - border-left:0 -} -.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{ - border-right:0 -} -.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{ - border-bottom:0 -} -.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{ - border-bottom:0 -} -.panel>.table-responsive{ - margin-bottom:0; - border:0 -} -.panel-group{ - margin-bottom:20px -} -.panel-group .panel{ - margin-bottom:0; - border-radius:4px -} -.panel-group .panel+.panel{ - margin-top:5px -} -.panel-group .panel-heading{ - border-bottom:0 -} -.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{ - border-top:1px solid #ddd -} -.panel-group .panel-footer{ - border-top:0 -} -.panel-group .panel-footer+.panel-collapse .panel-body{ - border-bottom:1px solid #ddd -} -.panel-default{ - border-color:#ddd -} -.panel-default>.panel-heading{ - color:#333; - background-color:#f5f5f5; - border-color:#ddd -} -.panel-default>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ddd -} -.panel-default>.panel-heading .badge{ - color:#f5f5f5; - background-color:#333 -} -.panel-default>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ddd -} -.panel-primary{ - border-color:#337ab7 -} -.panel-primary>.panel-heading{ - color:#fff; - background-color:#337ab7; - border-color:#337ab7 -} -.panel-primary>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#337ab7 -} -.panel-primary>.panel-heading .badge{ - color:#337ab7; - background-color:#fff -} -.panel-primary>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#337ab7 -} -.panel-success{ - border-color:#d6e9c6 -} -.panel-success>.panel-heading{ - color:#3c763d; - background-color:#dff0d8; - border-color:#d6e9c6 -} -.panel-success>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#d6e9c6 -} -.panel-success>.panel-heading .badge{ - color:#dff0d8; - background-color:#3c763d -} -.panel-success>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#d6e9c6 -} -.panel-info{ - border-color:#bce8f1 -} -.panel-info>.panel-heading{ - color:#31708f; - background-color:#d9edf7; - border-color:#bce8f1 -} -.panel-info>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#bce8f1 -} -.panel-info>.panel-heading .badge{ - color:#d9edf7; - background-color:#31708f -} -.panel-info>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#bce8f1 -} -.panel-warning{ - border-color:#faebcc -} -.panel-warning>.panel-heading{ - color:#8a6d3b; - background-color:#fcf8e3; - border-color:#faebcc -} -.panel-warning>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#faebcc -} -.panel-warning>.panel-heading .badge{ - color:#fcf8e3; - background-color:#8a6d3b -} -.panel-warning>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#faebcc -} -.panel-danger{ - border-color:#ebccd1 -} -.panel-danger>.panel-heading{ - color:#a94442; - background-color:#f2dede; - border-color:#ebccd1 -} -.panel-danger>.panel-heading+.panel-collapse>.panel-body{ - border-top-color:#ebccd1 -} -.panel-danger>.panel-heading .badge{ - color:#f2dede; - background-color:#a94442 -} -.panel-danger>.panel-footer+.panel-collapse>.panel-body{ - border-bottom-color:#ebccd1 -} -.embed-responsive{ - position:relative; - display:block; - height:0; - padding:0; - overflow:hidden -} -.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{ - position:absolute; - top:0; - bottom:0; - left:0; - width:100%; - height:100%; - border:0 -} -.embed-responsive-16by9{ - padding-bottom:56.25% -} -.embed-responsive-4by3{ - padding-bottom:75% -} -.well{ - min-height:20px; - padding:19px; - margin-bottom:20px; - background-color:#f5f5f5; - border:1px solid #e3e3e3; - border-radius:4px; - -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05); - box-shadow:inset 0 1px 1px rgba(0,0,0,.05) -} -.well blockquote{ - border-color:#ddd; - border-color:rgba(0,0,0,.15) -} -.well-lg{ - padding:24px; - border-radius:6px -} -.well-sm{ - padding:9px; - border-radius:3px -} -.close{ - float:right; - font-size:21px; - font-weight:700; - line-height:1; - color:#000; - text-shadow:0 1px 0 #fff; - filter:alpha(opacity=20); - opacity:.2 -} -.close:focus,.close:hover{ - color:#000; - text-decoration:none; - cursor:pointer; - filter:alpha(opacity=50); - opacity:.5 -} -button.close{ - -webkit-appearance:none; - padding:0; - cursor:pointer; - background:0 0; - border:0 -} -.modal-open{ - overflow:hidden -} -.modal{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1050; - display:none; - overflow:hidden; - -webkit-overflow-scrolling:touch; - outline:0 -} -.modal.fade .modal-dialog{ - -webkit-transition:-webkit-transform .3s ease-out; - -o-transition:-o-transform .3s ease-out; - transition:transform .3s ease-out; - -webkit-transform:translate(0,-25%); - -ms-transform:translate(0,-25%); - -o-transform:translate(0,-25%); - transform:translate(0,-25%) -} -.modal.in .modal-dialog{ - -webkit-transform:translate(0,0); - -ms-transform:translate(0,0); - -o-transform:translate(0,0); - transform:translate(0,0) -} -.modal-open .modal{ - overflow-x:hidden; - overflow-y:auto -} -.modal-dialog{ - position:relative; - width:auto; - margin:10px -} -.modal-content{ - position:relative; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #999; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - outline:0; - -webkit-box-shadow:0 3px 9px rgba(0,0,0,.5); - box-shadow:0 3px 9px rgba(0,0,0,.5) -} -.modal-backdrop{ - position:fixed; - top:0; - right:0; - bottom:0; - left:0; - z-index:1040; - background-color:#000 -} -.modal-backdrop.fade{ - filter:alpha(opacity=0); - opacity:0 -} -.modal-backdrop.in{ - filter:alpha(opacity=50); - opacity:.5 -} -.modal-header{ - padding:15px; - border-bottom:1px solid #e5e5e5 -} -.modal-header .close{ - margin-top:-2px -} -.modal-title{ - margin:0; - line-height:1.42857143 -} -.modal-body{ - position:relative; - padding:15px -} -.modal-footer{ - padding:15px; - text-align:right; - border-top:1px solid #e5e5e5 -} -.modal-footer .btn+.btn{ - margin-bottom:0; - margin-left:5px -} -.modal-footer .btn-group .btn+.btn{ - margin-left:-1px -} -.modal-footer .btn-block+.btn-block{ - margin-left:0 -} -.modal-scrollbar-measure{ - position:absolute; - top:-9999px; - width:50px; - height:50px; - overflow:scroll -} -@media (min-width:768px){ - .modal-dialog{ - width:600px; - margin:30px auto - } - .modal-content{ - -webkit-box-shadow:0 5px 15px rgba(0,0,0,.5); - box-shadow:0 5px 15px rgba(0,0,0,.5) - } - .modal-sm{ - width:300px - } -} -@media (min-width:992px){ - .modal-lg{ - width:900px - } -} -.tooltip{ - position:absolute; - z-index:1070; - display:block; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:12px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - filter:alpha(opacity=0); - opacity:0; - line-break:auto -} -.tooltip.in{ - filter:alpha(opacity=90); - opacity:.9 -} -.tooltip.top{ - padding:5px 0; - margin-top:-3px -} -.tooltip.right{ - padding:0 5px; - margin-left:3px -} -.tooltip.bottom{ - padding:5px 0; - margin-top:3px -} -.tooltip.left{ - padding:0 5px; - margin-left:-3px -} -.tooltip-inner{ - max-width:200px; - padding:3px 8px; - color:#fff; - text-align:center; - background-color:#000; - border-radius:4px -} -.tooltip-arrow{ - position:absolute; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.tooltip.top .tooltip-arrow{ - bottom:0; - left:50%; - margin-left:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-left .tooltip-arrow{ - right:5px; - bottom:0; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.top-right .tooltip-arrow{ - bottom:0; - left:5px; - margin-bottom:-5px; - border-width:5px 5px 0; - border-top-color:#000 -} -.tooltip.right .tooltip-arrow{ - top:50%; - left:0; - margin-top:-5px; - border-width:5px 5px 5px 0; - border-right-color:#000 -} -.tooltip.left .tooltip-arrow{ - top:50%; - right:0; - margin-top:-5px; - border-width:5px 0 5px 5px; - border-left-color:#000 -} -.tooltip.bottom .tooltip-arrow{ - top:0; - left:50%; - margin-left:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-left .tooltip-arrow{ - top:0; - right:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.tooltip.bottom-right .tooltip-arrow{ - top:0; - left:5px; - margin-top:-5px; - border-width:0 5px 5px; - border-bottom-color:#000 -} -.popover{ - position:absolute; - top:0; - left:0; - z-index:1060; - display:none; - max-width:276px; - padding:1px; - font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; - font-size:14px; - font-style:normal; - font-weight:400; - line-height:1.42857143; - text-align:left; - text-align:start; - text-decoration:none; - text-shadow:none; - text-transform:none; - letter-spacing:normal; - word-break:normal; - word-spacing:normal; - word-wrap:normal; - white-space:normal; - background-color:#fff; - -webkit-background-clip:padding-box; - background-clip:padding-box; - border:1px solid #ccc; - border:1px solid rgba(0,0,0,.2); - border-radius:6px; - -webkit-box-shadow:0 5px 10px rgba(0,0,0,.2); - box-shadow:0 5px 10px rgba(0,0,0,.2); - line-break:auto -} -.popover.top{ - margin-top:-10px -} -.popover.right{ - margin-left:10px -} -.popover.bottom{ - margin-top:10px -} -.popover.left{ - margin-left:-10px -} -.popover-title{ - padding:8px 14px; - margin:0; - font-size:14px; - background-color:#f7f7f7; - border-bottom:1px solid #ebebeb; - border-radius:5px 5px 0 0 -} -.popover-content{ - padding:9px 14px -} -.popover>.arrow,.popover>.arrow:after{ - position:absolute; - display:block; - width:0; - height:0; - border-color:transparent; - border-style:solid -} -.popover>.arrow{ - border-width:11px -} -.popover>.arrow:after{ - content:""; - border-width:10px -} -.popover.top>.arrow{ - bottom:-11px; - left:50%; - margin-left:-11px; - border-top-color:#999; - border-top-color:rgba(0,0,0,.25); - border-bottom-width:0 -} -.popover.top>.arrow:after{ - bottom:1px; - margin-left:-10px; - content:" "; - border-top-color:#fff; - border-bottom-width:0 -} -.popover.right>.arrow{ - top:50%; - left:-11px; - margin-top:-11px; - border-right-color:#999; - border-right-color:rgba(0,0,0,.25); - border-left-width:0 -} -.popover.right>.arrow:after{ - bottom:-10px; - left:1px; - content:" "; - border-right-color:#fff; - border-left-width:0 -} -.popover.bottom>.arrow{ - top:-11px; - left:50%; - margin-left:-11px; - border-top-width:0; - border-bottom-color:#999; - border-bottom-color:rgba(0,0,0,.25) -} -.popover.bottom>.arrow:after{ - top:1px; - margin-left:-10px; - content:" "; - border-top-width:0; - border-bottom-color:#fff -} -.popover.left>.arrow{ - top:50%; - right:-11px; - margin-top:-11px; - border-right-width:0; - border-left-color:#999; - border-left-color:rgba(0,0,0,.25) -} -.popover.left>.arrow:after{ - right:1px; - bottom:-10px; - content:" "; - border-right-width:0; - border-left-color:#fff -} -.carousel{ - position:relative -} -.carousel-inner{ - position:relative; - width:100%; - overflow:hidden -} -.carousel-inner>.item{ - position:relative; - display:none; - -webkit-transition:.6s ease-in-out left; - -o-transition:.6s ease-in-out left; - transition:.6s ease-in-out left -} -.carousel-inner>.item>a>img,.carousel-inner>.item>img{ - line-height:1 -} -@media all and (transform-3d),(-webkit-transform-3d){ - .carousel-inner>.item{ - -webkit-transition:-webkit-transform .6s ease-in-out; - -o-transition:-o-transform .6s ease-in-out; - transition:transform .6s ease-in-out; - -webkit-backface-visibility:hidden; - backface-visibility:hidden; - -webkit-perspective:1000px; - perspective:1000px - } - .carousel-inner>.item.active.right,.carousel-inner>.item.next{ - left:0; - -webkit-transform:translate3d(100%,0,0); - transform:translate3d(100%,0,0) - } - .carousel-inner>.item.active.left,.carousel-inner>.item.prev{ - left:0; - -webkit-transform:translate3d(-100%,0,0); - transform:translate3d(-100%,0,0) - } - .carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{ - left:0; - -webkit-transform:translate3d(0,0,0); - transform:translate3d(0,0,0) - } -} -.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{ - display:block -} -.carousel-inner>.active{ - left:0 -} -.carousel-inner>.next,.carousel-inner>.prev{ - position:absolute; - top:0; - width:100% -} -.carousel-inner>.next{ - left:100% -} -.carousel-inner>.prev{ - left:-100% -} -.carousel-inner>.next.left,.carousel-inner>.prev.right{ - left:0 -} -.carousel-inner>.active.left{ - left:-100% -} -.carousel-inner>.active.right{ - left:100% -} -.carousel-control{ - position:absolute; - top:0; - bottom:0; - left:0; - width:15%; - font-size:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6); - background-color:rgba(0,0,0,0); - filter:alpha(opacity=50); - opacity:.5 -} -.carousel-control.left{ - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001))); - background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control.right{ - right:0; - left:auto; - background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5))); - background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat:repeat-x -} -.carousel-control:focus,.carousel-control:hover{ - color:#fff; - text-decoration:none; - filter:alpha(opacity=90); - outline:0; - opacity:.9 -} -.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - position:absolute; - top:50%; - z-index:5; - display:inline-block; - margin-top:-10px -} -.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - left:50%; - margin-left:-10px -} -.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - right:50%; - margin-right:-10px -} -.carousel-control .icon-next,.carousel-control .icon-prev{ - width:20px; - height:20px; - font-family:serif; - line-height:1 -} -.carousel-control .icon-prev:before{ - content:'\2039' -} -.carousel-control .icon-next:before{ - content:'\203a' -} -.carousel-indicators{ - position:absolute; - bottom:10px; - left:50%; - z-index:15; - width:60%; - padding-left:0; - margin-left:-30%; - text-align:center; - list-style:none -} -.carousel-indicators li{ - display:inline-block; - width:10px; - height:10px; - margin:1px; - text-indent:-999px; - cursor:pointer; - background-color:#000\9; - background-color:rgba(0,0,0,0); - border:1px solid #fff; - border-radius:10px -} -.carousel-indicators .active{ - width:12px; - height:12px; - margin:0; - background-color:#fff -} -.carousel-caption{ - position:absolute; - right:15%; - bottom:20px; - left:15%; - z-index:10; - padding-top:20px; - padding-bottom:20px; - color:#fff; - text-align:center; - text-shadow:0 1px 2px rgba(0,0,0,.6) -} -.carousel-caption .btn{ - text-shadow:none -} -@media screen and (min-width:768px){ - .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{ - width:30px; - height:30px; - margin-top:-10px; - font-size:30px - } - .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{ - margin-left:-10px - } - .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{ - margin-right:-10px - } - .carousel-caption{ - right:20%; - left:20%; - padding-bottom:30px - } - .carousel-indicators{ - bottom:20px - } -} -.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{ - display:table; - content:" " -} -.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{ - clear:both -} -.center-block{ - display:block; - margin-right:auto; - margin-left:auto -} -.pull-right{ - float:right!important -} -.pull-left{ - float:left!important -} -.hide{ - display:none!important -} -.show{ - display:block!important -} -.invisible{ - visibility:hidden -} -.text-hide{ - font:0/0 a; - color:transparent; - text-shadow:none; - background-color:transparent; - border:0 -} -.hidden{ - display:none!important -} -.affix{ - position:fixed -} -@-ms-viewport{ - width:device-width -} -.visible-lg,.visible-md,.visible-sm,.visible-xs{ - display:none!important -} -.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{ - display:none!important -} -@media (max-width:767px){ - .visible-xs{ - display:block!important - } - table.visible-xs{ - display:table!important - } - tr.visible-xs{ - display:table-row!important - } - td.visible-xs,th.visible-xs{ - display:table-cell!important - } -} -@media (max-width:767px){ - .visible-xs-block{ - display:block!important - } -} -@media (max-width:767px){ - .visible-xs-inline{ - display:inline!important - } -} -@media (max-width:767px){ - .visible-xs-inline-block{ - display:inline-block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm{ - display:block!important - } - table.visible-sm{ - display:table!important - } - tr.visible-sm{ - display:table-row!important - } - td.visible-sm,th.visible-sm{ - display:table-cell!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-block{ - display:block!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline{ - display:inline!important - } -} -@media (min-width:768px) and (max-width:991px){ - .visible-sm-inline-block{ - display:inline-block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md{ - display:block!important - } - table.visible-md{ - display:table!important - } - tr.visible-md{ - display:table-row!important - } - td.visible-md,th.visible-md{ - display:table-cell!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-block{ - display:block!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline{ - display:inline!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .visible-md-inline-block{ - display:inline-block!important - } -} -@media (min-width:1200px){ - .visible-lg{ - display:block!important - } - table.visible-lg{ - display:table!important - } - tr.visible-lg{ - display:table-row!important - } - td.visible-lg,th.visible-lg{ - display:table-cell!important - } -} -@media (min-width:1200px){ - .visible-lg-block{ - display:block!important - } -} -@media (min-width:1200px){ - .visible-lg-inline{ - display:inline!important - } -} -@media (min-width:1200px){ - .visible-lg-inline-block{ - display:inline-block!important - } -} -@media (max-width:767px){ - .hidden-xs{ - display:none!important - } -} -@media (min-width:768px) and (max-width:991px){ - .hidden-sm{ - display:none!important - } -} -@media (min-width:992px) and (max-width:1199px){ - .hidden-md{ - display:none!important - } -} -@media (min-width:1200px){ - .hidden-lg{ - display:none!important - } -} -.visible-print{ - display:none!important -} -@media print{ - .visible-print{ - display:block!important - } - table.visible-print{ - display:table!important - } - tr.visible-print{ - display:table-row!important - } - td.visible-print,th.visible-print{ - display:table-cell!important - } -} -.visible-print-block{ - display:none!important -} -@media print{ - .visible-print-block{ - display:block!important - } -} -.visible-print-inline{ - display:none!important -} -@media print{ - .visible-print-inline{ - display:inline!important - } -} -.visible-print-inline-block{ - display:none!important -} -@media print{ - .visible-print-inline-block{ - display:inline-block!important - } -} -@media print{ - .hidden-print{ - display:none!important - } -} -/*# sourceMappingURL=bootstrap.min.css.map */ - diff --git a/themes/triangles/client/src/css/01-main.css b/themes/triangles/client/src/css/01-main.css deleted file mode 100644 index 347c0b81c..000000000 --- a/themes/triangles/client/src/css/01-main.css +++ /dev/null @@ -1,77 +0,0 @@ -body { - background-image: url("/img/LargeTriangles.svg"); - /*background-image: url("//*img//*RandomizedPattern.svg");*/ - /*background-image: url("//*img//*background.svg");*/ - /*background-color:#000000;*/ -} -canvas{ - position:absolute; - top:0; - left:0; -} -.authelia-brand { - font-weight: bold; - font-style: italic; - color: #ffffff -} -.poweredby-block { - margin: 0px 30px; - margin-top: 10px; - padding-top: 15px; - border-top: 1px solid rgba(0, 0, 0, 0.15); - -} -.poweredby { - font-size: 0.7em; - color: white; -} -/* notifications */ -.notification { - padding: 10px; - margin: 15px 0px; - border-radius: 6px; - display: none; - position: absolute; -} -.notification img { - width: 24px; - margin-right: 10px; -} -.notification i, -.notification span { - display:table-cell; - vertical-align:middle; -} -.info { - border: 1px solid #9cb1ff; - background-color: rgb(192, 220, 255); -} -.success { - border: 1px solid #65ec7c; - background-color: rgb(163, 255, 157); -} -.error { - border: 1px solid #ffa3a3; - background-color: rgb(255, 175, 175); -} -.warning { - border: 1px solid #ffd743; - background-color: rgb(255, 230, 143); -} -.bottom-right-links { - text-align: right; - margin-top: 10px; - font-size: 0.8em; - color: white; -} -.header { - background-color: #000000; - color: white; - margin: 0px; -} -.body { - padding: 10px; -} -h1 { - font-size: 25px; -} diff --git a/themes/triangles/client/src/css/02-login.css b/themes/triangles/client/src/css/02-login.css deleted file mode 100644 index a6984267b..000000000 --- a/themes/triangles/client/src/css/02-login.css +++ /dev/null @@ -1,136 +0,0 @@ -.form-signin -{ - margin: 0 auto; -} - -.form-signin .form-signin-heading, .form-signin .checkbox -{ - margin-bottom: 10px; -} - -.form-signin .checkbox -{ - font-weight: normal; -} - -.form-signin .form-control -{ - position: relative; - font-size: 16px; - height: auto; - padding: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-signin .form-control:focus -{ - z-index: 2; -} -.form-signin input[type="text"] -{ - margin-bottom: -1px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.form-signin input[type="password"] -{ - /* margin-bottom: 10px; */ - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.account-wall -{ - border: 1px solid #000; - margin-top: 20px; - padding-bottom: 20px; - background-color: #000000; - -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); - box-shadow: 0px 2px 2px rgba(0, 0, 0, 1); -} -.account-wall h1 -{ - margin-bottom: 15px; - margin-top: 15px; - font-weight: 800; - display: block; - text-align: center; -} -.account-wall h3 -{ - display: block; - text-align: center; -} -.account-wall p -{ - text-align: center; - margin: 10px; - color: white; -} -.account-wall .form-inputs -{ - margin-bottom: 10px; - border-color: #b20c0c; -} -.account-wall hr { - border-color: #c5c5c5; -} - -.header-img -{ - width: 96px; - height: 96px; - margin: 0 auto 10px; - display: block; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - border-radius: 50%; -} - -.link -{ - margin-top: 10px; - color: white; -} - -.btn-primary.totp -{ - background-color: rgb(102, 135, 162); -} - -.btn-primary.u2f -{ - background-color: rgb(83, 149, 204); -} - -.u2f-token { - text-align: center; -} - -.u2f-token img { - width: 70px; -} - -.keep-me-logged-in { - margin-top: 10px; - font-size: 0.8em; - color: white; -} - -.keep-me-logged-in input[type=checkbox] { - transform: scale(0.8); - margin: 0; - margin-right: 4px; -} - -.keep-me-logged-in label { - font-weight: 300; -} - -.keep-me-logged-in input, -.keep-me-logged-in label { - display: inline-block; - margin-bottom: 0; /* I added this after I posted my reply */ - vertical-align: middle; /* Fixes any weird issues in Firefox and IE */ -} diff --git a/themes/triangles/client/src/css/03-errors.css b/themes/triangles/client/src/css/03-errors.css deleted file mode 100644 index e9f97f33b..000000000 --- a/themes/triangles/client/src/css/03-errors.css +++ /dev/null @@ -1,12 +0,0 @@ - -.error-401 .header-img { - border-radius: 0%; -} - -.error-403 .header-img { - border-radius: 0%; -} - -.error-404 .header-img { - border-radius: 0%; -} \ No newline at end of file diff --git a/themes/triangles/client/src/css/03-password-reset-form.css b/themes/triangles/client/src/css/03-password-reset-form.css deleted file mode 100644 index 34066bc24..000000000 --- a/themes/triangles/client/src/css/03-password-reset-form.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-form .header-img { - border-radius: 0%; -} diff --git a/themes/triangles/client/src/css/03-password-reset-request.css b/themes/triangles/client/src/css/03-password-reset-request.css deleted file mode 100644 index 1a2ad4df8..000000000 --- a/themes/triangles/client/src/css/03-password-reset-request.css +++ /dev/null @@ -1,4 +0,0 @@ - -.password-reset-request .header-img { - border-radius: 0%; -} diff --git a/themes/triangles/client/src/css/03-totp-register.css b/themes/triangles/client/src/css/03-totp-register.css deleted file mode 100644 index cb76720ad..000000000 --- a/themes/triangles/client/src/css/03-totp-register.css +++ /dev/null @@ -1,22 +0,0 @@ -.totp-register #secret { - background-color: white; - font-size: 0.9em; - font-weight: bold; - padding: 5px; - border: 1px solid #c7c7c7; - word-wrap: break-word; -} -.totp-register #qrcode img { - margin: 10px auto; -} -.totp-register .need-google-authenticator { - text-align: center; - margin-top: 20px; -} -.totp-register .store-badges { - margin-top: 5px; -} -.totp-register .store-badge { - width: 110px; - height: 30px; -} \ No newline at end of file diff --git a/themes/triangles/client/src/css/03-u2f-register.css b/themes/triangles/client/src/css/03-u2f-register.css deleted file mode 100644 index e54cddf89..000000000 --- a/themes/triangles/client/src/css/03-u2f-register.css +++ /dev/null @@ -1,5 +0,0 @@ - -.u2f-register img { - display: block; - margin: 20px auto; -} \ No newline at end of file diff --git a/themes/triangles/client/src/img/LargeTriangles.svg b/themes/triangles/client/src/img/LargeTriangles.svg deleted file mode 100644 index 0988bcb39..000000000 --- a/themes/triangles/client/src/img/LargeTriangles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/themes/triangles/client/src/img/background.jpg b/themes/triangles/client/src/img/background.jpg deleted file mode 100644 index 974ea273f..000000000 Binary files a/themes/triangles/client/src/img/background.jpg and /dev/null differ diff --git a/themes/triangles/client/src/img/icon.png b/themes/triangles/client/src/img/icon.png deleted file mode 100644 index 040d10c1a..000000000 Binary files a/themes/triangles/client/src/img/icon.png and /dev/null differ diff --git a/themes/triangles/client/src/img/mail.png b/themes/triangles/client/src/img/mail.png deleted file mode 100644 index 834bfce91..000000000 Binary files a/themes/triangles/client/src/img/mail.png and /dev/null differ diff --git a/themes/triangles/client/src/img/matrix_circle_128x128.png b/themes/triangles/client/src/img/matrix_circle_128x128.png deleted file mode 100644 index 856e01556..000000000 Binary files a/themes/triangles/client/src/img/matrix_circle_128x128.png and /dev/null differ diff --git a/themes/triangles/client/src/img/notifications/.directory b/themes/triangles/client/src/img/notifications/.directory deleted file mode 100644 index 7c8b80541..000000000 --- a/themes/triangles/client/src/img/notifications/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,35 -Version=3 -ViewMode=1 diff --git a/themes/triangles/client/src/img/notifications/error.png b/themes/triangles/client/src/img/notifications/error.png deleted file mode 100644 index bf64d28f7..000000000 Binary files a/themes/triangles/client/src/img/notifications/error.png and /dev/null differ diff --git a/themes/triangles/client/src/img/notifications/info.png b/themes/triangles/client/src/img/notifications/info.png deleted file mode 100644 index 67928e88c..000000000 Binary files a/themes/triangles/client/src/img/notifications/info.png and /dev/null differ diff --git a/themes/triangles/client/src/img/notifications/success.png b/themes/triangles/client/src/img/notifications/success.png deleted file mode 100644 index d3998392d..000000000 Binary files a/themes/triangles/client/src/img/notifications/success.png and /dev/null differ diff --git a/themes/triangles/client/src/img/notifications/warning.png b/themes/triangles/client/src/img/notifications/warning.png deleted file mode 100644 index ab8b54ffc..000000000 Binary files a/themes/triangles/client/src/img/notifications/warning.png and /dev/null differ diff --git a/themes/triangles/client/src/img/padlock.png b/themes/triangles/client/src/img/padlock.png deleted file mode 100644 index 31abbaeef..000000000 Binary files a/themes/triangles/client/src/img/padlock.png and /dev/null differ diff --git a/themes/triangles/client/src/img/password_white.png b/themes/triangles/client/src/img/password_white.png deleted file mode 100644 index 0b93ef3fb..000000000 Binary files a/themes/triangles/client/src/img/password_white.png and /dev/null differ diff --git a/themes/triangles/client/src/img/pendrive.png b/themes/triangles/client/src/img/pendrive.png deleted file mode 100644 index fa49178c3..000000000 Binary files a/themes/triangles/client/src/img/pendrive.png and /dev/null differ diff --git a/themes/triangles/client/src/img/sharingan.png b/themes/triangles/client/src/img/sharingan.png deleted file mode 100644 index 526787d3b..000000000 Binary files a/themes/triangles/client/src/img/sharingan.png and /dev/null differ diff --git a/themes/triangles/client/src/img/stores/.directory b/themes/triangles/client/src/img/stores/.directory deleted file mode 100644 index 7bdc8daf8..000000000 --- a/themes/triangles/client/src/img/stores/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,57,25 -Version=3 -ViewMode=1 diff --git a/themes/triangles/client/src/img/stores/applestore-badge.svg b/themes/triangles/client/src/img/stores/applestore-badge.svg deleted file mode 100644 index ac111e597..000000000 --- a/themes/triangles/client/src/img/stores/applestore-badge.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/triangles/client/src/img/stores/googleplay-badge.svg b/themes/triangles/client/src/img/stores/googleplay-badge.svg deleted file mode 100644 index 9e33e3aa2..000000000 --- a/themes/triangles/client/src/img/stores/googleplay-badge.svg +++ /dev/null @@ -1,429 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/themes/triangles/client/src/img/success.png b/themes/triangles/client/src/img/success.png deleted file mode 100644 index ee9d6841b..000000000 Binary files a/themes/triangles/client/src/img/success.png and /dev/null differ diff --git a/themes/triangles/client/src/img/user.png b/themes/triangles/client/src/img/user.png deleted file mode 100644 index 00941399d..000000000 Binary files a/themes/triangles/client/src/img/user.png and /dev/null differ diff --git a/themes/triangles/client/src/img/warning.png b/themes/triangles/client/src/img/warning.png deleted file mode 100644 index c6acd953b..000000000 Binary files a/themes/triangles/client/src/img/warning.png and /dev/null differ diff --git a/themes/triangles/client/src/thirdparties/qrcode.min.js b/themes/triangles/client/src/thirdparties/qrcode.min.js deleted file mode 100644 index 993e88f39..000000000 --- a/themes/triangles/client/src/thirdparties/qrcode.min.js +++ /dev/null @@ -1 +0,0 @@ -var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/themes/triangles/client/src/thirdparties/u2f-api.js b/themes/triangles/client/src/thirdparties/u2f-api.js deleted file mode 100644 index 8c7801e3b..000000000 --- a/themes/triangles/client/src/thirdparties/u2f-api.js +++ /dev/null @@ -1,749 +0,0 @@ -//Copyright 2014-2015 Google Inc. All rights reserved. - -//Use of this source code is governed by a BSD-style -//license that can be found in the LICENSE file or at -//https://developers.google.com/open-source/licenses/bsd - -/** - * @fileoverview The U2F api. - */ -'use strict'; - - -/** - * Namespace for the U2F api. - * @type {Object} - */ -var u2f = u2f || {}; - -/** - * FIDO U2F Javascript API Version - * @number - */ -var js_api_version; - -/** - * The U2F extension id - * @const {string} - */ -// The Chrome packaged app extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the package Chrome app and does not require installing the U2F Chrome extension. - u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd'; -// The U2F Chrome extension ID. -// Uncomment this if you want to deploy a server instance that uses -// the U2F Chrome extension to authenticate. -// u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne'; - - -/** - * Message types for messsages to/from the extension - * @const - * @enum {string} - */ -u2f.MessageTypes = { - 'U2F_REGISTER_REQUEST': 'u2f_register_request', - 'U2F_REGISTER_RESPONSE': 'u2f_register_response', - 'U2F_SIGN_REQUEST': 'u2f_sign_request', - 'U2F_SIGN_RESPONSE': 'u2f_sign_response', - 'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request', - 'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response' -}; - - -/** - * Response status codes - * @const - * @enum {number} - */ -u2f.ErrorCodes = { - 'OK': 0, - 'OTHER_ERROR': 1, - 'BAD_REQUEST': 2, - 'CONFIGURATION_UNSUPPORTED': 3, - 'DEVICE_INELIGIBLE': 4, - 'TIMEOUT': 5 -}; - - -/** - * A message for registration requests - * @typedef {{ - * type: u2f.MessageTypes, - * appId: ?string, - * timeoutSeconds: ?number, - * requestId: ?number - * }} - */ -u2f.U2fRequest; - - -/** - * A message for registration responses - * @typedef {{ - * type: u2f.MessageTypes, - * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse), - * requestId: ?number - * }} - */ -u2f.U2fResponse; - - -/** - * An error object for responses - * @typedef {{ - * errorCode: u2f.ErrorCodes, - * errorMessage: ?string - * }} - */ -u2f.Error; - -/** - * Data object for a single sign request. - * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}} - */ -u2f.Transport; - - -/** - * Data object for a single sign request. - * @typedef {Array} - */ -u2f.Transports; - -/** - * Data object for a single sign request. - * @typedef {{ - * version: string, - * challenge: string, - * keyHandle: string, - * appId: string - * }} - */ -u2f.SignRequest; - - -/** - * Data object for a sign response. - * @typedef {{ - * keyHandle: string, - * signatureData: string, - * clientData: string - * }} - */ -u2f.SignResponse; - - -/** - * Data object for a registration request. - * @typedef {{ - * version: string, - * challenge: string - * }} - */ -u2f.RegisterRequest; - - -/** - * Data object for a registration response. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: Transports, - * appId: string - * }} - */ -u2f.RegisterResponse; - - -/** - * Data object for a registered key. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: ?Transports, - * appId: ?string - * }} - */ -u2f.RegisteredKey; - - -/** - * Data object for a get API register response. - * @typedef {{ - * js_api_version: number - * }} - */ -u2f.GetJsApiVersionResponse; - - -//Low level MessagePort API support - -/** - * Sets up a MessagePort to the U2F extension using the - * available mechanisms. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - */ -u2f.getMessagePort = function(callback) { - if (typeof chrome != 'undefined' && chrome.runtime) { - // The actual message here does not matter, but we need to get a reply - // for the callback to run. Thus, send an empty signature request - // in order to get a failure response. - var msg = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: [] - }; - chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() { - if (!chrome.runtime.lastError) { - // We are on a whitelisted origin and can talk directly - // with the extension. - u2f.getChromeRuntimePort_(callback); - } else { - // chrome.runtime was available, but we couldn't message - // the extension directly, use iframe - u2f.getIframePort_(callback); - } - }); - } else if (u2f.isAndroidChrome_()) { - u2f.getAuthenticatorPort_(callback); - } else if (u2f.isIosChrome_()) { - u2f.getIosPort_(callback); - } else { - // chrome.runtime was not available at all, which is normal - // when this origin doesn't have access to any extensions. - u2f.getIframePort_(callback); - } -}; - -/** - * Detect chrome running on android based on the browser's useragent. - * @private - */ -u2f.isAndroidChrome_ = function() { - var userAgent = navigator.userAgent; - return userAgent.indexOf('Chrome') != -1 && - userAgent.indexOf('Android') != -1; -}; - -/** - * Detect chrome running on iOS based on the browser's platform. - * @private - */ -u2f.isIosChrome_ = function() { - return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1; -}; - -/** - * Connects directly to the extension via chrome.runtime.connect. - * @param {function(u2f.WrappedChromeRuntimePort_)} callback - * @private - */ -u2f.getChromeRuntimePort_ = function(callback) { - var port = chrome.runtime.connect(u2f.EXTENSION_ID, - {'includeTlsChannelId': true}); - setTimeout(function() { - callback(new u2f.WrappedChromeRuntimePort_(port)); - }, 0); -}; - -/** - * Return a 'port' abstraction to the Authenticator app. - * @param {function(u2f.WrappedAuthenticatorPort_)} callback - * @private - */ -u2f.getAuthenticatorPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedAuthenticatorPort_()); - }, 0); -}; - -/** - * Return a 'port' abstraction to the iOS client app. - * @param {function(u2f.WrappedIosPort_)} callback - * @private - */ -u2f.getIosPort_ = function(callback) { - setTimeout(function() { - callback(new u2f.WrappedIosPort_()); - }, 0); -}; - -/** - * A wrapper for chrome.runtime.Port that is compatible with MessagePort. - * @param {Port} port - * @constructor - * @private - */ -u2f.WrappedChromeRuntimePort_ = function(port) { - this.port_ = port; -}; - -/** - * Format and return a sign request compliant with the JS API version supported by the extension. - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatSignRequest_ = - function(appId, challenge, registeredKeys, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: challenge, - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: signRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - appId: appId, - challenge: challenge, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - -/** - * Format and return a register request compliant with the JS API version supported by the extension.. - * @param {Array} signRequests - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ -u2f.formatRegisterRequest_ = - function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - for (var i = 0; i < registerRequests.length; i++) { - registerRequests[i].appId = appId; - } - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: registerRequests[0], - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - signRequests: signRequests, - registerRequests: registerRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - appId: appId, - registerRequests: registerRequests, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; -}; - - -/** - * Posts a message on the underlying channel. - * @param {Object} message - */ -u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) { - this.port_.postMessage(message); -}; - - -/** - * Emulates the HTML 5 addEventListener interface. Works only for the - * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedChromeRuntimePort_.prototype.addEventListener = - function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message' || name == 'onmessage') { - this.port_.onMessage.addListener(function(message) { - // Emulate a minimal MessageEvent object - handler({'data': message}); - }); - } else { - console.error('WrappedChromeRuntimePort only supports onMessage'); - } -}; - -/** - * Wrap the Authenticator app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedAuthenticatorPort_ = function() { - this.requestId_ = -1; - this.requestObject_ = null; -} - -/** - * Launch the Authenticator intent. - * @param {Object} message - */ -u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) { - var intentUrl = - u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ + - ';S.request=' + encodeURIComponent(JSON.stringify(message)) + - ';end'; - document.location = intentUrl; -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() { - return "WrappedAuthenticatorPort_"; -}; - - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message') { - var self = this; - /* Register a callback to that executes when - * chrome injects the response. */ - window.addEventListener( - 'message', self.onRequestUpdate_.bind(self, handler), false); - } else { - console.error('WrappedAuthenticatorPort only supports message'); - } -}; - -/** - * Callback invoked when a response is received from the Authenticator. - * @param function({data: Object}) callback - * @param {Object} message message Object - */ -u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ = - function(callback, message) { - var messageObject = JSON.parse(message.data); - var intentUrl = messageObject['intentURL']; - - var errorCode = messageObject['errorCode']; - var responseObject = null; - if (messageObject.hasOwnProperty('data')) { - responseObject = /** @type {Object} */ ( - JSON.parse(messageObject['data'])); - } - - callback({'data': responseObject}); -}; - -/** - * Base URL for intents to Authenticator. - * @const - * @private - */ -u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ = - 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE'; - -/** - * Wrap the iOS client app with a MessagePort interface. - * @constructor - * @private - */ -u2f.WrappedIosPort_ = function() {}; - -/** - * Launch the iOS client app request - * @param {Object} message - */ -u2f.WrappedIosPort_.prototype.postMessage = function(message) { - var str = JSON.stringify(message); - var url = "u2f://auth?" + encodeURI(str); - location.replace(url); -}; - -/** - * Tells what type of port this is. - * @return {String} port type - */ -u2f.WrappedIosPort_.prototype.getPortType = function() { - return "WrappedIosPort_"; -}; - -/** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name !== 'message') { - console.error('WrappedIosPort only supports message'); - } -}; - -/** - * Sets up an embedded trampoline iframe, sourced from the extension. - * @param {function(MessagePort)} callback - * @private - */ -u2f.getIframePort_ = function(callback) { - // Create the iframe - var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID; - var iframe = document.createElement('iframe'); - iframe.src = iframeOrigin + '/u2f-comms.html'; - iframe.setAttribute('style', 'display:none'); - document.body.appendChild(iframe); - - var channel = new MessageChannel(); - var ready = function(message) { - if (message.data == 'ready') { - channel.port1.removeEventListener('message', ready); - callback(channel.port1); - } else { - console.error('First event on iframe port was not "ready"'); - } - }; - channel.port1.addEventListener('message', ready); - channel.port1.start(); - - iframe.addEventListener('load', function() { - // Deliver the port to the iframe and initialize - iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]); - }); -}; - - -//High-level JS API - -/** - * Default extension response timeout in seconds. - * @const - */ -u2f.EXTENSION_TIMEOUT_SEC = 30; - -/** - * A singleton instance for a MessagePort to the extension. - * @type {MessagePort|u2f.WrappedChromeRuntimePort_} - * @private - */ -u2f.port_ = null; - -/** - * Callbacks waiting for a port - * @type {Array} - * @private - */ -u2f.waitingForPort_ = []; - -/** - * A counter for requestIds. - * @type {number} - * @private - */ -u2f.reqCounter_ = 0; - -/** - * A map from requestIds to client callbacks - * @type {Object.} - * @private - */ -u2f.callbackMap_ = {}; - -/** - * Creates or retrieves the MessagePort singleton to use. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - * @private - */ -u2f.getPortSingleton_ = function(callback) { - if (u2f.port_) { - callback(u2f.port_); - } else { - if (u2f.waitingForPort_.length == 0) { - u2f.getMessagePort(function(port) { - u2f.port_ = port; - u2f.port_.addEventListener('message', - /** @type {function(Event)} */ (u2f.responseHandler_)); - - // Careful, here be async callbacks. Maybe. - while (u2f.waitingForPort_.length) - u2f.waitingForPort_.shift()(u2f.port_); - }); - } - u2f.waitingForPort_.push(callback); - } -}; - -/** - * Handles response messages from the extension. - * @param {MessageEvent.} message - * @private - */ -u2f.responseHandler_ = function(message) { - var response = message.data; - var reqId = response['requestId']; - if (!reqId || !u2f.callbackMap_[reqId]) { - console.error('Unknown or missing requestId in response.'); - return; - } - var cb = u2f.callbackMap_[reqId]; - delete u2f.callbackMap_[reqId]; - cb(response['responseData']); -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the sign request. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual sign request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual sign request in the supported API version. - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches an array of sign requests to available U2F tokens. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the register request. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual register request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual register request in the supported API version. - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - } -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatRegisterRequest_( - appId, registeredKeys, registerRequests, timeoutSeconds, reqId); - port.postMessage(req); - }); -}; - - -/** - * Dispatches a message to the extension to find out the supported - * JS API version. - * If the user is on a mobile phone and is thus using Google Authenticator instead - * of the Chrome extension, don't send the request and simply return 0. - * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.getApiVersion = function(callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(port) { - // If we are using Android Google Authenticator or iOS client app, - // do not fire an intent to ask which JS API version to use. - if (port.getPortType) { - var apiVersion; - switch (port.getPortType()) { - case 'WrappedIosPort_': - case 'WrappedAuthenticatorPort_': - apiVersion = 1.1; - break; - - default: - apiVersion = 0; - break; - } - callback({ 'js_api_version': apiVersion }); - return; - } - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); -}; - diff --git a/themes/triangles/server/.directory b/themes/triangles/server/.directory deleted file mode 100644 index b7754766c..000000000 --- a/themes/triangles/server/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,58,20 -Version=3 -ViewMode=1 diff --git a/themes/triangles/server/src/resources/email-template.ejs b/themes/triangles/server/src/resources/email-template.ejs deleted file mode 100644 index f59c2f944..000000000 --- a/themes/triangles/server/src/resources/email-template.ejs +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - Simples-Minimalistic Responsive Template - - - - - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - -
-

<%= title %>

-
- -
 
-
-
- - - - - - - - -
- - - - - - -
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - - - - - - -
 
- - - - - - - - - - - - - - - - - - -
- This email has been sent to you in order to validate your identity. Please ignore it if you do not know why you received it. -
 
- <%= button_title %> -
-
 
-
-
- - - - - - - - -
- - - - - - - - - - - - -
 
 
 
-
- - - - - - - - -
- - - - - - -
- - - - - - - - - - - -
- Please ignore this email if you did not initiate the process. -
-
-
- - - - - diff --git a/themes/triangles/server/src/views/already-logged-in.pug b/themes/triangles/server/src/views/already-logged-in.pug deleted file mode 100644 index 137bbea30..000000000 --- a/themes/triangles/server/src/views/already-logged-in.pug +++ /dev/null @@ -1,14 +0,0 @@ -extends layout/layout.pug - -block form-header - h1 Sign in - -block content - img(class="header-img" src="/img/success.png" alt="success") - if redirection_url - p You are already logged in as #{ username }.

- | If you are not redirected in few seconds, click here.

- | Otherwise, click here to log off. - else - p You are already logged in as #{ username }.

- | Click here to log off. diff --git a/themes/triangles/server/src/views/errors/.directory b/themes/triangles/server/src/views/errors/.directory deleted file mode 100644 index 33f71bea4..000000000 --- a/themes/triangles/server/src/views/errors/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -Timestamp=2018,12,17,20,59,57 -Version=3 -ViewMode=1 diff --git a/themes/triangles/server/src/views/errors/401.pug b/themes/triangles/server/src/views/errors/401.pug deleted file mode 100644 index b7a222ad0..000000000 --- a/themes/triangles/server/src/views/errors/401.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-401"; - -block form-header - h1 Error 401 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You are not authorized to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You are not authorized to access this resource. \ No newline at end of file diff --git a/themes/triangles/server/src/views/errors/403.pug b/themes/triangles/server/src/views/errors/403.pug deleted file mode 100644 index f4b5ca8a2..000000000 --- a/themes/triangles/server/src/views/errors/403.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-403"; - -block form-header - h1 Error 403 - -block content - img(class="header-img" src="/img/warning.png" alt="warning") - if redirection_url - p You don't have enough privileges to access this resource.

- | Please click here if you are not - | redirected in few seconds. - else - p You don't have enough privileges to access this resource. diff --git a/themes/triangles/server/src/views/errors/404.pug b/themes/triangles/server/src/views/errors/404.pug deleted file mode 100644 index 06d6375fc..000000000 --- a/themes/triangles/server/src/views/errors/404.pug +++ /dev/null @@ -1,11 +0,0 @@ -extends ../layout/layout.pug - -block variables - - page_classname = "error-404"; - -block form-header -

Error 404

- -block content - img(class="header-img" src="/img/warning.png" alt="warning") - p Page not found. diff --git a/themes/triangles/server/src/views/firstfactor.pug b/themes/triangles/server/src/views/firstfactor.pug deleted file mode 100644 index 574470710..000000000 --- a/themes/triangles/server/src/views/firstfactor.pug +++ /dev/null @@ -1,23 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "firstfactor"; - -block form-header - h1 Sign in - -block content - div(class="notification") - img(class="header-img" src="/img/sharingan.png" alt="user profile") - p Enter your credentials to sign in - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" id="username" placeholder="Username" required autofocus) - input(type="password" class="form-control" id="password" placeholder="Password" required) - button(id="signin" class="btn btn-lg btn-primary btn-block" type="submit") Sign in - div(class="keep-me-logged-in pull-left") - input(type="checkbox" id="keep_me_logged_in" name="keep_me_logged_in" value="true") - label(for="keep_me_logged_in") Keep me logged in - div(class="bottom-right-links pull-right") - a(href=reset_password_request_endpoint, class="link forgot-password") Forgot password? - span(class="clearfix") diff --git a/themes/triangles/server/src/views/layout/layout.pug b/themes/triangles/server/src/views/layout/layout.pug deleted file mode 100644 index 43247436d..000000000 --- a/themes/triangles/server/src/views/layout/layout.pug +++ /dev/null @@ -1,28 +0,0 @@ -block variables - -doctype html -html - head - title Authelia - 2FA - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="robots", content="noindex, nofollow, nosnippet, noarchive") - meta(http-equiv="Content-Security-Policy", content="default-src 'self'; img-src 'self' data:;") - link(rel="icon", href="/img/icon.png" type="image/png" sizes="32x32") - link(rel="stylesheet", type="text/css", href="/css/authelia.css") - if redirection_url - meta(http-equiv="refresh" content="4;url=" + redirection_url) - body - div(class="container") - div(class="row") - div(class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3") - div(class="account-wall " + page_classname) - div(class="row header") - block form-header - div(class="row body") - div(class="form col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2") - block content - div(class="row footer poweredby-block") - div(class="poweredby col-xs-6 col-xs-offset-4 col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4") - | Powered by Authelia - block entrypoint - script(src="/js/authelia.js", type="text/javascript") diff --git a/themes/triangles/server/src/views/need-identity-validation.pug b/themes/triangles/server/src/views/need-identity-validation.pug deleted file mode 100644 index 4cfd62717..000000000 --- a/themes/triangles/server/src/views/need-identity-validation.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "identity-validation"; - -block form-header - h1 Registration - -block content - img(class="header-img" src="/img/mail.png" alt="mail") - p A confirmation email has been sent to your mailbox. - | Please open it and click on the link within 15 minutes to confirm the registration. diff --git a/themes/triangles/server/src/views/password-reset-form.pug b/themes/triangles/server/src/views/password-reset-form.pug deleted file mode 100644 index fd9311892..000000000 --- a/themes/triangles/server/src/views/password-reset-form.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-form"; - -block form-header - h1 Reset password - -block content - div(class="notification") - img(class="header-img" src="/img/password_white.png" alt="password") - p Set your new password and confirm it. - form(class="form-signin") - div(class="form-inputs") - input(class="form-control" type="password" name="password1" id="password1" placeholder="New password" required="required") - input(class="form-control" type="password" name="password2" id="password2" placeholder="Password confirmation" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/triangles/server/src/views/password-reset-request.pug b/themes/triangles/server/src/views/password-reset-request.pug deleted file mode 100644 index 855b5998b..000000000 --- a/themes/triangles/server/src/views/password-reset-request.pug +++ /dev/null @@ -1,18 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "password-reset-request"; - -block form-header - h1 Reset password - -block content - div(class="notification") - div - img(class="header-img" src="/img/password_white.png" alt="password") - p After giving your username, you will receive an email to change your password. - form(class="form-signin") - div(class="form-inputs") - input(type="text" class="form-control" name="username" id="username" placeholder="Your username" required="required") - button(id="reset-password-button" class="btn btn-lg btn-primary btn-block" type="submit") Reset Password - span(class="clearfix") diff --git a/themes/triangles/server/src/views/secondfactor.pug b/themes/triangles/server/src/views/secondfactor.pug deleted file mode 100644 index 87b578185..000000000 --- a/themes/triangles/server/src/views/secondfactor.pug +++ /dev/null @@ -1,31 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "secondfactor"; - -block form-header - h1 Sign in - -block content - div - div(class="notification notification-totp") - h3 Hi #{username} - div(class="row") - div(class="u2f-token") - img(src="/img/pendrive.png", alt="security key") - p - | Please, touch your security key
- b Or
- | Get a one-time password - form(class="form-signin totp") - div(class="form-inputs") - input(type="text" autocomplete="off" class="form-control" id="token" placeholder="Token" required autofocus) - button(class="btn btn-lg btn-primary btn-block totp-button" type="submit") Sign in - div(class="pull-right bottom-right-links") - div Need to register? - div - a(href=u2f_identity_start_endpoint, class="link register-u2f", data-toggle="tooltip", title="A security key is required to register.") Security key - | | - a(href=totp_identity_start_endpoint, class="link register-totp") Google Authenticator - span(class="clearfix") - script(src="/js/u2f-api.js", type="text/javascript") diff --git a/themes/triangles/server/src/views/totp-register.pug b/themes/triangles/server/src/views/totp-register.pug deleted file mode 100644 index 1b4d98354..000000000 --- a/themes/triangles/server/src/views/totp-register.pug +++ /dev/null @@ -1,25 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "totp-register"; - -block form-header - h1 One-time passwords - -block content - p Open Google Authenticator and add this entry - p(id="secret") #{ base32_secret } - p or scan this barcode - div(id="qrcode") #{ otpauth_url } - p - a(href=login_endpoint, id="login-button") Login - div(class="need-google-authenticator") - | Need Google Authenticator? - div(class="store-badges") - a(href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1', target="_blank") - img(alt='Get it on Google Play', src='/img/stores/googleplay-badge.svg', class="store-badge") - a(href='https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8', target="_blank") - img(alt='Get it on Apple Store' src='/img/stores/applestore-badge.svg' class="store-badge") - -block entrypoint - script(src="/js/qrcode.min.js", type="text/javascript" ) diff --git a/themes/triangles/server/src/views/u2f-register.pug b/themes/triangles/server/src/views/u2f-register.pug deleted file mode 100644 index d52eba6ca..000000000 --- a/themes/triangles/server/src/views/u2f-register.pug +++ /dev/null @@ -1,12 +0,0 @@ -extends layout/layout.pug - -block variables - - page_classname = "u2f-register"; - -block form-header - h1 Register your security key - -block content - p Touch the token to register your security key. - img(src="/img/pendrive.png" alt="pendrive") - script(src="/js/u2f-api.js", type="text/javascript") \ No newline at end of file