diff --git a/Frontend images/books.png b/Frontend images/books.png new file mode 100644 index 0000000..054be51 Binary files /dev/null and b/Frontend images/books.png differ diff --git a/Frontend images/customers.png b/Frontend images/customers.png new file mode 100644 index 0000000..1cc2450 Binary files /dev/null and b/Frontend images/customers.png differ diff --git a/Frontend images/dashboard.png b/Frontend images/dashboard.png new file mode 100644 index 0000000..6ec935f Binary files /dev/null and b/Frontend images/dashboard.png differ diff --git a/Frontend images/dashboard2.png b/Frontend images/dashboard2.png new file mode 100644 index 0000000..80927b6 Binary files /dev/null and b/Frontend images/dashboard2.png differ diff --git a/Frontend images/employee.png b/Frontend images/employee.png new file mode 100644 index 0000000..e72bf49 Binary files /dev/null and b/Frontend images/employee.png differ diff --git a/Frontend images/login.png b/Frontend images/login.png new file mode 100644 index 0000000..765a209 Binary files /dev/null and b/Frontend images/login.png differ diff --git a/Frontend images/orderdetails.png b/Frontend images/orderdetails.png new file mode 100644 index 0000000..3948a14 Binary files /dev/null and b/Frontend images/orderdetails.png differ diff --git a/Frontend images/orders.png b/Frontend images/orders.png new file mode 100644 index 0000000..3209d06 Binary files /dev/null and b/Frontend images/orders.png differ diff --git a/Frontend/e2e/protractor.conf.js b/Frontend/e2e/protractor.conf.js new file mode 100644 index 0000000..ba328a6 --- /dev/null +++ b/Frontend/e2e/protractor.conf.js @@ -0,0 +1,28 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.e2e.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/Frontend/e2e/src/app.e2e-spec.ts b/Frontend/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..2428fd2 --- /dev/null +++ b/Frontend/e2e/src/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { AppPage } from './app.po'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getParagraphText()).toEqual('Welcome to bookstore!'); + }); +}); diff --git a/Frontend/e2e/src/app.po.ts b/Frontend/e2e/src/app.po.ts new file mode 100644 index 0000000..625420f --- /dev/null +++ b/Frontend/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo() { + return browser.get('/'); + } + + getParagraphText() { + return element(by.css('app-root h1')).getText(); + } +} diff --git a/Frontend/e2e/tsconfig.e2e.json b/Frontend/e2e/tsconfig.e2e.json new file mode 100644 index 0000000..43d5b30 --- /dev/null +++ b/Frontend/e2e/tsconfig.e2e.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} \ No newline at end of file diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json new file mode 100644 index 0000000..4374ccc --- /dev/null +++ b/Frontend/package-lock.json @@ -0,0 +1,10636 @@ +{ + "name": "angular-springboot", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/build-optimizer": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.3.2.tgz", + "integrity": "sha512-U0BCZtThq5rUfY08shHXpxe8ZhSsiYB/cJjUvAWRTs/ORrs8pbngS6xwseQws8d/vHoVrtqGD9GU9h8AmFRERQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "source-map": "^0.5.6", + "typescript": "~2.6.2", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "typescript": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.3.2.tgz", + "integrity": "sha512-zABk/iP7YX5SVbmK4e+IX7j2d0D37MQJQiKgWdV3JzfvVJhNJzddiirtT980pIafoq+KyvTgVwXtc+vnux0oeQ==", + "dev": true, + "requires": { + "ajv": "~5.5.1", + "chokidar": "^1.7.0", + "rxjs": "^5.5.6", + "source-map": "^0.5.6" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "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" + } + } + } + }, + "@angular-devkit/schematics": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.3.2.tgz", + "integrity": "sha512-B6zZoqvHaTJy+vVdA6EtlxnCdGMa5elCa4j9lQLC3JI8DLvMXUWkCIPVbPzJ/GSRR9nsKWpvYMYaJyfBDUqfhw==", + "dev": true, + "requires": { + "@ngtools/json-schema": "^1.1.0", + "rxjs": "^5.5.6" + } + }, + "@angular/animations": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.2.tgz", + "integrity": "sha512-VlnsvvTub7MJqKcyllNHyp6LywUOR8z0uQgTxSXDYcQR39onTRTh9/I7qjRGOZTjNucUojRadyYRMInoPYPgZw==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/cli": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.7.4.tgz", + "integrity": "sha512-URdb1QtnQf+Ievy93wjq7gE81s25BkWUwJFPey+YkphBA3G1lbCAQPiEh2pntBwaIKavgEuCw+Sf2YZdgTVhDA==", + "dev": true, + "requires": { + "@angular-devkit/build-optimizer": "0.3.2", + "@angular-devkit/core": "0.3.2", + "@angular-devkit/schematics": "0.3.2", + "@ngtools/json-schema": "1.2.0", + "@ngtools/webpack": "1.10.2", + "@schematics/angular": "0.3.2", + "@schematics/package-update": "0.3.2", + "ajv": "^6.1.1", + "autoprefixer": "^7.2.3", + "cache-loader": "^1.2.0", + "chalk": "~2.2.0", + "circular-dependency-plugin": "^4.2.1", + "clean-css": "^4.1.11", + "common-tags": "^1.3.1", + "copy-webpack-plugin": "~4.4.1", + "core-object": "^3.1.0", + "denodeify": "^1.2.1", + "ember-cli-string-utils": "^1.0.0", + "extract-text-webpack-plugin": "^3.0.2", + "file-loader": "^1.1.5", + "fs-extra": "^4.0.0", + "glob": "^7.0.3", + "html-webpack-plugin": "^2.29.0", + "istanbul-instrumenter-loader": "^3.0.0", + "karma-source-map-support": "^1.2.0", + "less": "^2.7.2", + "less-loader": "^4.0.5", + "license-webpack-plugin": "^1.0.0", + "loader-utils": "1.1.0", + "lodash": "^4.11.1", + "memory-fs": "^0.4.1", + "minimatch": "^3.0.4", + "node-modules-path": "^1.0.0", + "node-sass": "^4.7.2", + "nopt": "^4.0.1", + "opn": "~5.1.0", + "portfinder": "~1.0.12", + "postcss": "^6.0.16", + "postcss-import": "^11.0.0", + "postcss-loader": "^2.0.10", + "postcss-url": "^7.1.2", + "raw-loader": "^0.5.1", + "resolve": "^1.1.7", + "rxjs": "^5.5.6", + "sass-loader": "^6.0.6", + "semver": "^5.1.0", + "silent-error": "^1.0.0", + "source-map-support": "^0.4.1", + "style-loader": "^0.19.1", + "stylus": "^0.54.5", + "stylus-loader": "^3.0.1", + "uglifyjs-webpack-plugin": "^1.1.8", + "url-loader": "^0.6.2", + "webpack": "~3.11.0", + "webpack-dev-middleware": "~1.12.0", + "webpack-dev-server": "~2.11.0", + "webpack-merge": "^4.1.0", + "webpack-sources": "^1.0.0", + "webpack-subresource-integrity": "^1.0.1" + } + }, + "@angular/common": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.2.tgz", + "integrity": "sha512-heon7Bdu6SUw/6ma9wEDxrxBJY2V+NSUv7ZVY7HaXESWvxKUGaser5vQIsWghvBg1injSxyw/3BqGFflua/3sQ==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/compiler": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.2.tgz", + "integrity": "sha512-QkliIJJb9J2y4Y1yiSweP1eOStClOOOj46awVQ5wT+WzyvmIVAccx2u+r5TPRu676GlqrFfn6FD+zV6Zw7G+Tw==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/compiler-cli": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.2.tgz", + "integrity": "sha512-XSojPIMQNvEnYIufTIlrr3GLpr20AUQP0bMzUp4/U/ATWmMWmdNRRG/ys5ncmbgImoAg1nW0hp4bonUSYf9nGQ==", + "dev": true, + "requires": { + "chokidar": "^1.4.2", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "tsickle": "^0.26.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@angular/core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.2.tgz", + "integrity": "sha512-SycTFvlJUHzYvqRYM0DQQUewSo0IPL3Vfo9MOwSJvhS5mXCP1+QW0IIhI8CyWy+40L3dIWlYnn0754z5IJikdg==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/forms": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.2.tgz", + "integrity": "sha512-mvY3p0s7TDfc78tHFID11N1UF+5HZNy26poujOTI2q5m0BgM2JskFaQxWBdLT0OLutqV6NYeaHXUwmqsD4TGVg==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/http": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.2.2.tgz", + "integrity": "sha512-MG7ClwOs9gQgAIjKa6WulUmLyWmKbY8qwX1osVn4cTuGtnpcyTiqruOwrS3DzY6doE8qsu2y5VURt3Ncs0SE6Q==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/language-service": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-5.2.2.tgz", + "integrity": "sha512-i+xaMhi/nBoBPi8NUFCWwgUjq9jGgD5y91nkpaBABs+2E5x7LprL1b2hITmfjo1oMY2kY6L7Sihdwp2JhfCVrA==", + "dev": true + }, + "@angular/platform-browser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.2.tgz", + "integrity": "sha512-jiiEEUiv4oOWtBP96hOnxHOY3ckukfSOaxtw+ENjSPAyv/eRbL1B2LFwIg+HYAFxvK8JOLAYZm3Hg9lpenlBMw==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/platform-browser-dynamic": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.2.tgz", + "integrity": "sha512-PCg63japwHw6zGWGHZEpiDKeqPaCbOKnBl7bhRzE5imL+74toyvmE33sp7OzXKGi0mX5mUymfRsvfLdB6khGTQ==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/router": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.2.tgz", + "integrity": "sha512-Yn71rFMMyIjwairBWGcUFbdiAVuTp7y5yEin8vJK3DAWgTyk0FYfhKHY3r9NofNH9M7Id53WafC02+3SseFBlA==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@clr/angular": { + "version": "0.11.34", + "resolved": "https://registry.npmjs.org/@clr/angular/-/angular-0.11.34.tgz", + "integrity": "sha512-P4MkObHqPkvrvThHf9h6AfSdRXpxkvZvaImnuQBWaRTCObbnS78eRiMeum4XQKJILnIRZYFZTVtBhYCuMJS64w==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@clr/icons": { + "version": "0.11.34", + "resolved": "https://registry.npmjs.org/@clr/icons/-/icons-0.11.34.tgz", + "integrity": "sha512-5NzcaDpM9+X74mcqsY4lr4p6w8TugE6XeymsO2b1wPO1tPWHAqLKJm9vn05+Q2iufG3MGrNNpVz5YbaKRy3AKQ==" + }, + "@clr/ui": { + "version": "0.11.34", + "resolved": "https://registry.npmjs.org/@clr/ui/-/ui-0.11.34.tgz", + "integrity": "sha512-WO7muRcsdPLUQW2uX5g5esIBNDp4NW0NSt4FEW6k2r35ApzJFbtlj0olRxD5oIBdCxV018ZjvkvIZDL82FkGQg==" + }, + "@ngtools/json-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.2.0.tgz", + "integrity": "sha512-pMh+HDc6mOjUO3agRfB1tInimo7hf67u+0Cska2bfXFe6oU7rSMnr5PLVtiZVgwMoBHpx/6XjBymvcnWPo2Uzg==", + "dev": true + }, + "@ngtools/webpack": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.10.2.tgz", + "integrity": "sha512-3u2zg2rarG3qNLSukBClGADWuq/iNn5SQtlSeAbfKzwBeyLGbF0gN1z1tVx1Bcr8YwFzR6NdRePQmJGcoqq1fg==", + "dev": true, + "requires": { + "chalk": "~2.2.0", + "enhanced-resolve": "^3.1.0", + "loader-utils": "^1.0.2", + "magic-string": "^0.22.3", + "semver": "^5.3.0", + "source-map": "^0.5.6", + "tree-kill": "^1.0.0", + "webpack-sources": "^1.1.0" + } + }, + "@schematics/angular": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.3.2.tgz", + "integrity": "sha512-Elrk0BA951s0ScFZU0AWrpUeJBYVR52DZ1QTIO5R0AhwEd1PW4olI8szPLGQlVW5Sd6H0FA/fyFLIvn2r9v6Rw==", + "dev": true, + "requires": { + "typescript": "~2.6.2" + }, + "dependencies": { + "typescript": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", + "dev": true + } + } + }, + "@schematics/package-update": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@schematics/package-update/-/package-update-0.3.2.tgz", + "integrity": "sha512-7aVP4994Hu8vRdTTohXkfGWEwLhrdNP3EZnWyBootm5zshWqlQojUGweZe5zwewsKcixeVOiy2YtW+aI4aGSLA==", + "dev": true, + "requires": { + "rxjs": "^5.5.6", + "semver": "^5.3.0", + "semver-intersect": "^1.1.2" + } + }, + "@swimlane/ngx-charts": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@swimlane/ngx-charts/-/ngx-charts-7.4.0.tgz", + "integrity": "sha512-RcZas49AbHmKCX3PHiEI+VS2dgutfEzw7CvK/LXU1Plp8rMb+ly/zUoRIDJnyzBVuuy1z05miKUK6UolQlCzxQ==", + "requires": { + "d3-array": "^1.2.1", + "d3-brush": "^1.0.4", + "d3-color": "^1.0.3", + "d3-force": "^1.1.0", + "d3-format": "^1.2.0", + "d3-hierarchy": "^1.1.5", + "d3-interpolate": "^1.1.5", + "d3-scale": "^1.0.6", + "d3-selection": "^1.1.0", + "d3-shape": "^1.2.0", + "d3-time-format": "^2.1.0" + } + }, + "@swimlane/ngx-datatable": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@swimlane/ngx-datatable/-/ngx-datatable-11.1.7.tgz", + "integrity": "sha512-TMDN26Q4J+Sh+OPqAx8BK5Q/3hAAmcTAUQ9wvC9nboSOAmYUaHGz8t21yGdeUtRtunIfMpjTnwLa+X2Pfoq42w==" + }, + "@types/node": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.3.0.tgz", + "integrity": "sha512-wNBfvNjzsJl4tswIZKXCFQY0lss9nKUyJnG6T94X/eqjRgI2jHZ4evdjhQYBSan/vGtF6XVXPApOmNH2rf0KKw==", + "dev": true + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", + "dev": true + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "@webcomponents/custom-elements": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.2.3.tgz", + "integrity": "sha512-qRLglUZpJFzXrPkVxWbxz8mv2Yy85jOHaPIHcZKHg3bNty3DOBVd0tbXpmm1372uHeycB+IMEWqMRo01HwMXIw==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "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 + } + } + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "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" + }, + "dependencies": { + "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=", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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.0" + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "app-root-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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" + } + }, + "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==", + "dev": true + }, + "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": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "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=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "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" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": 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": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": 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 + }, + "autoprefixer": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "dev": true, + "requires": { + "browserslist": "^2.11.3", + "caniuse-lite": "^1.0.30000805", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.17", + "postcss-value-parser": "^3.2.3" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "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=", + "dev": true, + "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=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "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" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "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.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "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=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "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.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "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==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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 + } + } + }, + "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==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "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==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "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=", + "dev": true, + "optional": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", + "dev": true + }, + "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-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "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": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "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=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "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=", + "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 + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://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-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.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "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=", + "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" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000792", + "electron-to-chromium": "^1.3.30" + } + }, + "buffer": { + "version": "4.9.1", + "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" + } + }, + "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==", + "dev": true + }, + "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==", + "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 + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "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 + } + } + }, + "cache-loader": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-1.2.5.tgz", + "integrity": "sha512-enWKEQ4kO3YreDFd7AtVRjtJBmNiqh/X9hVDReu0C4qm8gsGmySkwuWtdc+N5O+vq5FzxL1mIZc30NyXCB7o/Q==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "mkdirp": "^0.5.1", + "neo-async": "^2.5.0", + "schema-utils": "^0.4.2" + } + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "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" + } + }, + "caniuse-lite": { + "version": "1.0.30000960", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000960.tgz", + "integrity": "sha512-7nK5qs17icQaX6V3/RYrJkOsZyRNnroA4+ZwxaKJzIKy+crIy0Mz5CBlLySd2SNV+4nbUZeqeNfiaEieUBu3aA==", + "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=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz", + "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "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" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz", + "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==", + "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": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "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 + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "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=", + "dev": true + }, + "codelyzer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.1.0.tgz", + "integrity": "sha512-a3FCIAS3FNQIACvj7KA4iKvH3c6r7X6t6zXsrtV797QGYPQyCwD1fIEd9yV+ZDamijF3YaZ5fbB7QbUMOJGC/g==", + "dev": true, + "requires": { + "app-root-path": "^2.0.1", + "css-selector-tokenizer": "^0.7.0", + "cssauron": "^1.4.0", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.6", + "sprintf-js": "^1.0.3" + } + }, + "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.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "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=", + "dev": true + }, + "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" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "dev": true, + "requires": { + "mime-db": ">= 1.38.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "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==", + "dev": true + }, + "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" + } + }, + "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=", + "dev": true + }, + "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", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.4.3.tgz", + "integrity": "sha512-v4THQ24Tks2NkyOvZuFDgZVfDD9YaA9rwYLZTrWg2GHIA8lrH5DboEyeoorh5Skki+PUbgSmnsCwhMWqYrQZrA==", + "dev": true, + "requires": { + "cacache": "^10.0.1", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" + }, + "dependencies": { + "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.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + }, + "core-object": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", + "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==", + "dev": true, + "requires": { + "chalk": "^2.0.0" + } + }, + "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=", + "dev": true + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" + }, + "dependencies": { + "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.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "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==", + "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": "https://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" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, + "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" + } + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "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" + } + }, + "d3": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", + "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", + "requires": { + "d3-array": "1.2.1", + "d3-axis": "1.0.8", + "d3-brush": "1.0.4", + "d3-chord": "1.0.4", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-dsv": "1.0.8", + "d3-ease": "1.0.3", + "d3-force": "1.1.0", + "d3-format": "1.2.2", + "d3-geo": "1.9.1", + "d3-hierarchy": "1.1.5", + "d3-interpolate": "1.1.6", + "d3-path": "1.0.5", + "d3-polygon": "1.0.3", + "d3-quadtree": "1.0.3", + "d3-queue": "3.0.7", + "d3-random": "1.1.0", + "d3-request": "1.0.6", + "d3-scale": "1.0.7", + "d3-selection": "1.3.0", + "d3-shape": "1.2.0", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1", + "d3-timer": "1.0.7", + "d3-transition": "1.1.1", + "d3-voronoi": "1.1.2", + "d3-zoom": "1.7.1" + }, + "dependencies": { + "d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==" + }, + "d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=" + }, + "d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=" + }, + "d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=" + }, + "d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=" + }, + "d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "d3-format": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==" + }, + "d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=" + }, + "d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=" + }, + "d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=" + }, + "d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==" + }, + "d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==" + }, + "d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==" + }, + "d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + } + } + }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=" + }, + "d3-brush": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.6.tgz", + "integrity": "sha512-lGSiF5SoSqO5/mYGD5FAeGKKS62JdA1EV7HPrU2b5rTX4qEJJtpjaGLJngjnkewQy7UnGstnFd3168wpf5z76w==", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz", + "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==" + }, + "d3-dispatch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz", + "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==" + }, + "d3-drag": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz", + "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-dsv": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", + "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-ease": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.5.tgz", + "integrity": "sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==" + }, + "d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "d3-format": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", + "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" + }, + "d3-geo": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", + "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", + "requires": { + "d3-array": "1" + } + }, + "d3-hierarchy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", + "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==" + }, + "d3-interpolate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", + "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", + "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==" + }, + "d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=" + }, + "d3-quadtree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.6.tgz", + "integrity": "sha512-NUgeo9G+ENQCQ1LsRr2qJg3MQ4DJvxcDNCiohdJGHt5gRhBW6orIB5m5FJ9kK3HNL8g9F4ERVoBzcEwQBfXWVA==" + }, + "d3-queue": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=" + }, + "d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=" + }, + "d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-dsv": "1", + "xmlhttprequest": "1" + } + }, + "d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-selection": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.0.tgz", + "integrity": "sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==" + }, + "d3-shape": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.5.tgz", + "integrity": "sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.11.tgz", + "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw==" + }, + "d3-time-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz", + "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==", + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz", + "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==" + }, + "d3-transition": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.0.tgz", + "integrity": "sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==", + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=" + }, + "d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "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=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "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==", + "dev": true, + "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==", + "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.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "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" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "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" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "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=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://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" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "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 + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "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=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.124", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.124.tgz", + "integrity": "sha512-glecGr/kFdfeXUHOHAWvGcXrxNU+1wSO/t5B23tT1dtlvYB26GY8aHzZSWD7HqhqC800Lr+w/hQul6C5AF542w==", + "dev": true + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "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" + } + }, + "ember-cli-string-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "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" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.49", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", + "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "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" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "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=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.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 + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": ">=0.0.5" + } + }, + "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" + }, + "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=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "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=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "dev": true, + "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=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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": { + "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": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "dev": true, + "requires": { + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "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" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "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=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "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" + } + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" + } + }, + "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-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==", + "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" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "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" + } + }, + "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=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.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=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "dev": true, + "requires": { + "debug": "^3.2.6" + }, + "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 + } + } + }, + "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" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "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" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "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=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", + "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "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" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "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" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "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" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": 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" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "optional": true, + "requires": { + "globule": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "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 + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "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" + } + }, + "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" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^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==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "optional": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "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==", + "dev": true + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + } + } + }, + "has": { + "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.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=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "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-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "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": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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": { + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "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": { + "parse-passwd": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "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 + } + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "^3.4.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "toposort": "^1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "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-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==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "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=", + "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.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.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.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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.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.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "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 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "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==", + "dev": true, + "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=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "^3.3.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.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=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "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.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "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-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.0.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.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "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=", + "dev": true, + "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=", + "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=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.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=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "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=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "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=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "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-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-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "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" + } + }, + "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", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "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 + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "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" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-instrumenter-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", + "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", + "dev": true, + "requires": { + "convert-source-map": "^1.5.0", + "istanbul-lib-instrument": "^1.7.3", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "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" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true, + "optional": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "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", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "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=", + "dev": true, + "optional": 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", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + }, + "dependencies": { + "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 + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "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.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "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" + } + }, + "less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "dev": true, + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + } + }, + "less-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" + } + }, + "license-webpack-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-Of/H79rZqm2aeg4RnP9SMSh19qkKemoLT5VaJV58uH5AxeYWEcBgGFs753JEJ/Hm6BPvQVfIlrrjoBwYj8p7Tw==", + "dev": true, + "requires": { + "ejs": "^2.5.7" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "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" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "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==", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "optional": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "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==", + "dev": true, + "optional": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^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=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "^0.2.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": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "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.0" + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.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=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "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" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "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" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, + "requires": { + "mime-db": "~1.38.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==", + "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==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "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" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "^0.1.3", + "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=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "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=", + "dev": true + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "dev": true, + "optional": true + }, + "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.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.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=", + "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 + } + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "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==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "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" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "optional": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + }, + "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=", + "dev": true, + "optional": true + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "optional": true + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "optional": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true, + "optional": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "optional": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "optional": 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" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "node-libs-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "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=", + "dev": true + } + } + }, + "node-modules-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.2.tgz", + "integrity": "sha512-6Gbjq+d7uhkO7epaKi5DNgUJn7H0gEyA4Jg0Mo1uQOi3Rk50G83LtmhhFyw0LxnAFhtlspkiiw52ISP13qzcBg==", + "dev": true + }, + "node-sass": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", + "dev": true, + "optional": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + }, + "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=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": 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" + } + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "optional": true + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "optional": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true, + "optional": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "optional": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "optional": 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" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "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==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "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=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "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.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "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": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "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=", + "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 + } + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.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==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "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-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "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=", + "dev": true, + "requires": { + "p-limit": "^1.1.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==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "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", + "safe-buffer": "^5.1.1" + } + }, + "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" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "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": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "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==", + "dev": true + }, + "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=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "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" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "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 + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.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==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "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 + }, + "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" + } + } + } + }, + "postcss-import": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz", + "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==", + "dev": true, + "requires": { + "postcss": "^6.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "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==", + "dev": true, + "requires": { + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", + "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^0.4.0" + } + }, + "postcss-url": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.2.tgz", + "integrity": "sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA==", + "dev": true, + "requires": { + "mime": "^1.4.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.0", + "postcss": "^6.0.1", + "xxhashjs": "^0.2.1" + } + }, + "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==", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "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==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "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==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "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", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "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.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "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==", + "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 + } + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "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" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "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==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "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=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "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==", + "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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.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 + }, + "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.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.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.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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.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.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "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=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "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=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "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=", + "dev": true + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "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==", + "dev": true + }, + "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=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "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=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "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 + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "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==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "requires": { + "symbol-observable": "1.0.1" + } + }, + "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==", + "dev": 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.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + } + }, + "sass-loader": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", + "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", + "dev": true, + "requires": { + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "optional": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "dev": true, + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, + "requires": { + "semver": "^5.0.0" + } + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "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.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "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=", + "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.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://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" + } + }, + "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==", + "dev": true, + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.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==", + "dev": true + } + } + }, + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "silent-error": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.1.tgz", + "integrity": "sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw==", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "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.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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.0" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", + "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "dev": true, + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "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==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "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.1", + "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==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "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 + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "dev": true + }, + "spdy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "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": { + "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 + } + } + }, + "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==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "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": { + "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 + }, + "readable-stream": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.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.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "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": { + "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=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "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==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true, + "optional": true + }, + "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" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "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=", + "dev": true + }, + "style-loader": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz", + "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "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" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } + } + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "1.7.x", + "debug": "*", + "glob": "7.0.x", + "mkdirp": "0.5.x", + "sax": "0.5.x", + "source-map": "0.1.x" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "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" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + } + }, + "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" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + }, + "tapable": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "optional": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "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==", + "dev": true + }, + "time-stamp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", + "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "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=", + "dev": true + }, + "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.0.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==", + "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.0.2" + } + } + } + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "optional": true, + "requires": { + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + } + } + }, + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.2" + } + }, + "ts-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ts-helpers/-/ts-helpers-1.1.2.tgz", + "integrity": "sha1-/Gm+nx87rtAfsaDvjUz+dIgU2DU=" + }, + "ts-node": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-4.1.0.tgz", + "integrity": "sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg==", + "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.0", + "tsconfig": "^7.0.0", + "v8flags": "^3.0.0", + "yn": "^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==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "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 + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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" + } + } + } + }, + "tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "requires": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tsickle": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.26.0.tgz", + "integrity": "sha512-eWJ2CUfttGK0LqF9iJ/Avnxbj4M+fCyJ50Zag3wm73Fut1hsasPRHKxKdrMWVj4BMHnQNx7TO+DdNmLmJTSuNw==", + "dev": true, + "requires": { + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map": "^0.5.6", + "source-map-support": "^0.4.2" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tslint": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", + "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" + }, + "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==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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" + } + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "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" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "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-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=", + "dev": true, + "optional": true + }, + "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==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "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-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" + } + } + } + }, + "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": { + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "dev": true, + "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==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "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.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "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 + } + } + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "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 + } + } + }, + "url-loader": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", + "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "mime": "^1.4.1", + "schema-utils": "^0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "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" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } + } + }, + "url-parse": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", + "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", + "dev": true, + "requires": { + "querystringify": "^2.0.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==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "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=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "v8flags": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz", + "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^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.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.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.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "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.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.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.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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.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.0" + } + } + } + }, + "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.0" + }, + "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.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", + "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "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=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "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" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "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=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "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" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "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" + } + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^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": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "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=", + "dev": true + } + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz", + "integrity": "sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "^3.0.3", + "bonjour": "^3.5.0", + "chokidar": "^2.1.2", + "compression": "^1.7.3", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "^0.19.1", + "import-local": "^1.0.0", + "internal-ip": "1.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.5", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.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.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.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.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "chokidar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "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.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "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.0" + } + }, + "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.0" + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.0.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.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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.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.0" + } + } + } + }, + "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.0" + }, + "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.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 + }, + "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.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "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" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, + "requires": { + "source-list-map": "^2.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==", + "dev": true + } + } + }, + "webpack-subresource-integrity": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.3.2.tgz", + "integrity": "sha512-VpBtk0Ha1W0GebTzPj3Y8UqbmPDp+HqGlegRv+hS8g8/x818dw9NuEfJEOp5CF6zTPs3KF6aqknVu52Bh5h1eQ==", + "dev": true, + "requires": { + "webpack-sources": "^1.3.0" + } + }, + "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 + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "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" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "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": "^1.0.2 || 2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "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==", + "dev": true, + "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=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, + "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==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true, + "optional": true + } + } + }, + "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=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.20.tgz", + "integrity": "sha512-FXlA37ErSXCMy5RNBcGFgCI/Zivqzr0D19GuvDxhcYIJc7xkFp6c29DKyODJu0Zo+EMyur/WPPgcBh1EHjB9jA==" + } + } +} diff --git a/Frontend/package.json b/Frontend/package.json new file mode 100644 index 0000000..8883bb4 --- /dev/null +++ b/Frontend/package.json @@ -0,0 +1,46 @@ +{ + "name": "angular-springboot", + "version": "0.0.0", + "license": "MIT", + "scripts": { + "ng": "ng", + "start": "ng serve --aot", + "build": "ng build --prod", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "5.2.2", + "@angular/common": "5.2.2", + "@angular/compiler": "5.2.2", + "@angular/core": "5.2.2", + "@angular/forms": "5.2.2", + "@angular/http": "5.2.2", + "@angular/platform-browser": "5.2.2", + "@angular/platform-browser-dynamic": "5.2.2", + "@angular/router": "5.2.2", + "@clr/angular": "^0.11.2-patch", + "@clr/icons": "^0.11.2-patch", + "@clr/ui": "^0.11.2-patch", + "@swimlane/ngx-charts": "^7.0.1", + "@swimlane/ngx-datatable": "11.1.7", + "@webcomponents/custom-elements": "^1.0.8", + "core-js": "^2.5.3", + "d3": "^4.12.0", + "rxjs": "^5.5.6", + "ts-helpers": "^1.1.2", + "zone.js": "0.8.20" + }, + "devDependencies": { + "@angular/cli": "^1.6.6", + "@angular/compiler-cli": "5.2.2", + "@angular/language-service": "5.2.2", + "@types/node": "~9.3.0", + "codelyzer": "~4.1.0", + "ts-node": "4.1.0", + "tslint": "5.9.1", + "typescript": "^2.6.2" + } +} diff --git a/Frontend/src/app/app-config.ts b/Frontend/src/app/app-config.ts new file mode 100644 index 0000000..e706214 --- /dev/null +++ b/Frontend/src/app/app-config.ts @@ -0,0 +1,45 @@ +import { Injectable } from "@angular/core"; + + +@Injectable() +export class AppConfig { + + public version: string = "1.0.0"; + public locale: string = "en-US"; + public currencyFormat = { style: "currency", currency: "USD" }; + public dateFormat = { year: "numeric", month: "short", day: "numeric" }; + + public apiPort: string = "8080"; + public apiProtocol: string; + public apiHostName: string; + public baseApiPath: string; + + constructor() { + if (this.apiProtocol === undefined) { + this.apiProtocol = window.location.protocol; + } + if (this.apiHostName === undefined) { + this.apiHostName = window.location.hostname; + } + if (this.apiPort === undefined) { + this.apiPort = window.location.port; + } + if ( + this.apiHostName.includes("infomud") || + this.apiHostName.includes("heroku") + ) { + this.baseApiPath = this.apiProtocol + "//" + this.apiHostName + "/"; + } else { + this.baseApiPath = + this.apiProtocol + + "//" + + this.apiHostName + + ":" + + this.apiPort + + "/"; + } + if (this.locale === undefined) { + this.locale = navigator.language; + } + } +} diff --git a/Frontend/src/app/app-routing.module.ts b/Frontend/src/app/app-routing.module.ts new file mode 100644 index 0000000..d914588 --- /dev/null +++ b/Frontend/src/app/app-routing.module.ts @@ -0,0 +1,53 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { HomeComponent } from './home.component'; +import { LoginComponent } from './pages/login/login.component'; +import { LogoutComponent } from './pages/logout/logout.component'; +import { DashboardComponent } from './pages/dashboard/dashboard.component'; +import { BookStatsComponent } from './pages/book_stats/book_stats.component'; +import { OrderStatsComponent } from './pages/order_stats/order_stats.component'; +import { BooksComponent } from './pages/books/books.component'; +import { CustomersComponent } from './pages/customers/customers.component'; +import { OrdersComponent } from './pages/orders/orders.component'; +import { OrderDetailsComponent } from './pages/order_details/order_details.component'; +import { EmployeesComponent } from './pages/employees/employees.component'; + +import { AuthGuard } from './services/auth_guard.service'; +import { PageNotFoundComponent } from './pages/404/page-not-found.component'; + +export const routes: Routes = [ + { path: '', redirectTo: '/home/dashboard/order', pathMatch: 'full' }, + { + path: 'home', + component: HomeComponent, + canActivate:[AuthGuard], + children:[ + { path: '', redirectTo: '/home/dashboard/order', pathMatch: 'full', data:[{selectedHeaderItemIndex:1, selectedSubNavItemIndex:-1}] }, // Default path (if no deep path is specified for home component like webui/home then it will by default show BooksComponent ) + { + path : 'dashboard', + component: DashboardComponent, + data : [{selectedHeaderItemIndex:0, selectedSubNavItemIndex:-1}], + children :[ + { path: '' , redirectTo: '/home/dashboard/order', pathMatch: 'full'}, + { path: 'order' , component: OrderStatsComponent , data:[{selectedHeaderItemIndex:0, selectedSubNavItemIndex:0}] }, + { path: 'book' , component: BookStatsComponent , data:[{selectedHeaderItemIndex:0, selectedSubNavItemIndex:1}] } + ] + }, + { path:'orders' , component: OrdersComponent , data:[{selectedHeaderItemIndex:1, selectedSubNavItemIndex:-1}] }, + { path:'orders/:id', component: OrderDetailsComponent, data:[{selectedHeaderItemIndex:1, selectedSubNavItemIndex:-1}] }, + { path:'books' , component: BooksComponent , data:[{selectedHeaderItemIndex:2, selectedSubNavItemIndex:-1}] }, + { path:'customers' , component: CustomersComponent , data:[{selectedHeaderItemIndex:3, selectedSubNavItemIndex:-1}] }, + { path:'employees' , component: EmployeesComponent , data:[{selectedHeaderItemIndex:4, selectedSubNavItemIndex:-1}] }, + ] + }, + { path: 'login' , component: LoginComponent , data:[{selectedHeaderItemIndex:-1, selectedSubNavItemIndex:-1}] }, + { path: 'logout', component: LogoutComponent , data:[{selectedHeaderItemIndex:-1, selectedSubNavItemIndex:-1}] }, + { path: '**' , component: PageNotFoundComponent, data:[{selectedHeaderItemIndex:-1, selectedSubNavItemIndex:-1}] } + +]; +@NgModule({ + imports: [ RouterModule.forRoot(routes, {useHash:true} )], + exports: [ RouterModule ], + declarations:[PageNotFoundComponent] +}) +export class AppRoutingModule {} diff --git a/Frontend/src/app/app.component.ts b/Frontend/src/app/app.component.ts new file mode 100644 index 0000000..8ee5479 --- /dev/null +++ b/Frontend/src/app/app.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; +@Component({ + selector : 'app-root', + template : `` +}) + +export class AppComponent { + +} diff --git a/Frontend/src/app/app.module.ts b/Frontend/src/app/app.module.ts new file mode 100644 index 0000000..a4e977f --- /dev/null +++ b/Frontend/src/app/app.module.ts @@ -0,0 +1,107 @@ + +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import { NgModule } from '@angular/core'; +import { HttpClientModule } from '@angular/common/http'; +import { RouterModule } from '@angular/router'; +import { FormsModule, ReactiveFormsModule} from '@angular/forms'; +import { NgxDatatableModule } from '@swimlane/ngx-datatable'; +import { NgxChartsModule } from '@swimlane/ngx-charts'; +import { ClarityModule } from '@clr/angular'; +import { AppRoutingModule } from './app-routing.module'; +import { TrackScrollDirective } from './directives/track_scroll/track_scroll.directive'; + + + +import { BadgeComponent } from './components/badge/badge.component'; +import { LegendComponent } from './components/legend/legend.component'; +import { LogoComponent } from './components/logo/logo.component'; + + +import { AppComponent } from './app.component'; +import { HomeComponent } from './home.component'; +import { LoginComponent } from './pages/login/login.component'; +import { LogoutComponent } from './pages/logout/logout.component'; +import { DashboardComponent } from './pages/dashboard/dashboard.component'; +import { OrderStatsComponent } from './pages/order_stats/order_stats.component'; +import { BookStatsComponent } from './pages/book_stats/book_stats.component'; +import { BooksComponent } from './pages/books/books.component'; +import { CustomersComponent } from './pages/customers/customers.component'; +import { OrdersComponent } from './pages/orders/orders.component'; +import { OrderDetailsComponent } from './pages/order_details/order_details.component'; +import { EmployeesComponent } from './pages/employees/employees.component'; + + +import { AppConfig } from './app-config'; +import { UserInfoService } from './services/user-info.service'; +import { AuthGuard } from './services/auth_guard.service'; +import { ApiRequestService} from './services/api/api-request.service'; +import { TranslateService } from './services/api/translate.service'; +import { LoginService } from './services/api/login.service'; +import { OrderService } from './services/api/order.service'; +import { BookService } from './services/api/book.service'; +import { CustomerService } from './services/api/customer.service'; +import { EmployeeService } from './services/api/employee.service'; + + +@NgModule({ + + imports: [ + BrowserModule, + BrowserAnimationsModule, + FormsModule, + ReactiveFormsModule, + HttpClientModule, + + + NgxDatatableModule, + NgxChartsModule, + ClarityModule.forChild(), + + + AppRoutingModule + + + ], + + declarations: [ + + BadgeComponent, + LegendComponent, + LogoComponent, + + + AppComponent, + HomeComponent, + LoginComponent, + LogoutComponent, + DashboardComponent, + BookStatsComponent, + OrderStatsComponent, + BooksComponent, + EmployeesComponent, + CustomersComponent, + OrdersComponent, + OrderDetailsComponent, + + + TrackScrollDirective + ], + + providers:[ + AuthGuard, + UserInfoService, + TranslateService, + ApiRequestService, + LoginService, + OrderService, + BookService, + CustomerService, + EmployeeService, + AppConfig, + ], + + bootstrap: [AppComponent] +}) + +export class AppModule { } diff --git a/Frontend/src/app/components/badge/badge.component.ts b/Frontend/src/app/components/badge/badge.component.ts new file mode 100644 index 0000000..81ab6f5 --- /dev/null +++ b/Frontend/src/app/components/badge/badge.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit, Input } from '@angular/core'; +@Component({ + selector: 's-badge', + template: `{{text}}` +}) + +export class BadgeComponent implements OnInit { + @Input() public text:string; + @Input() public badgeCls:string; + + constructor() { } + + ngOnInit() { + + } +} diff --git a/Frontend/src/app/components/legend/legend.component.ts b/Frontend/src/app/components/legend/legend.component.ts new file mode 100644 index 0000000..23cb27e --- /dev/null +++ b/Frontend/src/app/components/legend/legend.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit, Input } from '@angular/core'; + +@Component({ + selector : 's-legend', + styleUrls: [ './legend.scss'], + template : ` +
+
+
+
+
{{l.value}}
+
{{l.name}}
+
+
+
+ ` +}) + +export class LegendComponent{ + @Input() legend:any[]; +} diff --git a/Frontend/src/app/components/legend/legend.scss b/Frontend/src/app/components/legend/legend.scss new file mode 100644 index 0000000..d34619c --- /dev/null +++ b/Frontend/src/app/components/legend/legend.scss @@ -0,0 +1,28 @@ +@import '../../../assets/scss/var'; +.s-legend-wrap{ + display:flex; + flex-direction: row; + margin:5px 0; + .s-legend-item{ + display:flex; + flex-direction: row; + height:32px; + margin-right:20px; + align-items:stretch; + .s-legend-color{ + width:5px; + } + .s-legend-value-wrap{ + margin:0px 3px; + } + .s-legend-label{ + font-size:12px; + height:14px; + line-height: 15px; + } + .s-legend-value{ + font-size:18px; + height:18px; + } + } +} diff --git a/Frontend/src/app/components/logo/logo.component.html b/Frontend/src/app/components/logo/logo.component.html new file mode 100644 index 0000000..45b8b3d --- /dev/null +++ b/Frontend/src/app/components/logo/logo.component.html @@ -0,0 +1 @@ + diff --git a/Frontend/src/app/components/logo/logo.component.ts b/Frontend/src/app/components/logo/logo.component.ts new file mode 100644 index 0000000..35de763 --- /dev/null +++ b/Frontend/src/app/components/logo/logo.component.ts @@ -0,0 +1,10 @@ +import { Component, Input } from '@angular/core'; +@Component({ + selector: 's-logo', + templateUrl: './logo.component.html' +}) + +export class LogoComponent{ + @Input() fontColor = "#63666A"; + @Input() public iconColor: string = "#E3642B"; +} diff --git a/Frontend/src/app/directives/track_scroll/track_scroll.directive.ts b/Frontend/src/app/directives/track_scroll/track_scroll.directive.ts new file mode 100644 index 0000000..d0f01f1 --- /dev/null +++ b/Frontend/src/app/directives/track_scroll/track_scroll.directive.ts @@ -0,0 +1,21 @@ +import { Directive, OnInit, Input, Output, HostListener, EventEmitter, ElementRef ,Inject, Injectable} from '@angular/core'; +import { DOCUMENT } from '@angular/common'; + +@Directive({ selector: '[trackScroll]' }) + +export class TrackScrollDirective { + @Output() bottom = new EventEmitter(); + constructor(@Inject(DOCUMENT) private document: Document) {} + + @HostListener('document:scroll', []) + public track() { + /* + if (document.body.scrollHeight == window.scrollY + window.innerHeight) { + this.bottom.emit(true); + } + */ + if (Math.abs(document.body.scrollHeight - (window.scrollY + window.innerHeight)) <= 100){ + this.bottom.emit(true); + } + } +} diff --git a/Frontend/src/app/home.component.html b/Frontend/src/app/home.component.html new file mode 100644 index 0000000..64c595d --- /dev/null +++ b/Frontend/src/app/home.component.html @@ -0,0 +1,42 @@ +
+ + +
+ +
+
+ Alert Type: Info +
+
+ +
+
+
+ + +
+
+
+ Bookstore +
+ +
+ + +
+
+ + + + +
diff --git a/Frontend/src/app/home.component.ts b/Frontend/src/app/home.component.ts new file mode 100644 index 0000000..75f67b9 --- /dev/null +++ b/Frontend/src/app/home.component.ts @@ -0,0 +1,77 @@ +import { Component, ViewEncapsulation, ViewChild, OnInit } from "@angular/core"; +import { Router, ActivatedRoute, NavigationEnd } from "@angular/router"; + +import { LogoComponent } from "./components/logo/logo.component"; +import { LoginService } from "./services/api/login.service"; +import { UserInfoService } from "./services/user-info.service"; + +import "rxjs/add/operator/filter"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/mergeMap"; +import "rxjs/add/operator/switchMap"; +import { Subscription } from "rxjs/Subscription"; +import { Observable } from "rxjs/Observable"; +import { Observer } from "rxjs/Observer"; + +@Component({ + selector: "home-comp", + templateUrl: "./home.component.html", + styleUrls: ["./home.scss"], + encapsulation: ViewEncapsulation.None +}) +export class HomeComponent { + public showAppAlert: boolean = false; + public appHeaderItems = [ + { + label: "Dashboard", + href: "/home/dashboard", + subNav: [ + { label: "Order Stats", href: "/home/dashboard/order" }, + { label: "Book Stats", href: "/home/dashboard/book" } + ] + }, + { label: "Orders", href: "/home/orders", subNav: [] }, + { label: "Books", href: "/home/books", subNav: [] }, + { label: "Customers", href: "/home/customers", subNav: [] }, + { label: "Employees", href: "/home/employees", subNav: [] } + ]; + + public selectedHeaderItemIndex: number = 0; + public selectedSubNavItemIndex: number = 1; + public userName: string = ""; + + constructor( + private router: Router, + private activeRoute: ActivatedRoute, + private loginService: LoginService, + private userInfoService: UserInfoService + ) { + + router.events + .filter(event => event instanceof NavigationEnd) + .map(_ => this.router.routerState.root) + .map(route => { + while (route.firstChild) route = route.firstChild; + return route; + }) + .mergeMap(route => route.data) + .subscribe(data => { + console.log("Route data===: ", data[0]); + this.selectedHeaderItemIndex = data[0] + ? data[0].selectedHeaderItemIndex + : -1; + this.selectedSubNavItemIndex = data[0] + ? data[0].selectedSubNavItemIndex + : -1; + }); + //this.userName = this.userInfoService.getUserName(); + } + + navbarSelectionChange(val) { + // console.log(val); + } + + closeAppAlert() { + this.showAppAlert = false; + } +} diff --git a/Frontend/src/app/home.scss b/Frontend/src/app/home.scss new file mode 100644 index 0000000..2d3eebf --- /dev/null +++ b/Frontend/src/app/home.scss @@ -0,0 +1 @@ +@import '../assets/scss/var'; diff --git a/Frontend/src/app/pages/404/page-not-found.component.html b/Frontend/src/app/pages/404/page-not-found.component.html new file mode 100644 index 0000000..57e237d --- /dev/null +++ b/Frontend/src/app/pages/404/page-not-found.component.html @@ -0,0 +1 @@ +
404 Page Not Found
diff --git a/Frontend/src/app/pages/404/page-not-found.component.ts b/Frontend/src/app/pages/404/page-not-found.component.ts new file mode 100644 index 0000000..bdc0aaa --- /dev/null +++ b/Frontend/src/app/pages/404/page-not-found.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { ActivatedRoute, Router} from '@angular/router'; + +@Component({ + selector: 'page-not-found', + templateUrl: './page-not-found.component.html', + styleUrls: [ './page-not-found.scss'], +}) + +export class PageNotFoundComponent { + constructor(private router: Router, private activatedRoute: ActivatedRoute){ + console.log("404 : %s",router.url) + } + +} diff --git a/Frontend/src/app/pages/404/page-not-found.scss b/Frontend/src/app/pages/404/page-not-found.scss new file mode 100644 index 0000000..4d5ad22 --- /dev/null +++ b/Frontend/src/app/pages/404/page-not-found.scss @@ -0,0 +1,14 @@ +@import '../../../assets/scss/var'; +.s-page-not-found { + position: fixed; + top:0; + left:0; + width:100%; + height:60px; + display:flex; + align-items: center; + padding:15px; + background-color: $s-c-primary ; + color:$s-c-inverse-text; + font-size: $s-f-medium-size; +} diff --git a/Frontend/src/app/pages/book_stats/book_stats.component.html b/Frontend/src/app/pages/book_stats/book_stats.component.html new file mode 100644 index 0000000..1e0f545 --- /dev/null +++ b/Frontend/src/app/pages/book_stats/book_stats.component.html @@ -0,0 +1,20 @@ +
+ +
+

Products By Quantity Ordered

+ + +
+ +
diff --git a/Frontend/src/app/pages/book_stats/book_stats.component.ts b/Frontend/src/app/pages/book_stats/book_stats.component.ts new file mode 100644 index 0000000..59e0197 --- /dev/null +++ b/Frontend/src/app/pages/book_stats/book_stats.component.ts @@ -0,0 +1,34 @@ +import { Component, OnInit } from "@angular/core"; +import { BookService } from "../../services/api/book.service"; +import { Router } from "@angular/router"; +import { NgxChartsModule } from "@swimlane/ngx-charts"; + +@Component({ + selector: "s-book_stats-pg", + templateUrl: "./book_stats.component.html", + styleUrls: ["./book_stats.scss"] +}) +export class BookStatsComponent { + public bookByQuantityData = []; + public barColorScheme = { domain: ["#007cbb"] }; + + constructor( + private router: Router, + private bookService: BookService + ) {} + ngOnInit() { + var me = this; + this.getPageData(); + } + + getPageData() { + var me = this; + me.bookService + .getBookStatsByQuantityOrdered() + .subscribe(function(countryData) { + console.log(countryData); + me.bookByQuantityData = countryData.items; + console.log("Received Orders By Country"); + }); + } +} diff --git a/Frontend/src/app/pages/book_stats/book_stats.scss b/Frontend/src/app/pages/book_stats/book_stats.scss new file mode 100644 index 0000000..c361af6 --- /dev/null +++ b/Frontend/src/app/pages/book_stats/book_stats.scss @@ -0,0 +1,16 @@ +@import '../../../assets/scss/var'; +h4{margin-top: 16px;} +.s-product-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } +} diff --git a/Frontend/src/app/pages/books/books.component.html b/Frontend/src/app/pages/books/books.component.html new file mode 100644 index 0000000..1ebab13 --- /dev/null +++ b/Frontend/src/app/pages/books/books.component.html @@ -0,0 +1,21 @@ +
+ + + +
+ +
+ + +
+
+ + diff --git a/Frontend/src/app/pages/books/books.component.ts b/Frontend/src/app/pages/books/books.component.ts new file mode 100644 index 0000000..bfd61b1 --- /dev/null +++ b/Frontend/src/app/pages/books/books.component.ts @@ -0,0 +1,49 @@ +import { Component, OnInit, TemplateRef, ViewChild } from "@angular/core"; +import { BookService } from "../../services/api/book.service"; +import { Router } from "@angular/router"; + +@Component({ + selector: "s-books-pg", + templateUrl: "./books.component.html", + styleUrls: ["./books.scss"] +}) +export class BooksComponent implements OnInit { + @ViewChild("bookDiscontinuedTpl") bookDiscontinuedTpl: TemplateRef< + any + >; + + //ngx-Datatable Variables + columns: any[]; + rows: any[]; + + constructor( + private router: Router, + private bookService: BookService + ) {} + ngOnInit() { + var me = this; + me.getPolicyData(); + this.columns = [ + { prop: "bookCode", name: "Code", width: 60 }, + { prop: "bookName", name: "Name", width: 200 }, + { prop: "standardCost", name: "Standard Cost", width: 100 }, + { prop: "listPrice", name: "List Price", width: 100 }, + { prop: "category", name: "Category", width: 100 }, + { prop: "targetLevel", name: "Target Level", width: 100 }, + { prop: "reorderLevel", name: "Reorder Level", width: 100 }, + { prop: "minimumReorderQuantity", name: "Min Order", width: 100 }, + { + prop: "discontinued", + name: "Discontinued", + width: 90, + cellTemplate: this.bookDiscontinuedTpl + } + ]; + } + + getPolicyData() { + this.bookService.getBooks().subscribe(policyData => { + this.rows = policyData; + }); + } +} diff --git a/Frontend/src/app/pages/books/books.scss b/Frontend/src/app/pages/books/books.scss new file mode 100644 index 0000000..56b34cb --- /dev/null +++ b/Frontend/src/app/pages/books/books.scss @@ -0,0 +1,4 @@ +@import '../../../assets/scss/var'; + + + diff --git a/Frontend/src/app/pages/customers/customers.component.html b/Frontend/src/app/pages/customers/customers.component.html new file mode 100644 index 0000000..136489c --- /dev/null +++ b/Frontend/src/app/pages/customers/customers.component.html @@ -0,0 +1,17 @@ +
+ + + + +
Loading...
+
diff --git a/Frontend/src/app/pages/customers/customers.component.ts b/Frontend/src/app/pages/customers/customers.component.ts new file mode 100644 index 0000000..a3e82b0 --- /dev/null +++ b/Frontend/src/app/pages/customers/customers.component.ts @@ -0,0 +1,63 @@ +import { Component, OnInit,TemplateRef, ViewChild,HostListener } from '@angular/core'; +import { Router } from '@angular/router'; +import { CustomerService } from '../../services/api/customer.service'; + +@Component({ + selector: 's-customers-pg', + templateUrl: './customers.component.html', + styleUrls: [ './customers.scss'], +}) + +export class CustomersComponent implements OnInit { + + columns:any[]; + rows:any[]; + pageSize:number=10; + currentPage:number=0; + isLastPageLoaded:boolean=false; + isLoading:boolean=false; + + constructor(private router: Router, private customerService: CustomerService) { } + + ngOnInit() { + let me = this; + me.getPageData(); + + this.columns=[ + {prop:"id" , name: "ID" , width:50 }, + {prop:"firstName", name: "First Name" , width:120 }, + {prop:"lastName" , name: "Last Name" , width:120 }, + {prop:"company" , name: "Company" , width:120 }, + {prop:"email" , name: "Email" , width:200 }, + {prop:"phone" , name: "Phone" , width:160 }, + {prop:"address" , name: "Address" , width:220 }, + ]; + } + + getPageData(isAppend:boolean=false) { + + if (this.isLastPageLoaded===false){ + let me = this; + me.isLoading=true; + this.customerService.getCustomers(this.currentPage,this.pageSize).subscribe((data) => { + me.isLastPageLoaded=data.last; + me.currentPage = data.currentPageNumber+1; + if (isAppend===true){ + me.rows = me.rows.concat(data.items); + } + else{ + me.rows = data.items; + } + me.isLoading=false; + }); + } + } + + onScroll() { + console.log("bottom") + if (this.isLoading===false){ + this.getPageData(true); + } + } + +} diff --git a/Frontend/src/app/pages/customers/customers.scss b/Frontend/src/app/pages/customers/customers.scss new file mode 100644 index 0000000..56b34cb --- /dev/null +++ b/Frontend/src/app/pages/customers/customers.scss @@ -0,0 +1,4 @@ +@import '../../../assets/scss/var'; + + + diff --git a/Frontend/src/app/pages/dashboard/dashboard.component.html b/Frontend/src/app/pages/dashboard/dashboard.component.html new file mode 100644 index 0000000..6c46b1d --- /dev/null +++ b/Frontend/src/app/pages/dashboard/dashboard.component.html @@ -0,0 +1 @@ + diff --git a/Frontend/src/app/pages/dashboard/dashboard.component.ts b/Frontend/src/app/pages/dashboard/dashboard.component.ts new file mode 100644 index 0000000..edb0cb5 --- /dev/null +++ b/Frontend/src/app/pages/dashboard/dashboard.component.ts @@ -0,0 +1,11 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 's-dashboard-pg', + templateUrl: './dashboard.component.html', + styleUrls: [ './dashboard.scss'], +}) + +export class DashboardComponent { + constructor( ) { } +} diff --git a/Frontend/src/app/pages/dashboard/dashboard.scss b/Frontend/src/app/pages/dashboard/dashboard.scss new file mode 100644 index 0000000..053a99a --- /dev/null +++ b/Frontend/src/app/pages/dashboard/dashboard.scss @@ -0,0 +1,16 @@ +@import '../../../assets/scss/var'; +.s-dashboard-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } +} + diff --git a/Frontend/src/app/pages/employees/employees.component.html b/Frontend/src/app/pages/employees/employees.component.html new file mode 100644 index 0000000..e3bb3ba --- /dev/null +++ b/Frontend/src/app/pages/employees/employees.component.html @@ -0,0 +1,13 @@ +
+ + + +
diff --git a/Frontend/src/app/pages/employees/employees.component.ts b/Frontend/src/app/pages/employees/employees.component.ts new file mode 100644 index 0000000..cf22a8f --- /dev/null +++ b/Frontend/src/app/pages/employees/employees.component.ts @@ -0,0 +1,40 @@ +import { Component, OnInit,TemplateRef, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { EmployeeService } from '../../services/api/employee.service'; + + +@Component({ + selector : 's-employees-pg', + templateUrl: './employees.component.html', + styleUrls : [ './employees.scss'], +}) + +export class EmployeesComponent implements OnInit { + + columns:any[]; + rows:any[]; + + constructor(private router: Router, private employeeService: EmployeeService) { } + + ngOnInit() { + var me = this; + me.getPageData(); + + this.columns=[ + {prop:"id" , name: "ID" , width:50 }, + {prop:"firstName" , name: "First Name" , width:120 }, + {prop:"lastName" , name: "Last Name" , width:120 }, + {prop:"email" , name: "Email" , width:250 }, + {prop:"phone" , name: "Phone" , width:160 }, + {prop:"department", name: "Department" , width:220 } + ]; + } + + getPageData() { + var me = this; + this.employeeService.getEmployees().subscribe((data) => { + this.rows = data.items; + }); + } + +} diff --git a/Frontend/src/app/pages/employees/employees.scss b/Frontend/src/app/pages/employees/employees.scss new file mode 100644 index 0000000..56b34cb --- /dev/null +++ b/Frontend/src/app/pages/employees/employees.scss @@ -0,0 +1,4 @@ +@import '../../../assets/scss/var'; + + + diff --git a/Frontend/src/app/pages/login/login.component.html b/Frontend/src/app/pages/login/login.component.html new file mode 100644 index 0000000..5bba224 --- /dev/null +++ b/Frontend/src/app/pages/login/login.component.html @@ -0,0 +1,15 @@ +
+ + + + +
diff --git a/Frontend/src/app/pages/login/login.component.ts b/Frontend/src/app/pages/login/login.component.ts new file mode 100644 index 0000000..95c0455 --- /dev/null +++ b/Frontend/src/app/pages/login/login.component.ts @@ -0,0 +1,59 @@ +import { Component, OnInit } from "@angular/core"; +import { LoginService } from "../../services/api/login.service"; +import { Router } from "@angular/router"; +import { UserInfoService } from "app/services/user-info.service"; + +@Component({ + selector: "s-login-pg", + templateUrl: "./login.component.html", + styleUrls: ["./login.scss"] +}) +export class LoginComponent implements OnInit { + model: any = {}; + errMsg: string = ""; + constructor( + private router: Router, + private loginService: LoginService, + private userInfoService: UserInfoService + ) {} + + ngOnInit() { + this.loginService.logout(false); + } + + login() { + this.userInfoService.storeUserInfo( + `${this.model.username}:${this.model.password}` + ); + this.loginService + .checkLogin(this.model.username, this.model.password) + .subscribe( + resp => { + if (!resp.success) { + this.errMsg = "Username or password is incorrect"; + return; + } + this.router.navigate([resp.landingPage]); + }, + errResponse => { + switch (errResponse.status) { + case 401: + this.errMsg = "Username or password is incorrect"; + break; + case 404: + this.errMsg = "Service not found"; + case 408: + this.errMsg = "Request Timedout"; + case 500: + this.errMsg = "Internal Server Error"; + default: + this.errMsg = "Server Error"; + } + } + ); + } + + onSignUp() { + this.router.navigate(["signup"]); + } +} diff --git a/Frontend/src/app/pages/login/login.scss b/Frontend/src/app/pages/login/login.scss new file mode 100644 index 0000000..3b7bfa1 --- /dev/null +++ b/Frontend/src/app/pages/login/login.scss @@ -0,0 +1,47 @@ +@import '../../../assets/scss/var'; +:host { + display:flex; + flex-direction: row; + justify-content: center; +} + +.s-login-pg{ + width:400px; + display:flex; + padding:0; + margin:48px 16px 16px 16px; + flex-direction: column; + align-items: center; + background-color: white; + border: 1px solid #ccc; + border-radius: 2px; + box-shadow: 0 1px 3px rgba(0,0,0,0.05), 0 1px 2px rgba(0,0,0,0.15); + .s-login-pg-head{ + width:100%; + height:220px; + display:flex; + flex-direction: column; + align-items: center; + background-color: #998; + padding:16px; + color:white; + } + .s-login-pg-form{ + width:100%; + height:200px; + display:flex; + flex-direction: column; + align-items: center; + margin:24px 16px; + input{ + margin: 16px; + } + } + .s-login-pg-foot{ + width:100%; + min-height:40px; + display:flex; + flex-direction: column; + align-items: center; + } +} diff --git a/Frontend/src/app/pages/logout/logout.component.html b/Frontend/src/app/pages/logout/logout.component.html new file mode 100644 index 0000000..0e8721f --- /dev/null +++ b/Frontend/src/app/pages/logout/logout.component.html @@ -0,0 +1,5 @@ +
+

You are now signed out

+

You may Sign in again

+ +
diff --git a/Frontend/src/app/pages/logout/logout.component.ts b/Frontend/src/app/pages/logout/logout.component.ts new file mode 100644 index 0000000..febaa1a --- /dev/null +++ b/Frontend/src/app/pages/logout/logout.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { ActivatedRoute, Router} from '@angular/router'; +import { UserInfoService, LoginInfoInStorage} from '../../services/user-info.service'; + +@Component({ + selector : 's-logout-pg', + templateUrl: './logout.component.html', + styleUrls : [ './logout.scss'], +}) + +export class LogoutComponent { + constructor(private userInfoService: UserInfoService){ + this.userInfoService.removeUserInfo(); + } +} diff --git a/Frontend/src/app/pages/logout/logout.scss b/Frontend/src/app/pages/logout/logout.scss new file mode 100644 index 0000000..f7471e9 --- /dev/null +++ b/Frontend/src/app/pages/logout/logout.scss @@ -0,0 +1,7 @@ +@import '../../../assets/scss/var'; +:host { + display:flex; + flex-direction: row; + justify-content: center; + background-color: $s-bg-gray; +} diff --git a/Frontend/src/app/pages/order_details/order_details.component.html b/Frontend/src/app/pages/order_details/order_details.component.html new file mode 100644 index 0000000..9789a90 --- /dev/null +++ b/Frontend/src/app/pages/order_details/order_details.component.html @@ -0,0 +1,86 @@ +
+
+

Order:{{orderId}}

+
+ + + + +
+ + + + +
Customer {{orderDetailsRec.customerName}} ({{orderDetailsRec.customerId}})
Email {{orderDetailsRec.customerEmail}}
Order Status {{orderDetailsRec.orderStatus}}
+ + + + + + + + + + + + + + + + + + + + + + + + +
CodeLine StatusProduct NameCategoryQuantityUnit PriceActions
{{o.productCode}}{{o.orderItemStatus}}{{o.productName}}{{o.category}}{{o.quantity}}{{o.unitPrice}}
+
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Shipped Date
Fee
Address
City
State
Country
+
+
+
+
+
+
+ +
diff --git a/Frontend/src/app/pages/order_details/order_details.component.ts b/Frontend/src/app/pages/order_details/order_details.component.ts new file mode 100644 index 0000000..564b058 --- /dev/null +++ b/Frontend/src/app/pages/order_details/order_details.component.ts @@ -0,0 +1,96 @@ +import { Component, OnInit,TemplateRef, ViewChild } from '@angular/core'; +import { OrderService } from '../../services/api/order.service'; +import { Router, ActivatedRoute, Params } from '@angular/router'; +import { FormBuilder, FormGroup , FormControl,Validators} from '@angular/forms'; +import 'rxjs/add/operator/switchMap'; + +@Component({ + selector: 's-orders-pg', + templateUrl: './order_details.component.html', + styleUrls: [ './order_details.scss'], +}) + +export class OrderDetailsComponent implements OnInit { + public orderId:number; + public frmOrderDetail: FormGroup; + public orderDetailsRec:any={id:'',orderLine:[]}; + public isOrderOnHold:boolean = false; + + public rows=[]; + public columns =[ + {prop:"productName" , name: "Product" , width:200 }, + {prop:"productCode" , name: "Code" , width:70 }, + {prop:"category" , name: "Category" , width:100 }, + {prop:"listPrice" , name: "List Price" , width:70 } + ]; + + constructor( + private route: ActivatedRoute, + private router: Router, + private formBuilder: FormBuilder, + private orderService: OrderService + ) { + + } + + ngOnInit(): void { + + this.frmOrderDetail = this.formBuilder.group({ + customerName : ['',Validators.required], + customerEmail : ['',Validators.required], + customerCompany: ['',Validators.required], + orderStatus : ['',Validators.required], + orderDate : ['',Validators.required], + paymentType : [''], + paidDate : [''], + shipAddress1 : ['',Validators.required], + shipAddress2 : ['',Validators.required], + shipCity : ['',Validators.required], + shipCountry : ['',Validators.required], + shipState : ['',Validators.required], + shippedDate : ['',Validators.required], + shippedFee : ['',Validators.required], + }); + this.getData(); + + } + + getData(){ + var me = this; + this.route.params + .switchMap( function(params: Params){ + me.orderId = params['id']; + return me.orderService.getOrderDetails(params['id']) + }) + .subscribe(function(resp){ + console.log("Order details", resp[0]); + me.frmOrderDetail.setValue({ + customerName : [resp[0].customerName], + customerEmail : [resp[0].customerEmail], + customerCompany: [resp[0].customerCompany], + orderStatus : [resp[0].orderStatus], + orderDate : [resp[0].orderDate], + paymentType : [resp[0].paymentType], + paidDate : [resp[0].paidDate], + shipAddress1 : [resp[0].shipAddress1], + shipAddress2 : [resp[0].shipAddress2], + shipCity : [resp[0].shipCity], + shipCountry : [resp[0].shipCountry], + shipState : [resp[0].shipState], + shippedDate : [resp[0].shippedDate], + shippedFee : [resp[0].shippingFee] + }); + me.orderDetailsRec = resp[0]; + + + + }); + } + + goBack(){ + console.log("Back"); + } + + + +} diff --git a/Frontend/src/app/pages/order_details/order_details.scss b/Frontend/src/app/pages/order_details/order_details.scss new file mode 100644 index 0000000..b32c586 --- /dev/null +++ b/Frontend/src/app/pages/order_details/order_details.scss @@ -0,0 +1,5 @@ +@import '../../../assets/scss/var'; +.order-detail-pg{ + width:750px; +} + diff --git a/Frontend/src/app/pages/order_stats/order_stats.component.html b/Frontend/src/app/pages/order_stats/order_stats.component.html new file mode 100644 index 0000000..c8c49f0 --- /dev/null +++ b/Frontend/src/app/pages/order_stats/order_stats.component.html @@ -0,0 +1,41 @@ +
+
+

Orders by Status

+ + +
+ +
+

Orders By Payment Type

+ + +
+ +
+

Orders By Country

+ + +
+ +
diff --git a/Frontend/src/app/pages/order_stats/order_stats.component.ts b/Frontend/src/app/pages/order_stats/order_stats.component.ts new file mode 100644 index 0000000..d3bac65 --- /dev/null +++ b/Frontend/src/app/pages/order_stats/order_stats.component.ts @@ -0,0 +1,53 @@ +import { Component, OnInit } from '@angular/core'; +import { OrderService } from '../../services/api/order.service'; +import { Router } from '@angular/router'; +import { NgxChartsModule} from '@swimlane/ngx-charts'; +import 'rxjs/add/operator/mergeMap'; + + +@Component({ + selector: 's-order_stats-pg', + templateUrl: './order_stats.component.html', + styleUrls: [ './order_stats.scss'], +}) + +export class OrderStatsComponent implements OnInit { + view: any[] = [460, 180]; + ordersByStatusData : any[] = []; + ordersByPaymentData: any[] = []; + ordersByCountryData: any[] = []; + colorScheme = { + domain: ['#007cbb', '#61c673', '#ff8e28', '#ef2e2e'] + }; + barColorScheme = { + domain: ['#007cbb'] + } + + constructor(private router: Router, private orderService: OrderService) { } + + ngOnInit() { + var me = this; + this.getPageData() + } + + getPageData() { + var me = this; + + + me.orderService.getOrderStats("status") + .mergeMap(function(statusData) { + me.ordersByStatusData = statusData.items; + console.log("Received Orders By Status"); + return me.orderService.getOrderStats("paytype"); + }).mergeMap( function(payTypeData) { + me.ordersByPaymentData = payTypeData.items; + console.log("Received Orders By Payment Type"); + return me.orderService.getOrderStats("country") + }).subscribe(function(countryData){ + me.ordersByCountryData = countryData.items; + console.log("Received Orders By Country"); + }); + } + + +} diff --git a/Frontend/src/app/pages/order_stats/order_stats.scss b/Frontend/src/app/pages/order_stats/order_stats.scss new file mode 100644 index 0000000..9f89333 --- /dev/null +++ b/Frontend/src/app/pages/order_stats/order_stats.scss @@ -0,0 +1,16 @@ +@import '../../../assets/scss/var'; +h4{margin-top: 16px;} +.s-order-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } +} diff --git a/Frontend/src/app/pages/orders/orders.component.html b/Frontend/src/app/pages/orders/orders.component.html new file mode 100644 index 0000000..4abca09 --- /dev/null +++ b/Frontend/src/app/pages/orders/orders.component.html @@ -0,0 +1,42 @@ +
+ +
+
+
+
+ +
+
Loading...
+ +
+ + +
+ + +
+
+
+ + + {{value}} + + + + + + + + + + + diff --git a/Frontend/src/app/pages/orders/orders.component.ts b/Frontend/src/app/pages/orders/orders.component.ts new file mode 100644 index 0000000..be7e768 --- /dev/null +++ b/Frontend/src/app/pages/orders/orders.component.ts @@ -0,0 +1,60 @@ +import { Component, OnInit,TemplateRef, ViewChild } from '@angular/core'; +import { OrderService } from '../../services/api/order.service'; +import { Router } from '@angular/router'; +import 'rxjs/add/operator/mergeMap'; + + +@Component({ + selector: 's-orders-pg', + templateUrl: './orders.component.html', + styleUrls: [ './orders.scss'], +}) + +export class OrdersComponent implements OnInit { + @ViewChild('orderStatusCellTpl') statusCellTpl: TemplateRef; + @ViewChild('orderIdTpl') orderIdTpl: TemplateRef; + columns:any[]; + rows:any[]; + orderByStatusData: any[] = []; + isLoading:boolean=false; + constructor(private router: Router, private orderService: OrderService) { } + + ngOnInit() { + var me = this; + me.getPageData(); + this.columns=[ + {prop:"orderId" , name: "ID" , width:65, cellTemplate: this.orderIdTpl }, + {prop:"orderDate" , name: "Order Date" , width:105 }, + {prop:"orderStatus" , name: "Status" , width:85, cellTemplate: this.statusCellTpl }, + {prop:"customerName" , name: "Name" , width:150 }, + {prop:"customerEmail" , name: "Email" , width:200 }, + {prop:"customerCompany" , name: "Company" , width:110 }, + {prop:"paymentType" , name: "Pay Type" , width:80 }, + {prop:"paidDate" , name: "Pay Date" , width:105 }, + {prop:"shippedDate" , name: "Ship Date" , width:105 }, + {prop:"shipCountry" , name: "Ship Country" , width:110 } + ]; + } + + getPageData() { + var me = this; + let legendColors = {"On Hold":'#ef2e2e', "Shipped":'#ff8e28', "Complete":'#61c673', "New":'#007cbb'}; + me.isLoading=true; + me.orderService.getOrderStats("status") + .mergeMap(function(statusData){ + me.orderByStatusData = statusData.items.map(function(v,i,a){ + return {name:v.name, value:v.value, color:legendColors[v.name]} + }); + console.log("Got Order Stats"); + return me.orderService.getOrderInfo(); + }) + .subscribe(function(orderData){ + me.rows = orderData; + me.isLoading=false; + console.log("Got Order Data"); + }) + } + + + +} diff --git a/Frontend/src/app/pages/orders/orders.scss b/Frontend/src/app/pages/orders/orders.scss new file mode 100644 index 0000000..e7bc77f --- /dev/null +++ b/Frontend/src/app/pages/orders/orders.scss @@ -0,0 +1,8 @@ +@import '../../../assets/scss/var'; +.s-info-bar{ + display:flex; + flex-direction: row; + justify-content:space-between; + button{outline:none;} +} + diff --git a/Frontend/src/app/services/api/api-request.service.ts b/Frontend/src/app/services/api/api-request.service.ts new file mode 100644 index 0000000..0ac6253 --- /dev/null +++ b/Frontend/src/app/services/api/api-request.service.ts @@ -0,0 +1,93 @@ +import { Injectable, Inject } from "@angular/core"; +import { + HttpClient, + HttpHeaders, + HttpResponse, + HttpRequest, + HttpParams +} from "@angular/common/http"; +import { Router } from "@angular/router"; +import { Observable } from "rxjs"; +import "rxjs/add/operator/catch"; +import { UserInfoService, LoginInfoInStorage } from "../user-info.service"; +import { AppConfig } from "../../app-config"; + +@Injectable() +export class ApiRequestService { + constructor( + private appConfig: AppConfig, + private http: HttpClient, + private router: Router, + private userInfoService: UserInfoService + ) {} + + getHeaders(): HttpHeaders { + let headers = new HttpHeaders(); + let token = this.userInfoService.getUserInfo(); + token = token.replace(/"/g, ""); + headers = headers.append("Content-Type", "application/json"); + if (token !== null) { + headers = headers.append("Authorization", token); + } + return headers; + } + + get(url: string, urlParams?: HttpParams): Observable { + let me = this; + return this.http + .get(this.appConfig.baseApiPath + url, { + headers: this.getHeaders(), + params: urlParams + }) + .catch(function(error: any) { + console.log("Some error in catch"); + if (error.status === 401 || error.status === 403) { + console.log(me.getHeaders()); + me.router.navigate(["/logout"]); + } + return Observable.throw(error || "Server error"); + }); + } + + post(url: string, body: Object): Observable { + let me = this; + return this.http + .post(this.appConfig.baseApiPath + url, JSON.stringify(body), { + headers: this.getHeaders() + }) + .catch(function(error: any) { + if (error.status === 401) { + me.router.navigate(["/logout"]); + } + return Observable.throw(error || "Server error"); + }); + } + + put(url: string, body: Object): Observable { + let me = this; + return this.http + .put(this.appConfig.baseApiPath + url, JSON.stringify(body), { + headers: this.getHeaders() + }) + .catch(function(error: any) { + if (error.status === 401) { + me.router.navigate(["/logout"]); + } + return Observable.throw(error || "Server error"); + }); + } + + delete(url: string): Observable { + let me = this; + return this.http + .delete(this.appConfig.baseApiPath + url, { + headers: this.getHeaders() + }) + .catch(function(error: any) { + if (error.status === 401) { + me.router.navigate(["/logout"]); + } + return Observable.throw(error || "Server error"); + }); + } +} diff --git a/Frontend/src/app/services/api/book.service.ts b/Frontend/src/app/services/api/book.service.ts new file mode 100644 index 0000000..0830f77 --- /dev/null +++ b/Frontend/src/app/services/api/book.service.ts @@ -0,0 +1,44 @@ +import { Injectable, Inject } from "@angular/core"; +import { Observable, ReplaySubject, Subject } from "rxjs"; +import { TranslateService } from "./translate.service"; +import { ApiRequestService } from "./api-request.service"; +import { HttpParams } from "@angular/common/http"; + +@Injectable() +export class BookService { + constructor( + private apiRequest: ApiRequestService, + private translate: TranslateService + ) {} + + getBooks(page?: number, size?: number): Observable { + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append( + "page", + typeof page === "number" ? page.toString() : "0" + ); + params = params.append( + "size", + typeof size === "number" ? size.toString() : "1000" + ); + + let bookList = new Subject(); // Will use this subject to emit data that we want + this.apiRequest.get("api/books", params).subscribe(jsonResp => { + let returnObj = jsonResp.items.map(function(v, i, a) { + let newRow = Object.assign({}, v, { + listPrice: me.translate.getCurrencyString(v.listPrice), + standardCost: me.translate.getCurrencyString(v.standardCost) + }); + return newRow; + }); + bookList.next(returnObj); // incidentList is a Subject and emits an event thats being listened to by the components + }); + + return bookList; + } + + getBookStatsByQuantityOrdered(): Observable { + return this.apiRequest.get("api/book-stats-by-quantity"); + } +} diff --git a/Frontend/src/app/services/api/customer.service.ts b/Frontend/src/app/services/api/customer.service.ts new file mode 100644 index 0000000..cbfea04 --- /dev/null +++ b/Frontend/src/app/services/api/customer.service.ts @@ -0,0 +1,39 @@ +import { Injectable, Inject } from '@angular/core'; +import { Observable, ReplaySubject, Subject } from 'rxjs'; +import { TranslateService } from './translate.service'; +import { ApiRequestService } from './api-request.service'; +import { HttpParams} from "@angular/common/http"; +@Injectable() +export class CustomerService { + + constructor( + private apiRequest: ApiRequestService, + private translate:TranslateService + ) {} + + getCustomers(page?:number, size?:number): Observable { + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append('page', typeof page === "number"? page.toString():"0"); + params = params.append('size', typeof size === "number"? size.toString():"1000"); + + let customerListSubject = new Subject(); + + this.apiRequest.get('api/customers',params) + .subscribe(jsonResp => { + let items = jsonResp.items.map(function(v, i, a){ + let newRow = Object.assign({}, v, { + address: `${v.address1},
${v.city}, ${v.state} ${v.postalCode}
${v.country}` + }); + return newRow; + }); + + let returnObj = Object.assign({},jsonResp,{ + items:items + }) + customerListSubject.next(returnObj); // incidentList is a Subject and emits an event thats being listened to by the components + }); + + return customerListSubject; + } +} diff --git a/Frontend/src/app/services/api/employee.service.ts b/Frontend/src/app/services/api/employee.service.ts new file mode 100644 index 0000000..ab9a149 --- /dev/null +++ b/Frontend/src/app/services/api/employee.service.ts @@ -0,0 +1,22 @@ +import { Injectable, Inject } from '@angular/core'; +import { Observable, ReplaySubject, Subject } from 'rxjs'; +import { ApiRequestService } from './api-request.service'; +import { TranslateService } from './translate.service'; +import { HttpParams} from "@angular/common/http"; + +@Injectable() +export class EmployeeService { + constructor( + private apiRequest: ApiRequestService, + private translate:TranslateService + ) {} + + getEmployees(page?:number, size?:number): Observable { + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append('page', typeof page === "number"? page.toString():"0"); + params = params.append('size', typeof size === "number"? size.toString():"1000"); + return this.apiRequest.get('api/employees',params); + } + +} diff --git a/Frontend/src/app/services/api/login.service.ts b/Frontend/src/app/services/api/login.service.ts new file mode 100644 index 0000000..99001a5 --- /dev/null +++ b/Frontend/src/app/services/api/login.service.ts @@ -0,0 +1,86 @@ +import { Injectable, Inject } from "@angular/core"; +import { Router } from "@angular/router"; + +import { Observable, Subject, BehaviorSubject } from "rxjs"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/catch"; +import { UserInfoService, LoginInfoInStorage } from "../user-info.service"; +import { ApiRequestService } from "./api-request.service"; + +export interface LoginRequestParam { + username: string; + password: string; +} + +@Injectable() +export class LoginService { + public landingPage: string = "/home/dashboard/order"; + constructor( + private router: Router, + private userInfoService: UserInfoService, + private apiRequest: ApiRequestService + ) {} + + checkLogin(username: string, password: string): Observable { + let me = this; + + let loginDataSubject: BehaviorSubject = new BehaviorSubject( + [] + ); + let loginInfoReturn: LoginInfoInStorage; + + this.apiRequest.get("api/user/checkLogin").subscribe( + jsonResp => { + console.log(jsonResp); + if ( + jsonResp !== undefined && + jsonResp !== null && + jsonResp.operationStatus === "SUCCESS" + ) { + + loginInfoReturn = { + success: true, + message: jsonResp.operationMessage, + landingPage: this.landingPage + }; + + + this.userInfoService.storeUserInfo( + JSON.stringify(`${username}:${password}`) + ); + } else { + + loginInfoReturn = { + success: false, + message: jsonResp.msgDesc, + landingPage: "/login" + }; + } + loginDataSubject.next(loginInfoReturn); + }, + err => { + loginInfoReturn = { + success: false, + message: + err.url + + " >>> " + + err.statusText + + "[" + + err.status + + "]", + landingPage: "/login" + }; + } + ); + + return loginDataSubject; + } + + logout(navigatetoLogout = true): void { + + this.userInfoService.removeUserInfo(); + if (navigatetoLogout) { + this.router.navigate(["logout"]); + } + } +} diff --git a/Frontend/src/app/services/api/order.service.ts b/Frontend/src/app/services/api/order.service.ts new file mode 100644 index 0000000..452f4d5 --- /dev/null +++ b/Frontend/src/app/services/api/order.service.ts @@ -0,0 +1,69 @@ +import { Injectable, Inject } from "@angular/core"; +import { Observable, ReplaySubject, Subject } from "rxjs"; +import { ApiRequestService } from "./api-request.service"; +import { TranslateService } from "./translate.service"; +import { HttpParams } from "@angular/common/http"; + +@Injectable() +export class OrderService { + constructor( + private apiRequest: ApiRequestService, + private translate: TranslateService + ) {} + + + getOrderInfo(page?: number, size?: number): Observable { + + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append( + "page", + typeof page === "number" ? page.toString() : "0" + ); + params = params.append( + "size", + typeof size === "number" ? size.toString() : "1000" + ); + let orderListSubject = new Subject(); + this.apiRequest.get("api/orders", params).subscribe(jsonResp => { + let returnObj = jsonResp.items.map(function(v, i, a) { + let newRow = Object.assign({}, v, { + orderDate: me.translate.getDateString(v.orderDate), + paidDate: me.translate.getDateString(v.paidDate), + shippedDate: me.translate.getDateString(v.shippedDate) + }); + return newRow; + }); + orderListSubject.next(returnObj); + }); + return orderListSubject; + } + + + getOrderDetails(orderId: number): Observable { + + let me = this; + let params: HttpParams = new HttpParams(); + if (orderId) { + params = params.append("orderid", orderId.toString()); + } + let orderDetailSubject = new Subject(); + this.apiRequest.get("api/order-details", params).subscribe(jsonResp => { + let returnObj = jsonResp.items.map(function(v, i, a) { + let newRow = Object.assign({}, v, { + orderDate: me.translate.getDateString(v.orderDate), + paidDate: me.translate.getDateString(v.paidDate), + shippedDate: me.translate.getDateString(v.shippedDate) + }); + return newRow; + }); + orderDetailSubject.next(returnObj); + }); + + return orderDetailSubject; + } + + getOrderStats(field: string): Observable { + return this.apiRequest.get("api/order-stats?type=" + field); + } +} diff --git a/Frontend/src/app/services/api/translate.service.ts b/Frontend/src/app/services/api/translate.service.ts new file mode 100644 index 0000000..1288a0c --- /dev/null +++ b/Frontend/src/app/services/api/translate.service.ts @@ -0,0 +1,19 @@ +import { Injectable, Inject } from '@angular/core'; +import { AppConfig } from '../../app-config'; + +@Injectable() +export class TranslateService { + constructor(private appConfig:AppConfig) { + + } + + getDateString(datenum:number):string{ + return new Date(datenum).toLocaleDateString(this.appConfig.locale, this.appConfig.dateFormat); + } + + getCurrencyString(number:number):string { + return number.toLocaleString(this.appConfig.locale, this.appConfig.currencyFormat); + } + + +} diff --git a/Frontend/src/app/services/auth_guard.service.ts b/Frontend/src/app/services/auth_guard.service.ts new file mode 100644 index 0000000..dd9f350 --- /dev/null +++ b/Frontend/src/app/services/auth_guard.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { UserInfoService } from './user-info.service'; +import { LoginService } from './api/login.service'; +import { Router, CanActivate, CanActivateChild,ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; + +@Injectable() +export class AuthGuard implements CanActivate, CanActivateChild { + + constructor( + private router: Router, + private loginService: LoginService, + private userInfoService: UserInfoService + ) { } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + let url: string = state.url; + return this.checkLogin(url); + + } + + canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + return this.canActivate(route, state); + } + + checkLogin(url: string): boolean { + if (this.userInfoService.isLoggedIn()) { + return true; + } + console.log("User is not logged - This routing guard prvents redirection to any routes that needs logging."); + + this.loginService.landingPage = url; + this.router.navigate(['login',]); + return false; + } +} diff --git a/Frontend/src/app/services/user-info.service.ts b/Frontend/src/app/services/user-info.service.ts new file mode 100644 index 0000000..38d86ea --- /dev/null +++ b/Frontend/src/app/services/user-info.service.ts @@ -0,0 +1,50 @@ +import { Injectable } from "@angular/core"; + +export interface UserInStorage { + userId: string; + email: string; + displayName: string; + token: string; +} + +export interface LoginInfoInStorage { + success: boolean; + message: string; + landingPage: string; + user?: UserInStorage; +} + +@Injectable() +export class UserInfoService { + public currentUserKey: string = "currentUser"; + public storage: Storage = sessionStorage; + + constructor() {} + + storeUserInfo(userInfoString: string) { + this.storage.setItem(this.currentUserKey, userInfoString); + } + + + removeUserInfo() { + this.storage.removeItem(this.currentUserKey); + } + + + getUserInfo(): string | null { + try { + let userInfoString: string = this.storage.getItem( + this.currentUserKey + ); + return userInfoString; + } catch (e) { + return null; + } + } + + isLoggedIn(): boolean { + return this.storage.getItem(this.currentUserKey) ? true : false; + } + + +} diff --git a/Frontend/src/assets/css/font-awesome.css b/Frontend/src/assets/css/font-awesome.css new file mode 100644 index 0000000..f66f24b --- /dev/null +++ b/Frontend/src/assets/css/font-awesome.css @@ -0,0 +1,2198 @@ +/* + * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.woff2') format('woff2'), url('../fonts/fontawesome-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.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; +} diff --git a/Frontend/src/assets/css/font-awesome.css.map b/Frontend/src/assets/css/font-awesome.css.map new file mode 100644 index 0000000..b555bd9 --- /dev/null +++ b/Frontend/src/assets/css/font-awesome.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": ";;;;;;;AAGA,UAUC;EATC,WAAW,EAAE,aAAa;EAC1B,GAAG,EAAE,+CAAgE;EACrE,GAAG,EAAE,ySAAmG;EAKxG,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;ACTpB,GAAmB;EACjB,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,uCAAwD;EAC9D,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,IAAI;EACpB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;EAClC,SAAS,EAAE,eAAe;;;ACN5B,MAAsB;EACpB,SAAS,EAAE,SAAS;EACpB,WAAW,EAAE,MAAS;EACtB,cAAc,EAAE,IAAI;;AAEtB,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;ACVtC,MAAsB;EACpB,KAAK,EAAE,SAAW;EAClB,UAAU,EAAE,MAAM;;ACDpB,MAAsB;EACpB,YAAY,EAAE,CAAC;EACf,WAAW,ECKU,SAAS;EDJ9B,eAAe,EAAE,IAAI;EACrB,WAAK;IAAE,QAAQ,EAAE,QAAQ;;AAE3B,MAAsB;EACpB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,UAAa;EACnB,KAAK,ECFgB,SAAS;EDG9B,GAAG,EAAE,SAAU;EACf,UAAU,EAAE,MAAM;EAClB,YAAuB;IACrB,IAAI,EAAE,UAA0B;;AEbpC,UAA0B;EACxB,OAAO,EAAE,gBAAgB;EACzB,MAAM,EAAE,iBAA4B;EACpC,aAAa,EAAE,IAAI;;AAGrB,WAAY;EAAE,KAAK,EAAE,KAAK;;AAC1B,UAAW;EAAE,KAAK,EAAE,IAAI;;AAGtB,aAAY;EAAE,YAAY,EAAE,IAAI;AAChC,cAAa;EAAE,WAAW,EAAE,IAAI;;ACXlC,QAAwB;EACtB,iBAAiB,EAAE,0BAA0B;EACrC,SAAS,EAAE,0BAA0B;;AAG/C,SAAyB;EACvB,iBAAiB,EAAE,4BAA4B;EACvC,SAAS,EAAE,4BAA4B;;AAGjD,0BASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AAIrC,kBASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AC5BrC,aAA8B;ECY5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,aAAgB;EAC/B,aAAa,EAAE,aAAgB;EAC3B,SAAS,EAAE,aAAgB;;ADdrC,cAA8B;ECW5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADbrC,cAA8B;ECU5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADXrC,mBAAmC;ECejC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADjBzC,iBAAmC;ECcjC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADZzC;;;;uBAIuC;EACrC,MAAM,EAAE,IAAI;;AEfd,SAAyB;EACvB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,MAAM;;AAExB,0BAAyD;EACvD,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;;AAEpB,YAA4B;EAAE,WAAW,EAAE,OAAO;;AAClD,YAA4B;EAAE,SAAS,EAAE,GAAG;;AAC5C,WAA2B;EAAE,KAAK,ELVZ,IAAI;;;;AMN1B,gBAAgC;EAAE,OAAO,ENoQ1B,GAAO;;AMnQtB,gBAAgC;EAAE,OAAO,EN0W1B,GAAO;;AMzWtB,iBAAiC;EAAE,OAAO,ENmb1B,GAAO;;AMlbvB,qBAAqC;EAAE,OAAO,ENmL1B,GAAO;;AMlL3B,gBAAgC;EAAE,OAAO,ENkR1B,GAAO;;AMjRtB,eAA+B;EAAE,OAAO,ENke1B,GAAO;;AMjerB,iBAAiC;EAAE,OAAO,ENse1B,GAAO;;AMrevB,eAA+B;EAAE,OAAO,EN+iB1B,GAAO;;AM9iBrB,eAA+B;EAAE,OAAO,ENyN1B,GAAO;;AMxNrB,mBAAmC;EAAE,OAAO,ENggB1B,GAAO;;AM/fzB,aAA6B;EAAE,OAAO,EN8f1B,GAAO;;AM7fnB,kBAAkC;EAAE,OAAO,EN+f1B,GAAO;;AM9fxB,gBAAgC;EAAE,OAAO,ENoG1B,GAAO;;AMnGtB;;gBAEgC;EAAE,OAAO,ENkgB1B,GAAO;;AMjgBtB,sBAAsC;EAAE,OAAO,ENua1B,GAAO;;AMta5B,uBAAuC;EAAE,OAAO,ENqa1B,GAAO;;AMpa7B,oBAAoC;EAAE,OAAO,EN+X1B,GAAO;;AM9X1B,iBAAiC;EAAE,OAAO,ENsb1B,GAAO;;AMrbvB;cAC8B;EAAE,OAAO,ENwH1B,GAAO;;AMvHpB,kBAAkC;EAAE,OAAO,ENygB1B,GAAO;;AMxgBxB,eAA+B;EAAE,OAAO,ENmQ1B,GAAO;;AMlQrB,iBAAiC;EAAE,OAAO,EN6L1B,GAAO;;AM5LvB,kBAAkC;EAAE,OAAO,EN0G1B,GAAO;;AMzGxB,eAA+B;EAAE,OAAO,EN+Y1B,GAAO;;AM9YrB,mBAAmC;EAAE,OAAO,ENiJ1B,GAAO;;AMhJzB,8BAA8C;EAAE,OAAO,ENI1B,GAAO;;AMHpC,4BAA4C;EAAE,OAAO,ENM1B,GAAO;;AMLlC,gBAAgC;EAAE,OAAO,ENkQ1B,GAAO;;AMjQtB,wBAAwC;EAAE,OAAO,EN4W1B,GAAO;;AM3W9B;iBACiC;EAAE,OAAO,ENmY1B,GAAO;;AMlYvB,kBAAkC;EAAE,OAAO,EN8X1B,GAAO;;AM7XxB,mBAAmC;EAAE,OAAO,ENiS1B,GAAO;;AMhSzB,eAA+B;EAAE,OAAO,ENoS1B,GAAO;;AMnSrB,eAA+B;EAAE,OAAO,ENgM1B,GAAO;;AM/LrB,qBAAqC;EAAE,OAAO,EN+O1B,GAAO;;AM9O3B,qBAAqC;EAAE,OAAO,EN8hB1B,GAAO;;AM7hB3B,sBAAsC;EAAE,OAAO,EN4hB1B,GAAO;;AM3hB5B,oBAAoC;EAAE,OAAO,EN6hB1B,GAAO;;AM5hB1B,iBAAiC;EAAE,OAAO,EN2W1B,GAAO;;AM1WvB,kBAAkC;EAAE,OAAO,ENW1B,GAAO;;AMVxB,cAA8B;EAAE,OAAO,ENod1B,GAAO;;AMndpB,eAA+B;EAAE,OAAO,ENod1B,GAAO;;AMndrB,eAA+B;EAAE,OAAO,EN2B1B,GAAO;;AM1BrB,mBAAmC;EAAE,OAAO,EN2B1B,GAAO;;AM1BzB,gBAAgC;EAAE,OAAO,ENkW1B,GAAO;;AMjWtB,iBAAiC;EAAE,OAAO,ENwC1B,GAAO;;AMvCvB,eAA+B;EAAE,OAAO,EN8L1B,GAAO;;AM7LrB,eAA+B;EAAE,OAAO,ENmB1B,GAAO;;AMlBrB,iBAAiC;EAAE,OAAO,ENoP1B,GAAO;;AMnPvB,sBAAsC;EAAE,OAAO,ENid1B,GAAO;;AMhd5B,qBAAqC;EAAE,OAAO,ENid1B,GAAO;;AMhd3B,qBAAqC;EAAE,OAAO,EN1C1B,GAAO;;AM2C3B,uBAAuC;EAAE,OAAO,EN7C1B,GAAO;;AM8C7B,sBAAsC;EAAE,OAAO,EN3C1B,GAAO;;AM4C5B,wBAAwC;EAAE,OAAO,EN9C1B,GAAO;;AM+C9B,eAA+B;EAAE,OAAO,ENwQ1B,GAAO;;AMvQrB;kBACkC;EAAE,OAAO,ENmT1B,GAAO;;AMlTxB,iBAAiC;EAAE,OAAO,ENmO1B,GAAO;;AMlOvB,uBAAuC;EAAE,OAAO,ENigB1B,GAAO;;AMhgB7B;;oBAEoC;EAAE,OAAO,EN+T1B,GAAO;;AM9T1B,iBAAiC;EAAE,OAAO,ENwT1B,GAAO;;AMvTvB,qBAAqC;EAAE,OAAO,EN+Q1B,GAAO;;AM9Q3B,iBAAiC;EAAE,OAAO,EN5D1B,GAAO;;AM6DvB,eAA+B;EAAE,OAAO,EN8c1B,GAAO;;AM7crB;0BAC0C;EAAE,OAAO,ENqT1B,GAAO;;AMpThC,yBAAyC;EAAE,OAAO,ENuX1B,GAAO;;AMtX/B,yBAAyC;EAAE,OAAO,EN0C1B,GAAO;;AMzC/B,iBAAiC;EAAE,OAAO,ENjC1B,GAAO;;AMkCvB,wBAAwC;EAAE,OAAO,ENma1B,GAAO;;AMla9B,wBAAwC;EAAE,OAAO,EN4H1B,GAAO;;AM3H9B,mBAAmC;EAAE,OAAO,EN7B1B,GAAO;;AM8BzB,eAA+B;EAAE,OAAO,EN0T1B,GAAO;;AMzTrB,gBAAgC;EAAE,OAAO,ENwS1B,GAAO;;AMvStB,eAA+B;EAAE,OAAO,ENia1B,GAAO;;AMharB,kBAAkC;EAAE,OAAO,ENgK1B,GAAO;;AM/JxB,uBAAuC;EAAE,OAAO,ENuH1B,GAAO;;AMtH7B,uBAAuC;EAAE,OAAO,EN4Z1B,GAAO;;AM3Z7B,gBAAgC;EAAE,OAAO,EN4F1B,GAAO;;AM3FtB,uBAAuC;EAAE,OAAO,ENoC1B,GAAO;;AMnC7B,wBAAwC;EAAE,OAAO,ENoC1B,GAAO;;AMnC9B,sBAAsC;EAAE,OAAO,ENsT1B,GAAO;;AMrT5B,uBAAuC;EAAE,OAAO,ENyQ1B,GAAO;;AMxQ7B,uBAAuC;EAAE,OAAO,ENwb1B,GAAO;;AMvb7B,uBAAuC;EAAE,OAAO,ENsB1B,GAAO;;AMrB7B,0BAA0C;EAAE,OAAO,EN2T1B,GAAO;;AM1ThC,sBAAsC;EAAE,OAAO,ENsM1B,GAAO;;AMrM5B,qBAAqC;EAAE,OAAO,EN6D1B,GAAO;;AM5D3B,yBAAyC;EAAE,OAAO,ENob1B,GAAO;;AMnb/B,yBAAyC;EAAE,OAAO,ENkB1B,GAAO;;AMjB/B,cAA8B;EAAE,OAAO,EN/C1B,GAAO;;AMgDpB,qBAAqC;EAAE,OAAO,EN3D1B,GAAO;;AM4D3B,sBAAsC;EAAE,OAAO,EN3D1B,GAAO;;AM4D5B,mBAAmC;EAAE,OAAO,EN3D1B,GAAO;;AM4DzB,qBAAqC;EAAE,OAAO,EN/D1B,GAAO;;AMgE3B;gBACgC;EAAE,OAAO,ENqV1B,GAAO;;AMpVtB,iBAAiC;EAAE,OAAO,ENuF1B,GAAO;;AMtFvB,mBAAmC;EAAE,OAAO,EN4C1B,GAAO;;AM3CzB,eAA+B;EAAE,OAAO,ENmS1B,GAAO;;AMlSrB,gBAAgC;EAAE,OAAO,ENsP1B,GAAO;;AMrPtB,mBAAmC;EAAE,OAAO,EN9D1B,GAAO;;AM+DzB,6BAA6C;EAAE,OAAO,ENgF1B,GAAO;;AM/EnC,eAA+B;EAAE,OAAO,EN+I1B,GAAO;;AM9IrB,eAA+B;EAAE,OAAO,ENoM1B,GAAO;;AMnMrB,eAA+B;EAAE,OAAO,ENmH1B,GAAO;;AMlHrB,cAA8B;EAAE,OAAO,ENiF1B,GAAO;;AMhFpB,oBAAoC;EAAE,OAAO,ENiF1B,GAAO;;AMhF1B;+BAC+C;EAAE,OAAO,EN0E1B,GAAO;;AMzErC,gBAAgC;EAAE,OAAO,ENmR1B,GAAO;;AMlRtB,mBAAmC;EAAE,OAAO,EN/B1B,GAAO;;AMgCzB,iBAAiC;EAAE,OAAO,ENoS1B,GAAO;;AMnSvB,kBAAkC;EAAE,OAAO,ENwB1B,GAAO;;AMvBxB,iBAAiC;EAAE,OAAO,ENqN1B,GAAO;;AMpNvB,qBAAqC;EAAE,OAAO,ENE1B,GAAO;;AMD3B,uBAAuC;EAAE,OAAO,ENF1B,GAAO;;AMG7B,kBAAkC;EAAE,OAAO,EN2S1B,GAAO;;AM1SxB,wBAAwC;EAAE,OAAO,ENyU1B,GAAO;;AMxU9B,iBAAiC;EAAE,OAAO,EN8G1B,GAAO;;AM7GvB,sBAAsC;EAAE,OAAO,EN+G1B,GAAO;;AM9G5B,mBAAmC;EAAE,OAAO,ENnF1B,GAAO;;AMoFzB,mBAAmC;EAAE,OAAO,ENrF1B,GAAO;;AMsFzB;oBACoC;EAAE,OAAO,EN/E1B,GAAO;;AMgF1B,yBAAyC;EAAE,OAAO,ENua1B,GAAO;;AMta/B,0BAA0C;EAAE,OAAO,ENmE1B,GAAO;;AMlEhC,uBAAuC;EAAE,OAAO,EN5C1B,GAAO;;AM6C7B,cAA8B;EAAE,OAAO,ENqK1B,GAAO;;AMpKpB;eAC+B;EAAE,OAAO,ENK1B,GAAO;;AMJrB,mBAAmC;EAAE,OAAO,ENQ1B,GAAO;;AMPzB,sBAAsC;EAAE,OAAO,ENmY1B,GAAO;;AMlY5B,wBAAwC;EAAE,OAAO,ENiY1B,GAAO;;AMhY9B,oBAAoC;EAAE,OAAO,EN2V1B,GAAO;;AM1V1B,kBAAkC;EAAE,OAAO,ENyI1B,GAAO;;AMxIxB,mBAAmC;EAAE,OAAO,ENyT1B,GAAO;;AMxTzB,0BAA0C;EAAE,OAAO,ENiL1B,GAAO;;AMhLhC,qBAAqC;EAAE,OAAO,EN0X1B,GAAO;;AMzX3B,wBAAwC;EAAE,OAAO,EN8C1B,GAAO;;AM7C9B,kBAAkC;EAAE,OAAO,ENoT1B,GAAO;;AMnTxB,iBAAiC;EAAE,OAAO,EN8Y1B,GAAO;;AM7YvB,wBAAwC;EAAE,OAAO,EN6G1B,GAAO;;AM5G9B,iBAAiC;EAAE,OAAO,EN8Z1B,GAAO;;AM7ZvB,kBAAkC;EAAE,OAAO,EN+J1B,GAAO;;AM9JxB,gBAAgC;EAAE,OAAO,ENsO1B,GAAO;;AMrOtB,mBAAmC;EAAE,OAAO,EN2U1B,GAAO;;AM1UzB,qBAAqC;EAAE,OAAO,EN/E1B,GAAO;;AMgF3B,uBAAuC;EAAE,OAAO,ENoO1B,GAAO;;AMnO7B,kBAAkC;EAAE,OAAO,EN8Y1B,GAAO;;AM7YxB;mBACmC;EAAE,OAAO,ENuC1B,GAAO;;AMtCzB,iBAAiC;EAAE,OAAO,ENiG1B,GAAO;;AMhGvB,iBAAiC;EAAE,OAAO,ENiZ1B,GAAO;;AMhZvB,sBAAsC;EAAE,OAAO,ENR1B,GAAO;;AMS5B,cAA8B;EAAE,OAAO,EN4Q1B,GAAO;;AM3QpB,gBAAgC;EAAE,OAAO,ENgH1B,GAAO;;AM/GtB,mBAAmC;EAAE,OAAO,ENnF1B,GAAO;;AMoFzB,eAA+B;EAAE,OAAO,ENzG1B,GAAO;;AM0GrB,sBAAsC;EAAE,OAAO,ENzD1B,GAAO;;AM0D5B,uBAAuC;EAAE,OAAO,EN0G1B,GAAO;;AMzG7B,sBAAsC;EAAE,OAAO,ENwG1B,GAAO;;AMvG5B,oBAAoC;EAAE,OAAO,ENyG1B,GAAO;;AMxG1B,sBAAsC;EAAE,OAAO,ENqG1B,GAAO;;AMpG5B,4BAA4C;EAAE,OAAO,EN5I1B,GAAO;;AM6IlC,6BAA6C;EAAE,OAAO,ENxI1B,GAAO;;AMyInC,0BAA0C;EAAE,OAAO,ENxI1B,GAAO;;AMyIhC,4BAA4C;EAAE,OAAO,ENhJ1B,GAAO;;AMiJlC,gBAAgC;EAAE,OAAO,ENsF1B,GAAO;;AMrFtB,iBAAiC;EAAE,OAAO,ENia1B,GAAO;;AMhavB,gBAAgC;EAAE,OAAO,ENiV1B,GAAO;;AMhVtB,iBAAiC;EAAE,OAAO,ENgD1B,GAAO;;AM/CvB,oBAAoC;EAAE,OAAO,ENvG1B,GAAO;;AMwG1B,qBAAqC;EAAE,OAAO,ENzI1B,GAAO;;AM0I3B;gBACgC;EAAE,OAAO,ENqY1B,GAAO;;AMpYtB;eAC+B;EAAE,OAAO,ENuI1B,GAAO;;AMtIrB,gBAAgC;EAAE,OAAO,ENpD1B,GAAO;;AMqDtB,gBAAgC;EAAE,OAAO,EN+C1B,GAAO;;AM9CtB;mBACmC;EAAE,OAAO,ENwP1B,GAAO;;AMvPzB;kBACkC;EAAE,OAAO,ENkC1B,GAAO;;AMjCxB,oBAAoC;EAAE,OAAO,ENsL1B,GAAO;;AMrL1B;mBACmC;EAAE,OAAO,EN0C1B,GAAO;;AMzCzB,iBAAiC;EAAE,OAAO,ENiS1B,GAAO;;AMhSvB;;eAE+B;EAAE,OAAO,EN9I1B,GAAO;;AM+IrB,kBAAkC;EAAE,OAAO,ENgI1B,GAAO;;AM/HxB,kBAAkC;EAAE,OAAO,EN8H1B,GAAO;;AM7HxB,wBAAwC;EAAE,OAAO,EN4S1B,GAAO;;AM3S9B,oBAAoC;EAAE,OAAO,ENoW1B,GAAO;;AMnW1B,gBAAgC;EAAE,OAAO,ENmT1B,GAAO;;AMlTtB,gBAAgC;EAAE,OAAO,ENkI1B,GAAO;;AMjItB,gBAAgC;EAAE,OAAO,ENuV1B,GAAO;;AMtVtB,oBAAoC;EAAE,OAAO,ENwL1B,GAAO;;AMvL1B,2BAA2C;EAAE,OAAO,ENyL1B,GAAO;;AMxLjC,6BAA6C;EAAE,OAAO,ENyD1B,GAAO;;AMxDnC,sBAAsC;EAAE,OAAO,ENuD1B,GAAO;;AMtD5B,gBAAgC;EAAE,OAAO,ENsJ1B,GAAO;;AMrJtB,qBAAqC;EAAE,OAAO,ENtH1B,GAAO;;AMuH3B,mBAAmC;EAAE,OAAO,ENhH1B,GAAO;;AMiHzB,qBAAqC;EAAE,OAAO,ENvH1B,GAAO;;AMwH3B,sBAAsC;EAAE,OAAO,ENvH1B,GAAO;;AMwH5B,kBAAkC;EAAE,OAAO,ENvE1B,GAAO;;AMwExB;eAC+B;EAAE,OAAO,EN2P1B,GAAO;;AM1PrB;oBACoC;EAAE,OAAO,EN+P1B,GAAO;;AM9P1B;mBACmC;EAAE,OAAO,EN4P1B,GAAO;;AM3PzB,mBAAmC;EAAE,OAAO,ENxC1B,GAAO;;AMyCzB,mBAAmC;EAAE,OAAO,ENkG1B,GAAO;;AMjGzB;eAC+B;EAAE,OAAO,EN8U1B,GAAO;;AM7UrB;gBACgC;EAAE,OAAO,ENqB1B,GAAO;;AMpBtB;qBACqC;EAAE,OAAO,EN2R1B,GAAO;;AM1R3B,oBAAoC;EAAE,OAAO,ENpF1B,GAAO;;AMqF1B,qBAAqC;EAAE,OAAO,ENnF1B,GAAO;;AMoF3B;eAC+B;EAAE,OAAO,ENjK1B,GAAO;;AMkKrB,kBAAkC;EAAE,OAAO,ENkO1B,GAAO;;AMjOxB,mBAAmC;EAAE,OAAO,ENkU1B,GAAO;;AMjUzB;oBACoC;EAAE,OAAO,EN1G1B,GAAO;;AM2G1B,sBAAsC;EAAE,OAAO,ENgF1B,GAAO;;AM/E5B,mBAAmC;EAAE,OAAO,ENnD1B,GAAO;;AMoDzB,yBAAyC;EAAE,OAAO,ENzG1B,GAAO;;AM0G/B,uBAAuC;EAAE,OAAO,ENzG1B,GAAO;;AM0G7B,kBAAkC;EAAE,OAAO,ENsU1B,GAAO;;AMrUxB,sBAAsC;EAAE,OAAO,EN+P1B,GAAO;;AM9P5B,mBAAmC;EAAE,OAAO,ENsQ1B,GAAO;;AMrQzB,iBAAiC;EAAE,OAAO,ENvL1B,GAAO;;AMwLvB,iBAAiC;EAAE,OAAO,ENzG1B,GAAO;;AM0GvB,kBAAkC;EAAE,OAAO,ENtF1B,GAAO;;AMuFxB,sBAAsC;EAAE,OAAO,EN3B1B,GAAO;;AM4B5B,qBAAqC;EAAE,OAAO,ENxK1B,GAAO;;AMyK3B,qBAAqC;EAAE,OAAO,ENkC1B,GAAO;;AMjC3B,oBAAoC;EAAE,OAAO,EN3O1B,GAAO;;AM4O1B,iBAAiC;EAAE,OAAO,ENiG1B,GAAO;;AMhGvB,sBAAsC;EAAE,OAAO,EN/C1B,GAAO;;AMgD5B,eAA+B;EAAE,OAAO,ENpM1B,GAAO;;AMqMrB,mBAAmC;EAAE,OAAO,ENe1B,GAAO;;AMdzB,sBAAsC;EAAE,OAAO,ENgJ1B,GAAO;;AM/I5B,4BAA4C;EAAE,OAAO,EN5O1B,GAAO;;AM6OlC,6BAA6C;EAAE,OAAO,EN5O1B,GAAO;;AM6OnC,0BAA0C;EAAE,OAAO,EN5O1B,GAAO;;AM6OhC,4BAA4C;EAAE,OAAO,ENhP1B,GAAO;;AMiPlC,qBAAqC;EAAE,OAAO,EN5O1B,GAAO;;AM6O3B,sBAAsC;EAAE,OAAO,EN5O1B,GAAO;;AM6O5B,mBAAmC;EAAE,OAAO,EN5O1B,GAAO;;AM6OzB,qBAAqC;EAAE,OAAO,ENhP1B,GAAO;;AMiP3B,kBAAkC;EAAE,OAAO,ENlG1B,GAAO;;AMmGxB,iBAAiC;EAAE,OAAO,ENuC1B,GAAO;;AMtCvB,iBAAiC;EAAE,OAAO,ENoP1B,GAAO;;AMnPvB;iBACiC;EAAE,OAAO,ENyF1B,GAAO;;AMxFvB,mBAAmC;EAAE,OAAO,EN9I1B,GAAO;;AM+IzB,qBAAqC;EAAE,OAAO,EN0I1B,GAAO;;AMzI3B,sBAAsC;EAAE,OAAO,EN0I1B,GAAO;;AMzI5B,kBAAkC;EAAE,OAAO,ENgN1B,GAAO;;AM/MxB,iBAAiC;EAAE,OAAO,ENnJ1B,GAAO;;AMoJvB;gBACgC;EAAE,OAAO,ENkJ1B,GAAO;;AMjJtB,qBAAqC;EAAE,OAAO,ENnB1B,GAAO;;AMoB3B,mBAAmC;EAAE,OAAO,ENxC1B,GAAO;;AMyCzB,wBAAwC;EAAE,OAAO,ENvC1B,GAAO;;AMwC9B,kBAAkC;EAAE,OAAO,EN0L1B,GAAO;;AMzLxB,kBAAkC;EAAE,OAAO,ENpC1B,GAAO;;AMqCxB,gBAAgC;EAAE,OAAO,ENoE1B,GAAO;;AMnEtB,kBAAkC;EAAE,OAAO,ENpC1B,GAAO;;AMqCxB,qBAAqC;EAAE,OAAO,ENkB1B,GAAO;;AMjB3B,iBAAiC;EAAE,OAAO,ENrD1B,GAAO;;AMsDvB,yBAAyC;EAAE,OAAO,ENvD1B,GAAO;;AMwD/B,mBAAmC;EAAE,OAAO,ENuO1B,GAAO;;AMtOzB,eAA+B;EAAE,OAAO,ENtJ1B,GAAO;;AMuJrB;oBACoC;EAAE,OAAO,ENqI1B,GAAO;;AMpI1B;;sBAEsC;EAAE,OAAO,ENuM1B,GAAO;;AMtM5B,yBAAyC;EAAE,OAAO,ENkC1B,GAAO;;AMjC/B,eAA+B;EAAE,OAAO,EN5I1B,GAAO;;AM6IrB,oBAAoC;EAAE,OAAO,EN7J1B,GAAO;;AM8J1B;uBACuC;EAAE,OAAO,EN1L1B,GAAO;;AM2L7B,mBAAmC;EAAE,OAAO,EN4G1B,GAAO;;AM3GzB,eAA+B;EAAE,OAAO,ENT1B,GAAO;;AMUrB,sBAAsC;EAAE,OAAO,ENhH1B,GAAO;;AMiH5B,sBAAsC;EAAE,OAAO,EN8M1B,GAAO;;AM7M5B,oBAAoC;EAAE,OAAO,ENyM1B,GAAO;;AMxM1B,iBAAiC;EAAE,OAAO,ENvH1B,GAAO;;AMwHvB,uBAAuC;EAAE,OAAO,ENmG1B,GAAO;;AMlG7B,qBAAqC;EAAE,OAAO,EN8C1B,GAAO;;AM7C3B,2BAA2C;EAAE,OAAO,EN8C1B,GAAO;;AM7CjC,iBAAiC;EAAE,OAAO,ENgJ1B,GAAO;;AM/IvB,qBAAqC;EAAE,OAAO,EN5N1B,GAAO;;AM6N3B,4BAA4C;EAAE,OAAO,ENjF1B,GAAO;;AMkFlC,iBAAiC;EAAE,OAAO,ENoH1B,GAAO;;AMnHvB,iBAAiC;EAAE,OAAO,ENkC1B,GAAO;;AMjCvB,8BAA8C;EAAE,OAAO,ENlM1B,GAAO;;AMmMpC,+BAA+C;EAAE,OAAO,ENlM1B,GAAO;;AMmMrC,4BAA4C;EAAE,OAAO,ENlM1B,GAAO;;AMmMlC,8BAA8C;EAAE,OAAO,ENtM1B,GAAO;;AMuMpC,gBAAgC;EAAE,OAAO,EN/B1B,GAAO;;AMgCtB,eAA+B;EAAE,OAAO,ENjK1B,GAAO;;AMkKrB,iBAAiC;EAAE,OAAO,EN9S1B,GAAO;;AM+SvB,qBAAqC;EAAE,OAAO,ENmP1B,GAAO;;AMlP3B,mBAAmC;EAAE,OAAO,EN9O1B,GAAO;;AM+OzB,qBAAqC;EAAE,OAAO,EN/I1B,GAAO;;AMgJ3B,qBAAqC;EAAE,OAAO,EN/I1B,GAAO;;AMgJ3B,qBAAqC;EAAE,OAAO,EN4G1B,GAAO;;AM3G3B,sBAAsC;EAAE,OAAO,ENsE1B,GAAO;;AMrE5B,iBAAiC;EAAE,OAAO,EN2M1B,GAAO;;AM1MvB,uBAAuC;EAAE,OAAO,EN6B1B,GAAO;;AM5B7B,yBAAyC;EAAE,OAAO,EN6B1B,GAAO;;AM5B/B,mBAAmC;EAAE,OAAO,ENhB1B,GAAO;;AMiBzB,qBAAqC;EAAE,OAAO,ENlB1B,GAAO;;AMmB3B,uBAAuC;EAAE,OAAO,ENvN1B,GAAO;;AMwN7B,wBAAwC;EAAE,OAAO,ENiD1B,GAAO;;AMhD9B,+BAA+C;EAAE,OAAO,EN3I1B,GAAO;;AM4IrC,uBAAuC;EAAE,OAAO,ENkH1B,GAAO;;AMjH7B,kBAAkC;EAAE,OAAO,EN1L1B,GAAO;;AM2LxB;8BAC8C;EAAE,OAAO,ENjP1B,GAAO;;AMkPpC;4BAC4C;EAAE,OAAO,ENhP1B,GAAO;;AMiPlC;+BAC+C;EAAE,OAAO,ENnP1B,GAAO;;AMoPrC;cAC8B;EAAE,OAAO,EN7J1B,GAAO;;AM8JpB,cAA8B;EAAE,OAAO,EN/F1B,GAAO;;AMgGpB;cAC8B;EAAE,OAAO,EN4N1B,GAAO;;AM3NpB;cAC8B;EAAE,OAAO,ENvD1B,GAAO;;AMwDpB;;;cAG8B;EAAE,OAAO,ENrD1B,GAAO;;AMsDpB;;cAE8B;EAAE,OAAO,EN8E1B,GAAO;;AM7EpB;cAC8B;EAAE,OAAO,ENtD1B,GAAO;;AMuDpB;cAC8B;EAAE,OAAO,ENzR1B,GAAO;;AM0RpB,eAA+B;EAAE,OAAO,ENzJ1B,GAAO;;AM0JrB,oBAAoC;EAAE,OAAO,EN7I1B,GAAO;;AM8I1B,yBAAyC;EAAE,OAAO,EN2G1B,GAAO;;AM1G/B,0BAA0C;EAAE,OAAO,EN2G1B,GAAO;;AM1GhC,0BAA0C;EAAE,OAAO,EN2G1B,GAAO;;AM1GhC,2BAA2C;EAAE,OAAO,EN2G1B,GAAO;;AM1GjC,2BAA2C;EAAE,OAAO,EN8G1B,GAAO;;AM7GjC,4BAA4C;EAAE,OAAO,EN8G1B,GAAO;;AM7GlC,oBAAoC;EAAE,OAAO,ENgK1B,GAAO;;AM/J1B,sBAAsC;EAAE,OAAO,EN4J1B,GAAO;;AM3J5B,yBAAyC;EAAE,OAAO,ENwO1B,GAAO;;AMvO/B,kBAAkC;EAAE,OAAO,ENqO1B,GAAO;;AMpOxB,eAA+B;EAAE,OAAO,EN+N1B,GAAO;;AM9NrB,sBAAsC;EAAE,OAAO,EN+N1B,GAAO;;AM9N5B,uBAAuC;EAAE,OAAO,ENmO1B,GAAO;;AMlO7B,kBAAkC;EAAE,OAAO,ENxM1B,GAAO;;AMyMxB,yBAAyC;EAAE,OAAO,EN+G1B,GAAO;;AM9G/B,oBAAoC;EAAE,OAAO,ENnF1B,GAAO;;AMoF1B,iBAAiC;EAAE,OAAO,EN/I1B,GAAO;;AMgJvB,cAA8B;EAAE,OAAO,ENhX1B,GAAO;;AMiXpB,oBAAoC;EAAE,OAAO,ENxT1B,GAAO;;AMyT1B,2BAA2C;EAAE,OAAO,ENxT1B,GAAO;;AMyTjC,iBAAiC;EAAE,OAAO,ENyK1B,GAAO;;AMxKvB,wBAAwC;EAAE,OAAO,ENyK1B,GAAO;;AMxK9B,0BAA0C;EAAE,OAAO,ENtD1B,GAAO;;AMuDhC,wBAAwC;EAAE,OAAO,ENpD1B,GAAO;;AMqD9B,0BAA0C;EAAE,OAAO,ENvD1B,GAAO;;AMwDhC,2BAA2C;EAAE,OAAO,ENvD1B,GAAO;;AMwDjC,gBAAgC;EAAE,OAAO,ENxW1B,GAAO;;AMyWtB,kBAAkC;EAAE,OAAO,EN0M1B,GAAO;;AMzMxB,kBAAkC;EAAE,OAAO,ENpX1B,GAAO;;AMqXxB,gBAAgC;EAAE,OAAO,ENpE1B,GAAO;;AMqEtB,mBAAmC;EAAE,OAAO,EN1N1B,GAAO;;AM2NzB,gBAAgC;EAAE,OAAO,ENqE1B,GAAO;;AMpEtB,qBAAqC;EAAE,OAAO,ENtJ1B,GAAO;;AMuJ3B,iBAAiC;EAAE,OAAO,ENuJ1B,GAAO;;AMtJvB,iBAAiC;EAAE,OAAO,EN/L1B,GAAO;;AMgMvB,eAA+B;EAAE,OAAO,EN1D1B,GAAO;;AM2DrB;mBACmC;EAAE,OAAO,ENnI1B,GAAO;;AMoIzB,gBAAgC;EAAE,OAAO,EN2G1B,GAAO;;AM1GtB,iBAAiC;EAAE,OAAO,ENxC1B,GAAO;;AMyCvB,kBAAkC;EAAE,OAAO,ENrX1B,GAAO;;AMsXxB,cAA8B;EAAE,OAAO,ENpU1B,GAAO;;AMqUpB,aAA6B;EAAE,OAAO,ENgL1B,GAAO;;AM/KnB,gBAAgC;EAAE,OAAO,ENqL1B,GAAO;;AMpLtB,iBAAiC;EAAE,OAAO,ENa1B,GAAO;;AMZvB,oBAAoC;EAAE,OAAO,ENrC1B,GAAO;;AMsC1B,yBAAyC;EAAE,OAAO,EN8E1B,GAAO;;AM7E/B,+BAA+C;EAAE,OAAO,ENtX1B,GAAO;;AMuXrC,8BAA8C;EAAE,OAAO,ENxX1B,GAAO;;AMyXpC;8BAC8C;EAAE,OAAO,EN3T1B,GAAO;;AM4TpC,uBAAuC;EAAE,OAAO,ENjP1B,GAAO;;AMkP7B,qBAAqC;EAAE,OAAO,EN+K1B,GAAO;;AM9K3B,uBAAuC;EAAE,OAAO,ENmK1B,GAAO;;AMlK7B;cAC8B;EAAE,OAAO,ENoI1B,GAAO;;AMnIpB,wBAAwC;EAAE,OAAO,ENjB1B,GAAO;;AMkB9B,wBAAwC;EAAE,OAAO,EN6D1B,GAAO;;AM5D9B,gBAAgC;EAAE,OAAO,EN2C1B,GAAO;;AM1CtB,0BAA0C;EAAE,OAAO,EN7O1B,GAAO;;AM8OhC,oBAAoC;EAAE,OAAO,EN2K1B,GAAO;;AM1K1B,iBAAiC;EAAE,OAAO,ENvD1B,GAAO;;AMwDvB;;qBAEqC;EAAE,OAAO,ENsI1B,GAAO;;AMrI3B;yBACyC;EAAE,OAAO,ENjK1B,GAAO;;AMkK/B,gBAAgC;EAAE,OAAO,ENwK1B,GAAO;;AMvKtB,iBAAiC;EAAE,OAAO,ENvK1B,GAAO;;AMwKvB,iBAAiC;EAAE,OAAO,ENhB1B,GAAO;;AMiBvB,wBAAwC;EAAE,OAAO,ENhB1B,GAAO;;AMiB9B,6BAA6C;EAAE,OAAO,ENsE1B,GAAO;;AMrEnC,sBAAsC;EAAE,OAAO,ENoE1B,GAAO;;AMnE5B,oBAAoC;EAAE,OAAO,EN7Q1B,GAAO;;AM8Q1B,eAA+B;EAAE,OAAO,EN1Q1B,GAAO;;AM2QrB,qBAAqC;EAAE,OAAO,ENjD1B,GAAO;;AMkD3B,yBAAyC;EAAE,OAAO,ENjD1B,GAAO;;AMkD/B,iBAAiC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQvB,iBAAiC;EAAE,OAAO,EN9I1B,GAAO;;AM+IvB,mBAAmC;EAAE,OAAO,ENzI1B,GAAO;;AM0IzB,cAA8B;EAAE,OAAO,EN9O1B,GAAO;;AM+OpB,mBAAmC;EAAE,OAAO,EN3W1B,GAAO;;AM4WzB,gBAAgC;EAAE,OAAO,EN9T1B,GAAO;;AM+TtB,cAA8B;EAAE,OAAO,ENnE1B,GAAO;;AMoEpB,gBAAgC;EAAE,OAAO,ENoC1B,GAAO;;AMnCtB,eAA+B;EAAE,OAAO,ENjS1B,GAAO;;AMkSrB,gBAAgC;EAAE,OAAO,ENjS1B,GAAO;;AMkStB,kBAAkC;EAAE,OAAO,ENtY1B,GAAO;;AMuYxB,yBAAyC;EAAE,OAAO,ENtY1B,GAAO;;AMuY/B,gBAAgC;EAAE,OAAO,EN2C1B,GAAO;;AM1CtB,uBAAuC;EAAE,OAAO,EN2C1B,GAAO;;AM1C7B,kBAAkC;EAAE,OAAO,ENvC1B,GAAO;;AMwCxB;cAC8B;EAAE,OAAO,EN3W1B,GAAO;;AM4WpB;eAC+B;EAAE,OAAO,EN2D1B,GAAO;;AM1DrB,eAA+B;EAAE,OAAO,ENuF1B,GAAO;;AMtFrB,kBAAkC;EAAE,OAAO,ENwB1B,GAAO;;AMvBxB,qBAAqC;EAAE,OAAO,ENpS1B,GAAO;;AMqS3B,qBAAqC;EAAE,OAAO,ENkB1B,GAAO;;AMjB3B,mBAAmC;EAAE,OAAO,EN1S1B,GAAO;;AM2SzB,qBAAqC;EAAE,OAAO,ENxP1B,GAAO;;AMyP3B,sBAAsC;EAAE,OAAO,ENjP1B,GAAO;;AMkP5B,uBAAuC;EAAE,OAAO,EN9P1B,GAAO;;AM+P7B,4BAA4C;EAAE,OAAO,ENxP1B,GAAO;;AMyPlC;;uBAEuC;EAAE,OAAO,ENjQ1B,GAAO;;AMkQ7B;yBACyC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQ/B;uBACuC;EAAE,OAAO,ENxQ1B,GAAO;;AMyQ7B;uBACuC;EAAE,OAAO,EN7P1B,GAAO;;AM8P7B,sBAAsC;EAAE,OAAO,EN1Q1B,GAAO;;AM2Q5B,eAA+B;EAAE,OAAO,ENsG1B,GAAO;;AMrGrB,kBAAkC;EAAE,OAAO,ENlV1B,GAAO;;AMmVxB,mBAAmC;EAAE,OAAO,ENnL1B,GAAO;;AMoLzB;;;;oBAIoC;EAAE,OAAO,ENxK1B,GAAO;;AMyK1B,yBAAyC;EAAE,OAAO,ENpW1B,GAAO;;AMqW/B;gBACgC;EAAE,OAAO,EN1E1B,GAAO;;AM2EtB;iBACiC;EAAE,OAAO,ENpT1B,GAAO;;AMqTvB,qBAAqC;EAAE,OAAO,EN1O1B,GAAO;;AM2O3B,cAA8B;EAAE,OAAO,EN5O1B,GAAO;;AM6OpB,sBAAsC;EAAE,OAAO,EN7N1B,GAAO;;AM8N5B,wBAAwC;EAAE,OAAO,ENwB1B,GAAO;;AMvB9B,aAA6B;EAAE,OAAO,ENzF1B,GAAO;;AM0FnB;iBACiC;EAAE,OAAO,EN2F1B,GAAO;;AM1FvB;sBACsC;EAAE,OAAO,EN9H1B,GAAO;;AM+H5B;wBACwC;EAAE,OAAO,EN/H1B,GAAO;;AMgI9B,kBAAkC;EAAE,OAAO,EN3N1B,GAAO;;AM4NxB;sBACsC;EAAE,OAAO,ENrX1B,GAAO;;AMsX5B,iBAAiC;EAAE,OAAO,ENnO1B,GAAO;;AMoOvB,oBAAoC;EAAE,OAAO,ENlI1B,GAAO;;AMmI1B,kBAAkC;EAAE,OAAO,EN1C1B,GAAO;;AM2CxB,oBAAoC;EAAE,OAAO,EN7D1B,GAAO;;AM8D1B,2BAA2C;EAAE,OAAO,EN7D1B,GAAO;;AM8DjC,eAA+B;EAAE,OAAO,ENpb1B,GAAO;;AMqbrB;mBACmC;EAAE,OAAO,ENzQ1B,GAAO;;AM0QzB,cAA8B;EAAE,OAAO,ENsC1B,GAAO;;AMrCpB,qBAAqC;EAAE,OAAO,EN/b1B,GAAO;;AMgc3B,eAA+B;EAAE,OAAO,ENrH1B,GAAO;;AMsHrB,qBAAqC;EAAE,OAAO,ENlD1B,GAAO;;AMmD3B,iBAAiC;EAAE,OAAO,ENsC1B,GAAO;;AMrCvB,eAA+B;EAAE,OAAO,ENiF1B,GAAO;;AMhFrB,sBAAsC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJ5B,eAA+B;EAAE,OAAO,ENuE1B,GAAO;;AMtErB,qBAAqC;EAAE,OAAO,ENjb1B,GAAO;;AMkb3B,iBAAiC;EAAE,OAAO,EN9I1B,GAAO;;AM+IvB,wBAAwC;EAAE,OAAO,ENhQ1B,GAAO;;AMiQ9B,kBAAkC;EAAE,OAAO,EN9Z1B,GAAO;;AM+ZxB,wBAAwC;EAAE,OAAO,ENla1B,GAAO;;AMma9B,sBAAsC;EAAE,OAAO,ENpa1B,GAAO;;AMqa5B,kBAAkC;EAAE,OAAO,ENta1B,GAAO;;AMuaxB,oBAAoC;EAAE,OAAO,ENpa1B,GAAO;;AMqa1B,oBAAoC;EAAE,OAAO,ENpa1B,GAAO;;AMqa1B,qBAAqC;EAAE,OAAO,ENld1B,GAAO;;AMmd3B,uBAAuC;EAAE,OAAO,ENld1B,GAAO;;AMmd7B,gBAAgC;EAAE,OAAO,ENY1B,GAAO;;AMXtB,oBAAoC;EAAE,OAAO,EN3X1B,GAAO;;AM4X1B,aAA6B;EAAE,OAAO,ENre1B,GAAO;;AMsenB,qBAAqC;EAAE,OAAO,ENjV1B,GAAO;;AMkV3B,sBAAsC;EAAE,OAAO,ENpK1B,GAAO;;AMqK5B,wBAAwC;EAAE,OAAO,ENrd1B,GAAO;;AMsd9B,qBAAqC;EAAE,OAAO,EN3f1B,GAAO;;AM4f3B,oBAAoC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJ1B,qBAAqC;EAAE,OAAO,EN5N1B,GAAO;;AM6N3B,iBAAiC;EAAE,OAAO,EN1O1B,GAAO;;AM2OvB,wBAAwC;EAAE,OAAO,EN1O1B,GAAO;;AM2O9B,qBAAqC;EAAE,OAAO,ENN1B,GAAO;;AMO3B,oBAAoC;EAAE,OAAO,ENN1B,GAAO;;AMO1B,kBAAkC;EAAE,OAAO,EN/d1B,GAAO;;AMgexB,cAA8B;EAAE,OAAO,EN7c1B,GAAO;;AM8cpB,kBAAkC;EAAE,OAAO,EN1P1B,GAAO;;AM2PxB,oBAAoC;EAAE,OAAO,ENhhB1B,GAAO;;AMihB1B,aAA6B;EAAE,OAAO,EN7b1B,GAAO;;AM8bnB;;cAE8B;EAAE,OAAO,ENxQ1B,GAAO;;AMyQpB,mBAAmC;EAAE,OAAO,EN7M1B,GAAO;;AM8MzB,qBAAqC;EAAE,OAAO,ENpd1B,GAAO;;AMqd3B,yBAAyC;EAAE,OAAO,ENnZ1B,GAAO;;AMoZ/B,mBAAmC;EAAE,OAAO,ENxY1B,GAAO;;AMyYzB,mBAAmC;EAAE,OAAO,EN1T1B,GAAO;;AM2TzB,kBAAkC;EAAE,OAAO,ENxP1B,GAAO;;AMyPxB,iBAAiC;EAAE,OAAO,ENrH1B,GAAO;;AMsHvB,uBAAuC;EAAE,OAAO,ENzG1B,GAAO;;AM0G7B,sBAAsC;EAAE,OAAO,ENrG1B,GAAO;;AMsG5B,mBAAmC;EAAE,OAAO,ENpG1B,GAAO;;AMqGzB,oBAAoC;EAAE,OAAO,EN5c1B,GAAO;;AM6c1B,0BAA0C;EAAE,OAAO,EN9c1B,GAAO;;AM+chC,kBAAkC;EAAE,OAAO,EN3Y1B,GAAO;;AM4YxB,eAA+B;EAAE,OAAO,ENhH1B,GAAO;;AMiHrB,sBAAsC;EAAE,OAAO,ENI1B,GAAO;;AMH5B,qBAAqC;EAAE,OAAO,EN5M1B,GAAO;;AM6M3B,sBAAsC;EAAE,OAAO,ENpE1B,GAAO;;AMqE5B,oBAAoC;EAAE,OAAO,ENhS1B,GAAO;;AMiS1B,gBAAgC;EAAE,OAAO,ENG1B,GAAO;;AMFtB,eAA+B;EAAE,OAAO,ENtO1B,GAAO;;AMuOrB,kBAAkC;EAAE,OAAO,EN7N1B,GAAO;;AM8NxB,sBAAsC;EAAE,OAAO,ENhC1B,GAAO;;AMiC5B,0BAA0C;EAAE,OAAO,ENhC1B,GAAO;;AMiChC,uBAAuC;EAAE,OAAO,END1B,GAAO;;AME7B,sBAAsC;EAAE,OAAO,EN1O1B,GAAO;;AM2O5B,qBAAqC;EAAE,OAAO,ENF1B,GAAO;;AMG3B,sBAAsC;EAAE,OAAO,EN3O1B,GAAO;;AM4O5B,wBAAwC;EAAE,OAAO,EN1O1B,GAAO;;AM2O9B,wBAAwC;EAAE,OAAO,EN5O1B,GAAO;;AM6O9B,iBAAiC;EAAE,OAAO,ENvN1B,GAAO;;AMwNvB,4BAA4C;EAAE,OAAO,EN9X1B,GAAO;;AM+XlC,sBAAsC;EAAE,OAAO,ENhM1B,GAAO;;AMiM5B,mBAAmC;EAAE,OAAO,ENI1B,GAAO;;AMHzB,iBAAiC;EAAE,OAAO,EN7I1B,GAAO;;AM8IvB,oBAAoC;EAAE,OAAO,ENjB1B,GAAO;;AMkB1B,qBAAqC;EAAE,OAAO,ENhB1B,GAAO;;AMiB3B;cAC8B;EAAE,OAAO,ENphB1B,GAAO;;AMqhBpB,kBAAkC;EAAE,OAAO,ENd1B,GAAO;;AMexB,gBAAgC;EAAE,OAAO,ENnD1B,GAAO;;AMoDtB,iBAAiC;EAAE,OAAO,ENvF1B,GAAO;;AMwFvB,iBAAiC;EAAE,OAAO,ENrP1B,GAAO", +"sources": ["../scss/_path.scss","../scss/_core.scss","../scss/_larger.scss","../scss/_fixed-width.scss","../scss/_list.scss","../scss/_variables.scss","../scss/_bordered-pulled.scss","../scss/_animated.scss","../scss/_rotated-flipped.scss","../scss/_mixins.scss","../scss/_stacked.scss","../scss/_icons.scss"], +"names": [], +"file": "font-awesome.css" +} diff --git a/Frontend/src/assets/css/font-awesome.min.css b/Frontend/src/assets/css/font-awesome.min.css new file mode 100644 index 0000000..1da3fa4 --- /dev/null +++ b/Frontend/src/assets/css/font-awesome.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + @font-face{font-family:'FontAwesome'; + src: url('../fonts/fontawesome-webfont.woff2') format('woff2'), url('../fonts/fontawesome-webfont.woff') format('woff');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.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} diff --git a/Frontend/src/assets/css/sonicglyph.css b/Frontend/src/assets/css/sonicglyph.css new file mode 100644 index 0000000..70fd93f --- /dev/null +++ b/Frontend/src/assets/css/sonicglyph.css @@ -0,0 +1,14 @@ +@font-face { + font-family: 'sonicglyph'; + src: url('../fonts/sonicglyph.woff') format('woff'); + font-weight: normal; + font-style: normal; +} +.s-glyph { + display: inline-block; + font: normal normal normal 16px/1 sonicglyph; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/Frontend/src/assets/fonts/OpenSans-Italic.woff b/Frontend/src/assets/fonts/OpenSans-Italic.woff new file mode 100644 index 0000000..c8c7eb8 Binary files /dev/null and b/Frontend/src/assets/fonts/OpenSans-Italic.woff differ diff --git a/Frontend/src/assets/fonts/OpenSans-Regular.woff b/Frontend/src/assets/fonts/OpenSans-Regular.woff new file mode 100644 index 0000000..1e172e0 Binary files /dev/null and b/Frontend/src/assets/fonts/OpenSans-Regular.woff differ diff --git a/Frontend/src/assets/fonts/OpenSans-Semibold.woff b/Frontend/src/assets/fonts/OpenSans-Semibold.woff new file mode 100644 index 0000000..a4a8e55 Binary files /dev/null and b/Frontend/src/assets/fonts/OpenSans-Semibold.woff differ diff --git a/Frontend/src/assets/fonts/fontawesome-webfont.woff b/Frontend/src/assets/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..6e7483c Binary files /dev/null and b/Frontend/src/assets/fonts/fontawesome-webfont.woff differ diff --git a/Frontend/src/assets/fonts/fontawesome-webfont.woff2 b/Frontend/src/assets/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..7eb74fd Binary files /dev/null and b/Frontend/src/assets/fonts/fontawesome-webfont.woff2 differ diff --git a/Frontend/src/assets/images/Secunda.zip b/Frontend/src/assets/images/Secunda.zip new file mode 100644 index 0000000..ff439b6 Binary files /dev/null and b/Frontend/src/assets/images/Secunda.zip differ diff --git a/Frontend/src/assets/images/bookstore.png b/Frontend/src/assets/images/bookstore.png new file mode 100644 index 0000000..9d2b8c6 Binary files /dev/null and b/Frontend/src/assets/images/bookstore.png differ diff --git a/Frontend/src/assets/images/logo.svg b/Frontend/src/assets/images/logo.svg new file mode 100644 index 0000000..04432a6 --- /dev/null +++ b/Frontend/src/assets/images/logo.svg @@ -0,0 +1,28 @@ + + + my vector image + + + + + Layer 1 + + + +

+ Sprin +

+
+ +

+ Gular +

+
+
+ + +
diff --git a/Frontend/src/assets/scss/_base.scss b/Frontend/src/assets/scss/_base.scss new file mode 100644 index 0000000..a27a4bb --- /dev/null +++ b/Frontend/src/assets/scss/_base.scss @@ -0,0 +1,78 @@ +body { + font-size:12px; + font-weight: normal; + overflow: auto; + margin:0; + padding:0; +} + +.s-f1 { font:$s-f1-size;} +.s-f2 { font:$s-f2-size;} +.s-f3 { font:$s-f3-size;} +.s-f4 { font:$s-f4-size;} +.s-f5 { font:$s-f5-size;} +.s-f6 { font:$s-f6-size;} + +.s-f-tiny { font-size:$s-f-tiny-size;} +.s-f-body { font-size:$s-f-body-size;} +.s-f-small { font-size:$s-f-small-size;} +.s-f-medium { font-size:$s-f-medium-size;} +.s-f-large { font-size:$s-f-large-size;} + +.s-bold-500 { font-weight: 500; } +.s-bold-600 { font-weight: 600; } +.s-bold { font-weight: bold; } + +.s-c-text { color: $s-c-text; } +.s-c-inverse-text { color: $s-c-inverse-text; } +.s-c-disable-text { color: $s-c-disable-text; } + +.s-c-white { color: $s-c-white; } +.s-c-gray { color: $s-c-gray; } +.s-c-primary { color: $s-c-primary; } +.s-c-info { color: $s-c-info; } +.s-c-error { color: $s-c-error; } +.s-c-warning { color: $s-c-warning; } +.s-c-good { color: $s-c-good; } + +.s-bg-main { background-color: $s-bg-main; } +.s-bg-inverse { background-color: $s-bg-inverse; } +.s-bg-soft-white { background-color: $s-bg-soft-white;} +.s-bg-info { background-color: $s-c-info; } +.s-bg-error { background-color: $s-c-error; } +.s-bg-warning { background-color: $s-c-warning; } +.s-bg-good { background-color: $s-c-good; } + +.s-shadow-1 { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } +.s-shadow-2 { box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); } +.s-shadow-3 { box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); } +.s-shadow-4 { box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); } +.s-shadow-5 { box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22); } + +.s-hidden { display: none;} +.s-ellipses { text-overflow: ellipsis;overflow: hidden;} +.s-nowrap { white-space: nowrap;} +.s-err-msg { color: $s-c-error;} +.s-link { color :$s-c-link-text;cursor:pointer;text-decoration: none;} +.s-link:hover { text-decoration: underline;} + +.pad-16{ padding:16px; margin-left: 300px;} +.no-margin{ padding:0; margin:0} + +.s-hbox-align-right{ + display: flex; + justify-content: flex-end; + flex-direction: row; +} + +.s-hbox-align-left{ + display: flex; + justify-content: flex-start; + flex-direction: row; +} + +.s-hbox-align-center{ + display: flex; + justify-content: center; + flex-direction: row; +} diff --git a/Frontend/src/assets/scss/_base.scss~7e877128953f01225c7f977ebe54c7ae2aef2cab b/Frontend/src/assets/scss/_base.scss~7e877128953f01225c7f977ebe54c7ae2aef2cab new file mode 100644 index 0000000..512587b --- /dev/null +++ b/Frontend/src/assets/scss/_base.scss~7e877128953f01225c7f977ebe54c7ae2aef2cab @@ -0,0 +1,90 @@ +body { + font-size:12px; + font-weight: normal; + overflow: auto; + margin:0; + padding:0; +} + +/* +h1 { font:$s-f1-size $s-f-family;font-weight:600 } +h2 { font:$s-f2-size $s-f-family;font-weight:600 } +h3 { font:$s-f3-size $s-f-family;font-weight:600 } +h4 { font:$s-f4-size $s-f-family;font-weight:600 } +h5 { font:$s-f5-size $s-f-family;font-weight:600 } +h6 { font:$s-f6-size $s-f-family;font-weight:600 } +*/ + +//.s-f {font-family: $s-f-family;} +.s-f1 { font:$s-f1-size;} +.s-f2 { font:$s-f2-size;} +.s-f3 { font:$s-f3-size;} +.s-f4 { font:$s-f4-size;} +.s-f5 { font:$s-f5-size;} +.s-f6 { font:$s-f6-size;} + +.s-f-tiny { font-size:$s-f-tiny-size;} +.s-f-body { font-size:$s-f-body-size;} +.s-f-small { font-size:$s-f-small-size;} +.s-f-medium { font-size:$s-f-medium-size;} +.s-f-large { font-size:$s-f-large-size;} + +.s-bold-500 { font-weight: 500; } +.s-bold-600 { font-weight: 600; } +.s-bold { font-weight: bold; } // weight:700 + +.s-c-text { color: $s-c-text; } +.s-c-inverse-text { color: $s-c-inverse-text; } +.s-c-disable-text { color: $s-c-disable-text; } + +.s-c-white { color: $s-c-white; } +.s-c-gray { color: $s-c-gray; } +.s-c-primary { color: $s-c-primary; } +.s-c-info { color: $s-c-info; } +.s-c-error { color: $s-c-error; } +.s-c-warning { color: $s-c-warning; } +.s-c-good { color: $s-c-good; } + +.s-bg-main { background-color: $s-bg-main; } +.s-bg-inverse { background-color: $s-bg-inverse; } +.s-bg-soft-white { background-color: $s-bg-soft-white;} +.s-bg-info { background-color: $s-c-info; } +.s-bg-error { background-color: $s-c-error; } +.s-bg-warning { background-color: $s-c-warning; } +.s-bg-good { background-color: $s-c-good; } + +.s-shadow-1 { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } +.s-shadow-2 { box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); } +.s-shadow-3 { box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); } +.s-shadow-4 { box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); } +.s-shadow-5 { box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22); } + +.s-hidden { display: none;} +.s-ellipses { text-overflow: ellipsis;overflow: hidden;} +.s-nowrap { white-space: nowrap;} +.s-err-msg { color: $s-c-error;} +.s-link { color :$s-c-link-text;cursor:pointer;text-decoration: none;} +.s-link:hover { text-decoration: underline;} + +//Padding +.pad-16{ padding:16px;} +.no-margin{ padding:0; margin:0} + +//Align +.s-hbox-align-right{ + display: flex; + justify-content: flex-end; + flex-direction: row; +} + +.s-hbox-align-left{ + display: flex; + justify-content: flex-start; + flex-direction: row; +} + +.s-hbox-align-center{ + display: flex; + justify-content: center; + flex-direction: row; +} diff --git a/Frontend/src/assets/scss/_base.scss~HEAD b/Frontend/src/assets/scss/_base.scss~HEAD new file mode 100644 index 0000000..512587b --- /dev/null +++ b/Frontend/src/assets/scss/_base.scss~HEAD @@ -0,0 +1,90 @@ +body { + font-size:12px; + font-weight: normal; + overflow: auto; + margin:0; + padding:0; +} + +/* +h1 { font:$s-f1-size $s-f-family;font-weight:600 } +h2 { font:$s-f2-size $s-f-family;font-weight:600 } +h3 { font:$s-f3-size $s-f-family;font-weight:600 } +h4 { font:$s-f4-size $s-f-family;font-weight:600 } +h5 { font:$s-f5-size $s-f-family;font-weight:600 } +h6 { font:$s-f6-size $s-f-family;font-weight:600 } +*/ + +//.s-f {font-family: $s-f-family;} +.s-f1 { font:$s-f1-size;} +.s-f2 { font:$s-f2-size;} +.s-f3 { font:$s-f3-size;} +.s-f4 { font:$s-f4-size;} +.s-f5 { font:$s-f5-size;} +.s-f6 { font:$s-f6-size;} + +.s-f-tiny { font-size:$s-f-tiny-size;} +.s-f-body { font-size:$s-f-body-size;} +.s-f-small { font-size:$s-f-small-size;} +.s-f-medium { font-size:$s-f-medium-size;} +.s-f-large { font-size:$s-f-large-size;} + +.s-bold-500 { font-weight: 500; } +.s-bold-600 { font-weight: 600; } +.s-bold { font-weight: bold; } // weight:700 + +.s-c-text { color: $s-c-text; } +.s-c-inverse-text { color: $s-c-inverse-text; } +.s-c-disable-text { color: $s-c-disable-text; } + +.s-c-white { color: $s-c-white; } +.s-c-gray { color: $s-c-gray; } +.s-c-primary { color: $s-c-primary; } +.s-c-info { color: $s-c-info; } +.s-c-error { color: $s-c-error; } +.s-c-warning { color: $s-c-warning; } +.s-c-good { color: $s-c-good; } + +.s-bg-main { background-color: $s-bg-main; } +.s-bg-inverse { background-color: $s-bg-inverse; } +.s-bg-soft-white { background-color: $s-bg-soft-white;} +.s-bg-info { background-color: $s-c-info; } +.s-bg-error { background-color: $s-c-error; } +.s-bg-warning { background-color: $s-c-warning; } +.s-bg-good { background-color: $s-c-good; } + +.s-shadow-1 { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } +.s-shadow-2 { box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); } +.s-shadow-3 { box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); } +.s-shadow-4 { box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); } +.s-shadow-5 { box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22); } + +.s-hidden { display: none;} +.s-ellipses { text-overflow: ellipsis;overflow: hidden;} +.s-nowrap { white-space: nowrap;} +.s-err-msg { color: $s-c-error;} +.s-link { color :$s-c-link-text;cursor:pointer;text-decoration: none;} +.s-link:hover { text-decoration: underline;} + +//Padding +.pad-16{ padding:16px;} +.no-margin{ padding:0; margin:0} + +//Align +.s-hbox-align-right{ + display: flex; + justify-content: flex-end; + flex-direction: row; +} + +.s-hbox-align-left{ + display: flex; + justify-content: flex-start; + flex-direction: row; +} + +.s-hbox-align-center{ + display: flex; + justify-content: center; + flex-direction: row; +} diff --git a/Frontend/src/assets/scss/_var.scss b/Frontend/src/assets/scss/_var.scss new file mode 100644 index 0000000..9cbe03f --- /dev/null +++ b/Frontend/src/assets/scss/_var.scss @@ -0,0 +1,43 @@ +$s-f-family: Metropolis,Avenir Next,Helvetica Neue,Arial,sans-serif; +$s-f1-size: 24px; +$s-f2-size: 20px; +$s-f3-size: 18px; +$s-f4-size: 16px; +$s-f5-size: 14px; +$s-f6-size: 12px; +$s-f-body-size: 12px; +$s-f-tiny-size: 10px; +$s-f-small-size : 16px; +$s-f-medium-size: 24px; +$s-f-large-size : 32px; + +//****************** Color Scheme ******************** + +//Status Colors +$s-c-error : #CE1126; //critical +$s-c-warning: #E3642B; +$s-c-alert : #FFCC00; +$s-c-good : #6EA204; +$s-c-info : #007cbb; + +//Text Colors +$s-c-text : #333; // Main Text color used in most places +$s-c-inverse-text : #eee; // Text Color used on contrasting backgrounds such as buttons/tabs +$s-c-disable-text : gray; // Text Color used for displaying less emphasized text (eg:detail chart axis color) +$s-c-link-text : #007cbb; + +//Backgrounds +$s-bg-main : #ffffff; // Main Body Background Color +$s-bg-soft-white : whitesmoke; // Alternate Body Background (Such as Windows, Panels, Dropdowns) +$s-bg-inverse : #32404e; +$s-bg-gray : rgb(250, 250, 250); +$s-bg-white : #fff; + +//Borders +$s-c-bd : #ccc; + +//Named Colors +$s-c-white : #fff; +$s-c-gray : gray; +$s-c-soft-white : whitesmoke; +$s-c-primary : #005d84; diff --git a/Frontend/src/environments/environment.prod.ts b/Frontend/src/environments/environment.prod.ts new file mode 100644 index 0000000..0783a04 --- /dev/null +++ b/Frontend/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/Frontend/src/environments/environment.ts b/Frontend/src/environments/environment.ts new file mode 100644 index 0000000..e6e6852 --- /dev/null +++ b/Frontend/src/environments/environment.ts @@ -0,0 +1,8 @@ +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `angular-cli.json`. + +export const environment = { + production: false +}; diff --git a/Frontend/src/favicon.ico b/Frontend/src/favicon.ico new file mode 100644 index 0000000..24ad088 Binary files /dev/null and b/Frontend/src/favicon.ico differ diff --git a/Frontend/src/index.html b/Frontend/src/index.html new file mode 100644 index 0000000..5362a98 --- /dev/null +++ b/Frontend/src/index.html @@ -0,0 +1,17 @@ + + + + + + Bookstore + + + + + + + + Loading datas + + + diff --git a/Frontend/src/main.ts b/Frontend/src/main.ts new file mode 100644 index 0000000..5e48312 --- /dev/null +++ b/Frontend/src/main.ts @@ -0,0 +1,10 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { enableProdMode } from '@angular/core'; +import { environment } from './environments/environment'; +import { AppModule } from './app/app.module'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/Frontend/src/polyfills.ts b/Frontend/src/polyfills.ts new file mode 100644 index 0000000..4727980 --- /dev/null +++ b/Frontend/src/polyfills.ts @@ -0,0 +1,17 @@ +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/weak-map'; +import 'core-js/es6/set'; + +import 'core-js/es7/reflect'; +import 'zone.js/dist/zone'; diff --git a/Frontend/src/styles.scss b/Frontend/src/styles.scss new file mode 100644 index 0000000..3afbf8a --- /dev/null +++ b/Frontend/src/styles.scss @@ -0,0 +1,109 @@ +@import './assets/scss/var'; +@import './assets/scss/base'; + +html { + width: 100%; + min-height: 100vh; +} +body { + width: 100%; + background-color: $s-bg-gray; +} + + +ngx-datatable { + font-family: Metropolis,Avenir Next,Helvetica Neue,Arial,sans-serif; + font-size:13px; + border:1px solid #ccc; + border-radius: 2px; + padding:0; + background-color: #fff; + .datatable-header, .datatable-footer { + font-size:11px; + line-height:18px; + font-weight:bold; + background-color:#fafafa; + } + .datatable-header{ + box-shadow: 0 2px 4px 0px #ccc; + .datatable-header-cell{ + line-height:22px; + padding-left:10px; + height:22px; + } + } + .datatable-header .datatable-header-cell:not(:first-child) { + border-left:1px solid #ccc; + } + + .datatable-footer{ + border-top: 1px solid #ccc; + .page-count{ + margin: 10px; + } + .pages a{ + padding:8px; + color:inherit; + } + .pages.active a{ + padding:8px; + color:#007cbb; + background-color:#ddd; + text-align: center; + } + } + + .datatable-header-inner{ + padding:12px; + } + .datatable-body-cell{ + padding:8px 0 10px 20px; + border-top: 1px solid #ddd; + } + .pager i { + font-size:18px; + vertical-align: middle; + } + +} + +ngx-charts-advanced-pie-chart .item-value{ + margin-top: 0 !important; +} + +header.legend-title{ + background-color: transparent; + color:#333; + height:inherit; +} + +.s-dashboard-pg .chart-legend .legend-wrap { + width: 105px; +} + + +.s-badge{ + font-size:11px; + font-weight:normal; + border-radius: 2px; + padding:2px 5px; + + &.s-badge-error, + &.s-badge-onhold { background-color: $s-c-error; color:$s-c-white;} + &.s-badge-warning { background-color: #ff8e28; color:$s-c-text;} + &.s-badge-good { background-color: $s-c-good; color:$s-c-text;} + &.s-badge-new { background-color: $s-c-info; color:$s-c-white;} +} + +.tile{ + display:flex; + padding:16px; + margin:16px; + border-radius:2px; + &.column { flex-direction: column;} + &.center { align-items: center;} + &.white { + background-color: $s-bg-white; + border:1px solid #ccc; + } +} diff --git a/Frontend/src/tsconfig.json b/Frontend/src/tsconfig.json new file mode 100644 index 0000000..0f2bbb7 --- /dev/null +++ b/Frontend/src/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "../dist/out-tsc", + "baseUrl": "", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es5", + "typeRoots": [ + "./node_modules/@types" + ], + "lib": ["es2017", "dom"], + "module": "es2015", + "types": [] + } +} diff --git a/Frontend/src/typings.d.ts b/Frontend/src/typings.d.ts new file mode 100644 index 0000000..7403592 --- /dev/null +++ b/Frontend/src/typings.d.ts @@ -0,0 +1,2 @@ +declare var System: any; +declare var require: any; diff --git a/Frontend/tslint.json b/Frontend/tslint.json new file mode 100644 index 0000000..f3a82a2 --- /dev/null +++ b/Frontend/tslint.json @@ -0,0 +1,141 @@ +{ + "rulesDirectory": [ + "node_modules/codelyzer" + ], + "rules": { + "arrow-return-shorthand": true, + "callable-types": true, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": true, + "eofline": true, + "forin": true, + "import-blacklist": [ + true, + "rxjs", + "rxjs/Rx" + ], + "import-spacing": true, + "indent": [ + true, + "spaces" + ], + "interface-over-type-literal": true, + "label-position": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-super": true, + "no-empty": false, + "no-empty-interface": true, + "no-eval": true, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-misused-new": true, + "no-non-null-assertion": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-string-throw": true, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unnecessary-initializer": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "prefer-const": true, + "quotemark": [ + true, + "single" + ], + "radix": true, + "semicolon": [ + true, + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "typeof-compare": true, + "unified-signatures": true, + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ], + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true, + "invoke-injectable": true + } + } diff --git a/README.md b/README.md index 7401265..32bb48d 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,36 @@ -# SpringBootAngular4Crud - -![angular4](https://user-images.githubusercontent.com/21153996/34914355-30622e76-f922-11e7-99f8-12b8e51495da.PNG) - -# Angular 4 Frontend - -This project was generated to make crud operations via ANGULAR 4. - -## SpringBootCrudApi - -RestFul Service uses following Technologies: - -* Spring-boot -* Hibernate -* JaCoCo -* H2 DB -* Swagger2 - -## Build - -Run mvn clean install - -## Run - -First run SpringBootCrudApi then run Angular4 project. - -## SpringBootService - -Run spring-boot-run. - -## Angular -On the package.json directory for angular run in order : - -* npm install -* ng serve - -Add/Remove/Edit Configurations on http://localhost:4200/ - -## Running Integration Test - -Run mvn clean verify -P integration-test - -## Running Service Unit Tests - -Run mvn clean verify -P all-tests - -## Documentation - -To get more look at http://localhost:8080/swagger-ui.html#/ +# Bookstore (Angular Frontend & SpringBoot Backend) +![angular4](https://i.imgur.com/ojfFs39.png) + +## Prerequisites + +- Java 8 +- Maven 3.3.9+ +- Node 6.0+ , +- npm 5+, +- Angular-cli 1.6.3 + +### Features of the Project +* Backend + * Token Based Security + * In Memory DB with H2 + * Using JPA and JDBC template to talk to relational database + * How to request and respond for paginated data + +* Frontend + * Organizing Components, Services, Directives, Pages etc in an Angular App + * Lazy load data + * Routing and guarding pages that needs authentication + * Basic visulaization + +## Angular + + npm install + ng serve + +Add/Remove/Edit Configurations on http://localhost:4200/ + +## Backend + + IntelliJ IDEA + Run the main class + diff --git a/SpringBootCrudApi/mvnw b/SpringBootCrudApi/mvnw index 5bf251c..7778d42 100644 --- a/SpringBootCrudApi/mvnw +++ b/SpringBootCrudApi/mvnw @@ -1,225 +1,225 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -echo $MAVEN_PROJECTBASEDIR -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +echo $MAVEN_PROJECTBASEDIR +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/SpringBootCrudApi/mvnw.cmd b/SpringBootCrudApi/mvnw.cmd index 019bd74..48c810e 100644 --- a/SpringBootCrudApi/mvnw.cmd +++ b/SpringBootCrudApi/mvnw.cmd @@ -1,143 +1,143 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/SpringBootCrudApi/pom.xml b/SpringBootCrudApi/pom.xml index 3e95fa5..02ed66a 100644 --- a/SpringBootCrudApi/pom.xml +++ b/SpringBootCrudApi/pom.xml @@ -1,114 +1,114 @@ - - - 4.0.0 - - com.cengenes - SpringBootCrudApi - 1.0.0 - jar - - DynamicConfigurationService - Demo project for Spring Boot - - - org.springframework.boot - spring-boot-starter-parent - 1.5.9.RELEASE - - - - - 2.7.0 - UTF-8 - UTF-8 - 1.8 - 0.7.9 - - - - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - - io.springfox - springfox-swagger2 - ${springfox-swagger2.version} - - - io.springfox - springfox-swagger-ui - ${springfox-swagger2.version} - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-actuator-docs - - - org.springframework.boot - spring-boot-starter-data-jpa - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-devtools - runtime - - - com.h2database - h2 - runtime - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.jacoco - jacoco-maven-plugin - ${org.jacoco.version} - - - - prepare-agent - - - - report - test - - report - - - - - - - - - + + + 4.0.0 + + com.cengenes + SpringBootCrudApi + 1.0.0 + jar + + DynamicConfigurationService + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + + + 2.7.0 + UTF-8 + UTF-8 + 1.8 + 0.7.9 + + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + io.springfox + springfox-swagger2 + ${springfox-swagger2.version} + + + io.springfox + springfox-swagger-ui + ${springfox-swagger2.version} + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-actuator-docs + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + + + com.h2database + h2 + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.jacoco + jacoco-maven-plugin + ${org.jacoco.version} + + + + prepare-agent + + + + report + test + + report + + + + + + + + + diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/DynamicConfigurationServiceApplication.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/DynamicConfigurationServiceApplication.java index 3064b91..fc72af8 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/DynamicConfigurationServiceApplication.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/DynamicConfigurationServiceApplication.java @@ -1,12 +1,13 @@ -package com.cengenes.configuration.api; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class DynamicConfigurationServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(DynamicConfigurationServiceApplication.class, args); - } -} +package com.cengenes.configuration.api; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +public class DynamicConfigurationServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(DynamicConfigurationServiceApplication.class, args); + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/LocalizationConfiguration.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/LocalizationConfiguration.java index a1d7fc1..59ef825 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/LocalizationConfiguration.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/LocalizationConfiguration.java @@ -1,50 +1,50 @@ -package com.cengenes.configuration.api.conf; - -import java.util.Locale; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ResourceBundleMessageSource; -import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.i18n.CookieLocaleResolver; -import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; - -/** - * - * @author enes.acikoglu - * - */ - -@Configuration -public class LocalizationConfiguration extends WebMvcConfigurerAdapter { - - @Bean - public LocaleResolver localeResolver() { - CookieLocaleResolver slr = new CookieLocaleResolver(); - slr.setDefaultLocale(new Locale("tr")); - return slr; - } - - @Bean - public ResourceBundleMessageSource messageSource() { - ResourceBundleMessageSource source = new ResourceBundleMessageSource(); - source.setBasenames("i18n/messages"); - source.setUseCodeAsDefaultMessage(true); - source.setDefaultEncoding("UTF-8"); - return source; - } - - @Bean - public LocaleChangeInterceptor localeChangeInterceptor() { - LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); - localeChangeInterceptor.setParamName("lang"); - return localeChangeInterceptor; - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(localeChangeInterceptor()); - } -} +package com.cengenes.configuration.api.conf; + +import java.util.Locale; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.i18n.CookieLocaleResolver; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; + +/** + * + * @author enes.acikoglu + * + */ + +@Configuration +public class LocalizationConfiguration extends WebMvcConfigurerAdapter { + + @Bean + public LocaleResolver localeResolver() { + CookieLocaleResolver slr = new CookieLocaleResolver(); + slr.setDefaultLocale(new Locale("tr")); + return slr; + } + + @Bean + public ResourceBundleMessageSource messageSource() { + ResourceBundleMessageSource source = new ResourceBundleMessageSource(); + source.setBasenames("i18n/messages"); + source.setUseCodeAsDefaultMessage(true); + source.setDefaultEncoding("UTF-8"); + return source; + } + + @Bean + public LocaleChangeInterceptor localeChangeInterceptor() { + LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); + localeChangeInterceptor.setParamName("lang"); + return localeChangeInterceptor; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(localeChangeInterceptor()); + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/SwaggerConfig.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/SwaggerConfig.java index cb99ae4..64f6d2d 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/SwaggerConfig.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/conf/SwaggerConfig.java @@ -1,28 +1,28 @@ -package com.cengenes.configuration.api.conf; - -import static springfox.documentation.builders.PathSelectors.regex; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.google.common.base.Predicate; - -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -@Configuration -@EnableSwagger2 -public class SwaggerConfig { - @Bean - public Docket api() { - return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(postPaths()) - .build(); - - } - - private Predicate postPaths() { - return regex("/api.*"); - } +package com.cengenes.configuration.api.conf; + +import static springfox.documentation.builders.PathSelectors.regex; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.google.common.base.Predicate; + +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(postPaths()) + .build(); + + } + + private Predicate postPaths() { + return regex("/api.*"); + } } \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/BookController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/BookController.java new file mode 100644 index 0000000..f79d3c9 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/BookController.java @@ -0,0 +1,103 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.book.Book; +import com.cengenes.configuration.api.entity.book.BookResponse; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.repository.BookRepository; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.MediaType; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; + +@RestController +@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_VALUE) +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class BookController { + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private BookRepository bookRepository; + + @Autowired + private AuthService authService; + + @RequestMapping(value = "/books", method = RequestMethod.GET) + public BookResponse getProductsByPage( + @RequestParam(value = "page", defaultValue = "0", required = false) Integer page, + @RequestParam(value = "size", defaultValue = "20", required = false) Integer size, + @RequestParam(value = "bookId", required = false) Integer bookId, + @RequestParam(value = "category", required = false) String category, + @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response, + Pageable pageable + ) { + authService.authenticate(authorization, response); + BookResponse resp = new BookResponse(); + if (response.getStatus() == 200) { + Book qry = new Book(); + if (bookId != null) { + qry.setId(bookId); + } + if (category != null) { + qry.setCategory(category); + } + + Page productPage = bookRepository.findAll(org.springframework.data.domain.Example.of(qry), pageable); + resp.setPageStats(productPage, true); + resp.setItems(productPage.getContent()); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + + @PostMapping(value = "/books", produces = {"application/json"}) + public OperationResponse addNewProduct(@RequestBody Book book, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + OperationResponse resp = new OperationResponse(); + if (response.getStatus() == 200) { + if (this.bookRepository.findBookById(book.getId()) != null) { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage("Unable to add Product - Product already exist "); + } else { + //Product addedProduct = this.productRepo.save(product); + this.bookRepository.save(book); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("Product Added"); + } + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + + @RequestMapping(value = "/books/{bookId}", method = RequestMethod.DELETE, produces = {"application/json"}) + public OperationResponse deleteProduct(@PathVariable("bookId") Integer bookId, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + OperationResponse resp = new OperationResponse(); + if (response.getStatus() == 200) { + if (this.bookRepository.findBookById(bookId) != null) { + this.bookRepository.deleteById(bookId); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("Product Deleted"); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage("No Product Exist"); + } + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/BookStatsController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/BookStatsController.java new file mode 100644 index 0000000..c84e386 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/BookStatsController.java @@ -0,0 +1,53 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.data.SingleSeries; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.entity.response.SingleDataSeriesResponse; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_VALUE) +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class BookStatsController { + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private AuthService authService; + + @RequestMapping(value = "/book-stats-by-quantity", method = RequestMethod.GET) + public SingleDataSeriesResponse getProductStatsByQuantity(@RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + SingleDataSeriesResponse resp = new SingleDataSeriesResponse(); + if (response.getStatus() == 200) { + String sql = "select book_name as name, sum(quantity) as value from A_TEAM.order_details group by book_name "; + SingleSeries singleSerise; + + ArrayList dataItemList = new ArrayList<>(); + + List> list = jdbcTemplate.queryForList(sql); + + for (Map row : list) { + singleSerise = new SingleSeries((String) row.get("name"), (BigDecimal) row.get("value")); + dataItemList.add(singleSerise); + } + resp.setItems(dataItemList); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("Orders by Quantity Ordered"); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + return resp; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ConfigurationAngularController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ConfigurationAngularController.java index d637b9a..2030280 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ConfigurationAngularController.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ConfigurationAngularController.java @@ -1,68 +1,68 @@ -package com.cengenes.configuration.api.controller; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; -import com.cengenes.configuration.api.entity.Configuration; -import com.cengenes.configuration.api.repository.ConfigurationRepository; - -@RestController -@RequestMapping("/api/ang/") -@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") -public class ConfigurationAngularController { - - @Autowired - private ConfigurationRepository configurationRepository; - - @GetMapping("/configuration/{id}") - public ResponseEntity getConfigurationById(@PathVariable Long id) { - - return new ResponseEntity<>(configurationRepository.findOne(id), HttpStatus.OK); - } - - @PostMapping("/configuration") - public ResponseEntity saveConfiguration(@RequestBody Configuration request) { - - return new ResponseEntity<>(configurationRepository.save(request), HttpStatus.CREATED); - } - - @GetMapping("/configurations") - public ResponseEntity findAllConfigurations() { - - return new ResponseEntity<>(configurationRepository.findAll(), HttpStatus.OK); - } - - @GetMapping("/configuration/appname/{appname}") - public ResponseEntity getAllActiveConfigurationsByApplicationName(@PathVariable String appname) { - - return new ResponseEntity<>(configurationRepository.findByApplicationNameAndIsActive(appname, Boolean.TRUE), - HttpStatus.OK); - } - - @PutMapping("/configuration/{id}") - public ResponseEntity updateConfiguration(@RequestBody Configuration request, BindingResult result) { - - Configuration update = configurationRepository.saveAndFlush(request); - - return new ResponseEntity<>(update, HttpStatus.OK); - } - - @DeleteMapping("/configuration/{id}") - @ResponseStatus(HttpStatus.NO_CONTENT) - public void delete(@PathVariable Long id) { - configurationRepository.delete(id); - } - -} +package com.cengenes.configuration.api.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import com.cengenes.configuration.api.entity.Configuration; +import com.cengenes.configuration.api.repository.ConfigurationRepository; + +@RestController +@RequestMapping("/api/ang/") +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class ConfigurationAngularController { + + @Autowired + private ConfigurationRepository configurationRepository; + + @GetMapping("/configuration/{id}") + public ResponseEntity getConfigurationById(@PathVariable Long id) { + + return new ResponseEntity<>(configurationRepository.getOne(id), HttpStatus.OK); + } + + @PostMapping("/configuration") + public ResponseEntity saveConfiguration(@RequestBody Configuration request) { + + return new ResponseEntity<>(configurationRepository.save(request), HttpStatus.CREATED); + } + + @GetMapping("/configurations") + public ResponseEntity findAllConfigurations() { + + return new ResponseEntity<>(configurationRepository.findAll(), HttpStatus.OK); + } + + @GetMapping("/configuration/appname/{appname}") + public ResponseEntity getAllActiveConfigurationsByApplicationName(@PathVariable String appname) { + + return new ResponseEntity<>(configurationRepository.findByApplicationNameAndIsActive(appname, Boolean.TRUE), + HttpStatus.OK); + } + + @PutMapping("/configuration/{id}") + public ResponseEntity updateConfiguration(@RequestBody Configuration request, BindingResult result) { + + Configuration update = configurationRepository.saveAndFlush(request); + + return new ResponseEntity<>(update, HttpStatus.OK); + } + + @DeleteMapping("/configuration/{id}") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void delete(@PathVariable Long id) { + configurationRepository.delete(id); + } + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ControllerExceptionHandler.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ControllerExceptionHandler.java index d409097..dc785a3 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ControllerExceptionHandler.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/ControllerExceptionHandler.java @@ -1,62 +1,62 @@ -package com.cengenes.configuration.api.controller; - -import java.util.Locale; - -import javax.servlet.http.HttpServletRequest; - -import org.springframework.context.MessageSource; -import org.springframework.context.i18n.LocaleContextHolder; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -import com.cengenes.configuration.api.dto.Response; -import com.cengenes.configuration.api.exception.EntityNotFoundException; -import com.cengenes.configuration.api.exception.MissingMandatoryFieldException; -import com.cengenes.configuration.api.types.RequestStatus; - -/** - * @author enes.acikoglu - */ -@RestControllerAdvice -public class ControllerExceptionHandler { - - private MessageSource messageSource; - - public ControllerExceptionHandler(MessageSource messageSource) { - this.messageSource = messageSource; - } - - @ExceptionHandler(EntityNotFoundException.class) - @ResponseStatus(HttpStatus.NOT_FOUND) - public Response handleNotFoundException(HttpServletRequest request, Exception exception) { - return createLocalizedResponse(exception); - } - - @ExceptionHandler(MissingMandatoryFieldException.class) - @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) - public Response handleMissingFieldException(HttpServletRequest request, Exception exception) { - return createLocalizedResponse(exception); - } - - /** - * Parse exception that is configured with localization ENG/TR languages. - * - * @param exception - * @return Custom Response Message. - */ - private Response createLocalizedResponse(Exception exception) { - - Response response = new Response(); - - Locale locale = LocaleContextHolder.getLocale(); - String message = messageSource.getMessage(exception.getMessage(), null, locale); - String[] split = message.split(";"); - response.setErrorCode(split[0]); - response.setErrorMessage(split[1]); - - response.setStatus(RequestStatus.FAILURE); - return response; - } +package com.cengenes.configuration.api.controller; + +import java.util.Locale; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import com.cengenes.configuration.api.dto.Response; +import com.cengenes.configuration.api.exception.EntityNotFoundException; +import com.cengenes.configuration.api.exception.MissingMandatoryFieldException; +import com.cengenes.configuration.api.types.RequestStatus; + +/** + * @author enes.acikoglu + */ +@RestControllerAdvice +public class ControllerExceptionHandler { + + private MessageSource messageSource; + + public ControllerExceptionHandler(MessageSource messageSource) { + this.messageSource = messageSource; + } + + @ExceptionHandler(EntityNotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public Response handleNotFoundException(HttpServletRequest request, Exception exception) { + return createLocalizedResponse(exception); + } + + @ExceptionHandler(MissingMandatoryFieldException.class) + @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) + public Response handleMissingFieldException(HttpServletRequest request, Exception exception) { + return createLocalizedResponse(exception); + } + + /** + * Parse exception that is configured with localization ENG/TR languages. + * + * @param exception + * @return Custom Response Message. + */ + private Response createLocalizedResponse(Exception exception) { + + Response response = new Response(); + + Locale locale = LocaleContextHolder.getLocale(); + String message = messageSource.getMessage(exception.getMessage(), null, locale); + String[] split = message.split(";"); + response.setErrorCode(split[0]); + response.setErrorMessage(split[1]); + + response.setStatus(RequestStatus.FAILURE); + return response; + } } \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/CustomerController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/CustomerController.java new file mode 100644 index 0000000..eacfd68 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/CustomerController.java @@ -0,0 +1,107 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.customer.Customer; +import com.cengenes.configuration.api.entity.customer.CustomerResponse; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.repository.CustomerRepository; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.MediaType; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; + +@RestController +@Transactional +@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_VALUE) +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class CustomerController { + + @Autowired + private CustomerRepository customerRepository; + + @Autowired + private AuthService authService; + + @GetMapping(value = "/customers") + public CustomerResponse getCustomersByPage(@RequestParam(value = "page", defaultValue = "0", required = false) Integer page, + @RequestParam(value = "size", defaultValue = "20", required = false) Integer size, + @RequestParam(value = "customerid", required = false) Integer customerId, + @RequestParam(value = "company", required = false) String company, + @RequestParam(value = "country", required = false) String country, + @RequestHeader(value = "Authorization") String authorization, + Pageable pageable, HttpServletResponse response) { + authService.authenticate(authorization, response); + CustomerResponse customerResponse = new CustomerResponse(); + if (response.getStatus() == 200) { + Customer qry = new Customer(); + if (customerId != null) { + qry.setId(customerId); + } + if (company != null) { + qry.setCompany(company); + } + if (country != null) { + qry.setCountry(country); + } + + Page pg = customerRepository.findAll(org.springframework.data.domain.Example.of(qry), pageable); + customerResponse.setPageStats(pg, true); + customerResponse.setItems(pg.getContent()); + } else { + customerResponse.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + customerResponse.setOperationMessage("No access"); + } + + return customerResponse; + } + + @PostMapping(value = "/customers", produces = {"application/json"}) + public OperationResponse addNewCustomer(@RequestBody() Customer customer, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + OperationResponse resp = new OperationResponse(); + if (response.getStatus() == 200) { + if (this.customerRepository.findCustomerById(customer.getId()) != null) { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage("Unable to add Customer - Customer already exist "); + } else { + Customer addedCustomer = this.customerRepository.save(customer); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("Customer Added"); + } + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + + @DeleteMapping(value = "/customers/{customerId}", produces = {"application/json"}) + public OperationResponse deleteCustomer(@PathVariable("customerId") Integer customerId, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + OperationResponse resp = new OperationResponse(); + if (response.getStatus() == 200) { + try { + if (this.customerRepository.findCustomerById(customerId) != null) { + this.customerRepository.deleteCustomerById(customerId); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("Customer Deleted"); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage("No Customer Exist"); + } + } catch (Exception ge) { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage(ge.getMessage()); + } + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/EmployeeController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/EmployeeController.java new file mode 100644 index 0000000..daf699c --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/EmployeeController.java @@ -0,0 +1,105 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.employee.Employee; +import com.cengenes.configuration.api.entity.employee.EmployeeResponse; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.repository.EmployeeRepository; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.MediaType; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@RestController +@Transactional +@RequestMapping(value="/api", produces = MediaType.APPLICATION_JSON_VALUE) +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class EmployeeController { + + @Autowired + private EmployeeRepository employeeRepository; + + @Autowired + private AuthService authService; + + @GetMapping(value="/employees") + public EmployeeResponse getEmployeesByPage( + @RequestParam(value = "page" , defaultValue="0" , required = false) Integer page, + @RequestParam(value = "size" , defaultValue="20" , required = false) Integer size, + @RequestParam(value = "employeeid" , required = false) Integer employeeId, + @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response, + Pageable pageable + ) { + authService.authenticate(authorization, response); + EmployeeResponse resp = new EmployeeResponse(); + if(response.getStatus() == 200){ + Employee qry = new Employee(); + if (employeeId != null) { qry.setId(employeeId); } + + Page pg = employeeRepository.findAll(org.springframework.data.domain.Example.of(qry), pageable); + resp.setPageStats(pg, true); + resp.setItems(pg.getContent()); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + + @PostMapping(value="/employees", produces = {"application/json"}) + public OperationResponse addNewEmployee(@RequestBody Employee employee, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + OperationResponse resp = new OperationResponse(); + if(response.getStatus() == 200){ + if (this.employeeRepository.findEmployeeById(employee.getId()) != null){ + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage("Unable to add employee - employee allready exist "); + } + else{ + Employee addedEmployee = this.employeeRepository.save(employee); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("employee Added"); + } + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + + + @DeleteMapping(value = "/employees/{employeeId}", produces = {"application/json"}) + public OperationResponse deleteEmployee(@PathVariable("employeeId") Integer employeeId, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + OperationResponse resp = new OperationResponse(); + if(response.getStatus() == 200){ + try { + if (this.employeeRepository.findEmployeeById(employeeId) != null){ + this.employeeRepository.deleteEmployeeById(employeeId); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("employee Deleted"); + } + else{ + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage("No employee Exist"); + } + } + catch ( Exception ge ){ + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.ERROR); + resp.setOperationMessage(ge.getMessage()); + } + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/OrderController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/OrderController.java new file mode 100644 index 0000000..0ef2df9 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/OrderController.java @@ -0,0 +1,162 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.order.OrderDetail; +import com.cengenes.configuration.api.entity.order.OrderDetailResponse; +import com.cengenes.configuration.api.entity.order.OrderInfo; +import com.cengenes.configuration.api.entity.order.OrderInfoResponse; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.repository.OrderInfoRepository; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.MediaType; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_VALUE) +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class OrderController { + + @Autowired + private OrderInfoRepository orderInfoRepository; + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private AuthService authService; + + @GetMapping(value = "/orders") + public OrderInfoResponse getOrdersByPage( + @RequestParam(value = "page", defaultValue = "0", required = false) Integer page, + @RequestParam(value = "size", defaultValue = "20", required = false) Integer size, + @RequestParam(value = "orderid", required = false) Integer orderId, + @RequestParam(value = "customerid", required = false) Integer customerId, + @RequestParam(value = "employeeid", required = false) Integer employeeId, + @RequestParam(value = "status", required = false) String orderStatus, + @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response, + Pageable pageable + ) { + authService.authenticate(authorization, response); + OrderInfoResponse resp = new OrderInfoResponse(); + if (response.getStatus() == 200) { + OrderInfo qry = new OrderInfo(); + if (orderId != null) { + qry.setOrderId(orderId); + } + if (customerId != null) { + qry.setCustomerId(customerId); + } + if (employeeId != null) { + qry.setEmployeeId(employeeId); + } + if (orderStatus != null) { + qry.setOrderStatus(orderStatus); + } + + Page pg = orderInfoRepository.findAll(org.springframework.data.domain.Example.of(qry), pageable); + resp.setPageStats(pg, true); + resp.setItems(pg.getContent()); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + + + @GetMapping(value = "/order-details") + public OrderDetailResponse getOrderDetail(@RequestParam(value = "orderid", required = false) Integer orderId, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response) { + authService.authenticate(authorization, response); + OrderDetailResponse resp = new OrderDetailResponse(); + if(response.getStatus() == 200){ + long prevOrderId = -1, newOrderId; + OrderDetail orderDetail = new OrderDetail(); + int itemCount = 0; + + + resp.setItems(new ArrayList()); + String sql = " select order_id, book_id , customer_id , order_date, order_status , shipped_date , employee_id , payment_type, paid_date, " + + " ship_name , ship_address1, ship_address2 , ship_city , ship_state , ship_postal_code, ship_country, " + + " book_code , book_name , category , quantity , unit_price , discount , date_allocated, order_item_status, " + + " shipping_fee , customer_name, customer_email, customer_company from A_TEAM.ORDER_DETAILS "; + String where = " where 1 = 1 "; + String order = " order by order_id, book_id "; + if (orderId != null) { + where = where + " and order_id = " + orderId; + } + + List> list = jdbcTemplate.queryForList(sql + where + order); + for (Map row : list) { + newOrderId = (int) row.get("order_id"); + if (prevOrderId != newOrderId) { + itemCount++; + + orderDetail = new OrderDetail( + (int) row.get("order_id"), + (Date) row.get("order_date"), + (String) row.get("order_status"), + (Date) row.get("shipped_date"), + (String) row.get("ship_name"), + (String) row.get("ship_address1"), + (String) row.get("ship_address2"), + (String) row.get("ship_city"), + (String) row.get("ship_state"), + (String) row.get("ship_postal_code"), + (String) row.get("ship_country"), + (BigDecimal) row.get("shipping_fee"), + (Integer) row.get("customer_id"), + (String) row.get("customer_name"), + (String) row.get("customer_email"), + (String) row.get("company"), + (String) row.get("payment_type"), + (Date) row.get("paid_date"), + (int) row.get("employee_id") + ); + orderDetail.addOrderLine( + (int) row.get("book_id"), + (String) row.get("book_code"), + (String) row.get("book_name"), + (String) row.get("category"), + (BigDecimal) row.get("quantity"), + (BigDecimal) row.get("unit_price"), + (BigDecimal) row.get("discount"), + (Date) row.get("date_allocated"), + (String) row.get("order_item_status") + ); + resp.getItems().add(orderDetail); + prevOrderId = newOrderId; + } else { + orderDetail.addOrderLine( + (int) row.get("book_id"), + (String) row.get("book_code"), + (String) row.get("book_name"), + (String) row.get("category"), + (BigDecimal) row.get("quantity"), + (BigDecimal) row.get("unit_price"), + (BigDecimal) row.get("discount"), + (Date) row.get("date_allocated"), + (String) row.get("order_item_status") + ); + } + } + resp.setPageTotal(itemCount, true); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/OrderStatsController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/OrderStatsController.java new file mode 100644 index 0000000..8a37226 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/OrderStatsController.java @@ -0,0 +1,74 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.data.SingleSeries; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.entity.response.SingleDataSeriesResponse; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_VALUE) +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class OrderStatsController { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private AuthService authService; + + @GetMapping(value = "/order-stats") + public SingleDataSeriesResponse getOrderStats(@RequestParam(value = "type") String type, @RequestHeader(value = "Authorization") String authorization, HttpServletResponse response ) { + authService.authenticate(authorization, response); + SingleDataSeriesResponse resp = new SingleDataSeriesResponse(); + if(response.getStatus() == 200){ + String fieldName = ""; + if (type.equalsIgnoreCase("status") || type.equalsIgnoreCase("order_status")){ + fieldName = " order_status "; + } + else if (type.equalsIgnoreCase("paytype") || type.equalsIgnoreCase("payment_type")){ + fieldName = " payment_type "; + } + else if (type.equalsIgnoreCase("country") || type.equalsIgnoreCase("ship_country")){ + fieldName = " ship_country "; + } + else{ + fieldName = " order_status "; + } + + String sql = "select count(*) as value, " + fieldName + " as name from A_TEAM.ORDERS group by " + fieldName; + String countType = new String(); + long count; + SingleSeries singleSerise; + ArrayList dataItemList = new ArrayList(); + + + List> list = jdbcTemplate.queryForList(sql); + + for (Map row : list) { + singleSerise = new SingleSeries((String)row.get("name"), new BigDecimal((long)row.get("value")) ); + dataItemList.add(singleSerise); + } + resp.setItems(dataItemList); + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + resp.setOperationMessage("Orders by " + fieldName); + //resp.setItems(singleSerise); + } else { + resp.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + resp.setOperationMessage("No access"); + } + + return resp; + } + + +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/UserController.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/UserController.java new file mode 100644 index 0000000..73642bd --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/controller/UserController.java @@ -0,0 +1,35 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.repository.UserRepository; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; + +@RestController +@RequestMapping("/api/user") +@CrossOrigin(origins = "http://localhost:4200", allowedHeaders = "*") +public class UserController { + + @Autowired + private UserRepository userRepository; + + @Autowired + private AuthService authService; + + @GetMapping(value = "/checkLogin") + public OperationResponse checkLogin(@RequestHeader(value="authorization") String authorization, HttpServletResponse response){ + OperationResponse opResponse = new OperationResponse(); + authService.authenticate(authorization, response); + if(response.getStatus() == 200){ + opResponse.setOperationStatus(OperationResponse.ResponseStatusEnum.SUCCESS); + opResponse.setOperationMessage("Success"); + } else if(response.getStatus() == 401){ + opResponse.setOperationStatus(OperationResponse.ResponseStatusEnum.NO_ACCESS); + opResponse.setOperationMessage("No Access"); + } + return opResponse; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationDtoToEntityConverter.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationDtoToEntityConverter.java index b2ceca0..ecd9609 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationDtoToEntityConverter.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationDtoToEntityConverter.java @@ -1,26 +1,26 @@ -package com.cengenes.configuration.api.converter; - -import org.springframework.core.convert.converter.Converter; -import org.springframework.stereotype.Component; - -import com.cengenes.configuration.api.dto.ConfigurationDto; -import com.cengenes.configuration.api.entity.Configuration; - -@Component -public class ConfigurationDtoToEntityConverter implements Converter { - - @Override - public Configuration convert(ConfigurationDto dto) { - - Configuration entity = new Configuration(); - - entity.setName(dto.getName()); - entity.setType(dto.getType()); - entity.setValue(dto.getValue()); - entity.setIsActive(dto.getIsActive()); - entity.setApplicationName(dto.getApplicationName()); - - return entity; - } - -} +package com.cengenes.configuration.api.converter; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + +import com.cengenes.configuration.api.dto.ConfigurationDto; +import com.cengenes.configuration.api.entity.Configuration; + +@Component +public class ConfigurationDtoToEntityConverter implements Converter { + + @Override + public Configuration convert(ConfigurationDto dto) { + + Configuration entity = new Configuration(); + + entity.setName(dto.getName()); + entity.setType(dto.getType()); + entity.setValue(dto.getValue()); + entity.setIsActive(dto.getIsActive()); + entity.setApplicationName(dto.getApplicationName()); + + return entity; + } + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationEntityToDtoConverter.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationEntityToDtoConverter.java index 60fd1be..cd017e5 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationEntityToDtoConverter.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/converter/ConfigurationEntityToDtoConverter.java @@ -1,26 +1,26 @@ -package com.cengenes.configuration.api.converter; - -import org.springframework.core.convert.converter.Converter; -import org.springframework.stereotype.Component; - -import com.cengenes.configuration.api.dto.ConfigurationDto; -import com.cengenes.configuration.api.entity.Configuration; - -@Component -public class ConfigurationEntityToDtoConverter implements Converter { - - @Override - public ConfigurationDto convert(Configuration entity) { - - ConfigurationDto configurationDto = new ConfigurationDto(); - - configurationDto.setName(entity.getName()); - configurationDto.setType(entity.getType()); - configurationDto.setValue(entity.getValue()); - configurationDto.setIsActive(entity.getIsActive()); - configurationDto.setApplicationName(entity.getApplicationName()); - - return configurationDto; - } - -} +package com.cengenes.configuration.api.converter; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + +import com.cengenes.configuration.api.dto.ConfigurationDto; +import com.cengenes.configuration.api.entity.Configuration; + +@Component +public class ConfigurationEntityToDtoConverter implements Converter { + + @Override + public ConfigurationDto convert(Configuration entity) { + + ConfigurationDto configurationDto = new ConfigurationDto(); + + configurationDto.setName(entity.getName()); + configurationDto.setType(entity.getType()); + configurationDto.setValue(entity.getValue()); + configurationDto.setIsActive(entity.getIsActive()); + configurationDto.setApplicationName(entity.getApplicationName()); + + return configurationDto; + } + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/ConfigurationDto.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/ConfigurationDto.java index 04946a8..fc7360d 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/ConfigurationDto.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/ConfigurationDto.java @@ -1,68 +1,68 @@ -package com.cengenes.configuration.api.dto; - -import javax.validation.constraints.NotNull; - -public class ConfigurationDto { - - @NotNull - private String name; - - @NotNull - private String type; - - @NotNull - private String value; - - @NotNull - private Boolean isActive; - - @NotNull - private String applicationName; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public Boolean getIsActive() { - return isActive; - } - - public void setIsActive(Boolean isActive) { - this.isActive = isActive; - } - - public String getApplicationName() { - return applicationName; - } - - public void setApplicationName(String applicationName) { - this.applicationName = applicationName; - } - - @Override - public String toString() { - return "ConfigurationDto [name=" + name + ", type=" + type + ", value=" + value + ", isActive=" + isActive - + ", applicationName=" + applicationName + "]"; - } - -} +package com.cengenes.configuration.api.dto; + +import javax.validation.constraints.NotNull; + +public class ConfigurationDto { + + @NotNull + private String name; + + @NotNull + private String type; + + @NotNull + private String value; + + @NotNull + private Boolean isActive; + + @NotNull + private String applicationName; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Boolean getIsActive() { + return isActive; + } + + public void setIsActive(Boolean isActive) { + this.isActive = isActive; + } + + public String getApplicationName() { + return applicationName; + } + + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + + @Override + public String toString() { + return "ConfigurationDto [name=" + name + ", type=" + type + ", value=" + value + ", isActive=" + isActive + + ", applicationName=" + applicationName + "]"; + } + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/Response.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/Response.java index 9e97c02..8be195d 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/Response.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/dto/Response.java @@ -1,37 +1,37 @@ -package com.cengenes.configuration.api.dto; - -import com.cengenes.configuration.api.types.RequestStatus; - -/** - * @author enes.acikoglu - */ -public class Response { - - private RequestStatus status; - private String errorCode; - private String errorMessage; - - public RequestStatus getStatus() { - return status; - } - - public void setStatus(RequestStatus status) { - this.status = status; - } - - public String getErrorCode() { - return errorCode; - } - - public void setErrorCode(String errorCode) { - this.errorCode = errorCode; - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} +package com.cengenes.configuration.api.dto; + +import com.cengenes.configuration.api.types.RequestStatus; + +/** + * @author enes.acikoglu + */ +public class Response { + + private RequestStatus status; + private String errorCode; + private String errorMessage; + + public RequestStatus getStatus() { + return status; + } + + public void setStatus(RequestStatus status) { + this.status = status; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/Configuration.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/Configuration.java index 34ffd6c..6a582ab 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/Configuration.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/Configuration.java @@ -1,105 +1,105 @@ -package com.cengenes.configuration.api.entity; - -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; - -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; - -@Entity -@Table(name = "configuration") -public class Configuration { - - @Id - @GeneratedValue(strategy = GenerationType.TABLE) - @Column(name = "ID") - private Long id; - - @Column(name = "NAME") - private String name; - - @Column(name = "TYPE_") - private String type; - - @Column(name = "VALUE_") - private String value; - - @Column(name = "ISACTIVE") - private Boolean isActive; - - @Column(name = "APPLICATION_NAME") - private String applicationName; - - @Column(nullable = true, updatable = false) - @Temporal(TemporalType.TIMESTAMP) - @CreatedDate - private Date createdAt; - - @Column(nullable = true) - @Temporal(TemporalType.TIMESTAMP) - @LastModifiedDate - private Date updatedAt; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public Boolean getIsActive() { - return isActive; - } - - public void setIsActive(Boolean isActive) { - this.isActive = isActive; - } - - public String getApplicationName() { - return applicationName; - } - - public void setApplicationName(String applicationName) { - this.applicationName = applicationName; - } - - @Override - public String toString() { - return "Configuration [id=" + id + ", name=" + name + ", type=" + type + ", value=" + value + ", isActive=" - + isActive + ", applicationName=" + applicationName + "]"; - } - -} +package com.cengenes.configuration.api.entity; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; + +@Entity +@Table(name = "configuration") +public class Configuration { + + @Id + @GeneratedValue(strategy = GenerationType.TABLE) + @Column(name = "ID") + private Long id; + + @Column(name = "NAME") + private String name; + + @Column(name = "TYPE_") + private String type; + + @Column(name = "VALUE_") + private String value; + + @Column(name = "ISACTIVE") + private Boolean isActive; + + @Column(name = "APPLICATION_NAME") + private String applicationName; + + @Column(nullable = true, updatable = false) + @Temporal(TemporalType.TIMESTAMP) + @CreatedDate + private Date createdAt; + + @Column(nullable = true) + @Temporal(TemporalType.TIMESTAMP) + @LastModifiedDate + private Date updatedAt; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Boolean getIsActive() { + return isActive; + } + + public void setIsActive(Boolean isActive) { + this.isActive = isActive; + } + + public String getApplicationName() { + return applicationName; + } + + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + + @Override + public String toString() { + return "Configuration [id=" + id + ", name=" + name + ", type=" + type + ", value=" + value + ", isActive=" + + isActive + ", applicationName=" + applicationName + "]"; + } + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/book/Book.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/book/Book.java new file mode 100644 index 0000000..3af8dcc --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/book/Book.java @@ -0,0 +1,120 @@ +package com.cengenes.configuration.api.entity.book; + + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name="books") +public class Book { + @Id + private Integer id; + private String bookCode; + private String bookName; + private String description; + private Double standardCost; + private Double listPrice; + private Integer targetLevel; + private Integer reorder_level; + private Integer minimumReorderQuantity; + private String quantityPerUnit; + private Integer discontinued; + private String category; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBookCode() { + return bookCode; + } + + public void setBookCode(String bookCode) { + this.bookCode = bookCode; + } + + public String getBookName() { + return bookName; + } + + public void setBookName(String bookName) { + this.bookName = bookName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Double getStandardCost() { + return standardCost; + } + + public void setStandardCost(Double standardCost) { + this.standardCost = standardCost; + } + + public Double getListPrice() { + return listPrice; + } + + public void setListPrice(Double listPrice) { + this.listPrice = listPrice; + } + + public Integer getTargetLevel() { + return targetLevel; + } + + public void setTargetLevel(Integer targetLevel) { + this.targetLevel = targetLevel; + } + + public Integer getReorder_level() { + return reorder_level; + } + + public void setReorder_level(Integer reorder_level) { + this.reorder_level = reorder_level; + } + + public Integer getMinimumReorderQuantity() { + return minimumReorderQuantity; + } + + public void setMinimumReorderQuantity(Integer minimumReorderQuantity) { + this.minimumReorderQuantity = minimumReorderQuantity; + } + + public String getQuantityPerUnit() { + return quantityPerUnit; + } + + public void setQuantityPerUnit(String quantityPerUnit) { + this.quantityPerUnit = quantityPerUnit; + } + + public Integer getDiscontinued() { + return discontinued; + } + + public void setDiscontinued(Integer discontinued) { + this.discontinued = discontinued; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/book/BookResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/book/BookResponse.java new file mode 100644 index 0000000..5e43b02 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/book/BookResponse.java @@ -0,0 +1,9 @@ +package com.cengenes.configuration.api.entity.book; + +import com.cengenes.configuration.api.entity.response.PageResponse; + +import java.util.List; + +public class BookResponse extends PageResponse { + private List items; +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/customer/Customer.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/customer/Customer.java new file mode 100644 index 0000000..e1ecb8a --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/customer/Customer.java @@ -0,0 +1,135 @@ +package com.cengenes.configuration.api.entity.customer; + +import javax.persistence.*; + +@Entity +@Table(name="customers") +public class Customer { + @Id + private Integer id; + private String lastName; + private String firstName; + private String email; + private String company; + private String phone; + private String address1; + private String address2; + private String city; + private String state; + private String postalCode; + private String country; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getAddress1() { + return address1; + } + + public void setAddress1(String address1) { + this.address1 = address1; + } + + public String getAddress2() { + return address2; + } + + public void setAddress2(String address2) { + this.address2 = address2; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + @Override + public String toString() { + return "Customer{" + + "id=" + id + + ", lastName='" + lastName + '\'' + + ", firstName='" + firstName + '\'' + + ", email='" + email + '\'' + + ", company='" + company + '\'' + + ", phone='" + phone + '\'' + + ", address1='" + address1 + '\'' + + ", address2='" + address2 + '\'' + + ", city='" + city + '\'' + + ", state='" + state + '\'' + + ", postalCode='" + postalCode + '\'' + + ", country='" + country + '\'' + + '}'; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/customer/CustomerResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/customer/CustomerResponse.java new file mode 100644 index 0000000..e6e0b7e --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/customer/CustomerResponse.java @@ -0,0 +1,9 @@ +package com.cengenes.configuration.api.entity.customer; + +import com.cengenes.configuration.api.entity.response.PageResponse; + +import java.util.List; + +public class CustomerResponse extends PageResponse { + private List items; +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/data/SingleSeries.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/data/SingleSeries.java new file mode 100644 index 0000000..cb7cb77 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/data/SingleSeries.java @@ -0,0 +1,31 @@ +package com.cengenes.configuration.api.entity.data; + +import java.math.BigDecimal; + +public class SingleSeries { + private String name; + private BigDecimal value; + + public SingleSeries(){} + + public SingleSeries( String name, BigDecimal value){ + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public BigDecimal getValue() { + return value; + } + + public void setValue(BigDecimal value) { + this.value = value; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/employee/Employee.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/employee/Employee.java new file mode 100644 index 0000000..cc587f9 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/employee/Employee.java @@ -0,0 +1,146 @@ +package com.cengenes.configuration.api.entity.employee; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "employees") +public class Employee { + @Id + private Integer id; + private String lastName; + private String firstName; + private String email; + private String avatar; + private String jobTitle; + private String department; + private Integer managerId; + private String phone; + private String address1; + private String address2; + private String city; + private String state; + private String postalCode; + private String country; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getJobTitle() { + return jobTitle; + } + + public void setJobTitle(String jobTitle) { + this.jobTitle = jobTitle; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public Integer getManagerId() { + return managerId; + } + + public void setManagerId(Integer managerId) { + this.managerId = managerId; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getAddress1() { + return address1; + } + + public void setAddress1(String address1) { + this.address1 = address1; + } + + public String getAddress2() { + return address2; + } + + public void setAddress2(String address2) { + this.address2 = address2; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/employee/EmployeeResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/employee/EmployeeResponse.java new file mode 100644 index 0000000..765e77e --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/employee/EmployeeResponse.java @@ -0,0 +1,10 @@ +package com.cengenes.configuration.api.entity.employee; + +import com.cengenes.configuration.api.entity.response.PageResponse; + +import java.util.List; + +public class EmployeeResponse extends PageResponse { + + private List items; +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/CompositeOrderProductKey.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/CompositeOrderProductKey.java new file mode 100644 index 0000000..a6a5495 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/CompositeOrderProductKey.java @@ -0,0 +1,15 @@ +package com.cengenes.configuration.api.entity.order; + +import javax.persistence.Embeddable; +import java.io.Serializable; + +@Embeddable +public class CompositeOrderProductKey implements Serializable { + private int orderId; + private int productId; + + public CompositeOrderProductKey(int orderId, int productId) { + this.orderId = orderId; + this.productId = productId; + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/Order.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/Order.java new file mode 100644 index 0000000..363c00b --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/Order.java @@ -0,0 +1,179 @@ +package com.cengenes.configuration.api.entity.order; + +import javax.persistence.*; +import java.math.BigDecimal; +import java.util.Date; + +@Entity +@Table(name = "orders") +public class Order { + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + private Integer id; + private Integer employeeId; + private Integer customerId; + private Date orderDate; + private Date shippedDate; + private Date paidDate; + private String shipName; + private String shipAddress1; + private String shipAddress2; + private String shipCity; + private String shipState; + private String shipPostalCode; + private String shipCountry; + private BigDecimal shippingFee; + private String paymentType; + private String orderStatus; + + public Order(){} + public Order(Integer id , Integer employeeId , Integer customerId , Date orderDate , String orderStatus, + Date shippedDate , String shipName , String shipAddress1, String shipAddress2, String shipCity , String shipState, String shipPostalCode, String shipCountry, + BigDecimal shippingFee , String paymentType , Date paidDate + ){ + this.id=id; + this.employeeId = employeeId ; + this.customerId = customerId ; + this.orderDate = orderDate; + this.orderStatus = orderStatus; + this.shippedDate = shippedDate; + this.shipName = shipName; + this.shipAddress1= shipAddress1; + this.shipAddress2= shipAddress2; + this.shipCity = shipCity; + this.shipState = shipState; + this.shipPostalCode= shipPostalCode; + this.shipCountry = shipCountry; + this.shippingFee = shippingFee; + this.paymentType = paymentType; + this.paidDate = paidDate; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getEmployeeId() { + return employeeId; + } + + public void setEmployeeId(Integer employeeId) { + this.employeeId = employeeId; + } + + public Integer getCustomerId() { + return customerId; + } + + public void setCustomerId(Integer customerId) { + this.customerId = customerId; + } + + public Date getOrderDate() { + return orderDate; + } + + public void setOrderDate(Date orderDate) { + this.orderDate = orderDate; + } + + public Date getShippedDate() { + return shippedDate; + } + + public void setShippedDate(Date shippedDate) { + this.shippedDate = shippedDate; + } + + public Date getPaidDate() { + return paidDate; + } + + public void setPaidDate(Date paidDate) { + this.paidDate = paidDate; + } + + public String getShipName() { + return shipName; + } + + public void setShipName(String shipName) { + this.shipName = shipName; + } + + public String getShipAddress1() { + return shipAddress1; + } + + public void setShipAddress1(String shipAddress1) { + this.shipAddress1 = shipAddress1; + } + + public String getShipAddress2() { + return shipAddress2; + } + + public void setShipAddress2(String shipAddress2) { + this.shipAddress2 = shipAddress2; + } + + public String getShipCity() { + return shipCity; + } + + public void setShipCity(String shipCity) { + this.shipCity = shipCity; + } + + public String getShipState() { + return shipState; + } + + public void setShipState(String shipState) { + this.shipState = shipState; + } + + public String getShipPostalCode() { + return shipPostalCode; + } + + public void setShipPostalCode(String shipPostalCode) { + this.shipPostalCode = shipPostalCode; + } + + public String getShipCountry() { + return shipCountry; + } + + public void setShipCountry(String shipCountry) { + this.shipCountry = shipCountry; + } + + public BigDecimal getShippingFee() { + return shippingFee; + } + + public void setShippingFee(BigDecimal shippingFee) { + this.shippingFee = shippingFee; + } + + public String getPaymentType() { + return paymentType; + } + + public void setPaymentType(String paymentType) { + this.paymentType = paymentType; + } + + public String getOrderStatus() { + return orderStatus; + } + + public void setOrderStatus(String orderStatus) { + this.orderStatus = orderStatus; + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderDetail.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderDetail.java new file mode 100644 index 0000000..84eb56c --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderDetail.java @@ -0,0 +1,180 @@ +package com.cengenes.configuration.api.entity.order; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class OrderDetail extends Order { + + private String customerName; + private String customerEmail; + private String customerCompany; + private List orderLine; + + public OrderDetail(){} + + public OrderDetail( + Integer orderId, + Date orderDate, + String orderStatus, + Date shippedDate, + String shipName, + String shipAddress1, + String shipAddress2 , + String shipCity, + String shipState, + String shipPostalCode, + String shipCountry, + BigDecimal shippingFee, + Integer customerId, + String customerName, + String customerEmail, + String customerCompany, + String paymentType, + Date paidDate, + Integer employeeId + ){ + super(orderId, employeeId, customerId, orderDate, orderStatus, shippedDate ,shipName, shipAddress1,shipAddress2, shipCity, shipState, shipPostalCode, shipCountry, shippingFee, paymentType, paidDate); + this.customerName = customerName; + this.customerEmail = customerEmail; + this.customerCompany = customerCompany; + this.orderLine = new ArrayList(); + } + + public void addOrderLine(int productId, String productCode, String productName, String category, BigDecimal quantity, BigDecimal unitPrice, BigDecimal discount, Date dateAllocated, String orderItemStatus){ + OrderLine line = new OrderLine(productId, productCode, productName, category, quantity, unitPrice, discount, dateAllocated, orderItemStatus); + this.orderLine.add(line); + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerEmail() { + return customerEmail; + } + + public void setCustomerEmail(String customerEmail) { + this.customerEmail = customerEmail; + } + + public String getCustomerCompany() { + return customerCompany; + } + + public void setCustomerCompany(String customerCompany) { + this.customerCompany = customerCompany; + } + + public List getOrderLine() { + return orderLine; + } + + public void setOrderLine(List orderLine) { + this.orderLine = orderLine; + } +} + + +class OrderLine { + + private int productId; + private String productCode; + private String productName; + private String category; + private BigDecimal quantity; + private BigDecimal unitPrice; + private BigDecimal discount; + private Date dateAllocated; + private String orderItemStatus; + + + public OrderLine(int productId, String productCode, String productName, String category, BigDecimal quantity, BigDecimal unitPrice, BigDecimal discount, Date dateAllocated, String orderItemStatus){ + this.productId = productId; + this.productCode = productCode; + this.productName = productName; + this.category = category; + this.quantity = quantity; + this.unitPrice = unitPrice; + this.discount = discount; + this.dateAllocated= dateAllocated; + this.orderItemStatus=orderItemStatus; + } + + public int getProductId() { + return productId; + } + + public void setProductId(int productId) { + this.productId = productId; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal quantity) { + this.quantity = quantity; + } + + public BigDecimal getUnitPrice() { + return unitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + this.unitPrice = unitPrice; + } + + public BigDecimal getDiscount() { + return discount; + } + + public void setDiscount(BigDecimal discount) { + this.discount = discount; + } + + public Date getDateAllocated() { + return dateAllocated; + } + + public void setDateAllocated(Date dateAllocated) { + this.dateAllocated = dateAllocated; + } + + public String getOrderItemStatus() { + return orderItemStatus; + } + + public void setOrderItemStatus(String orderItemStatus) { + this.orderItemStatus = orderItemStatus; + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderDetailResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderDetailResponse.java new file mode 100644 index 0000000..55f2f61 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderDetailResponse.java @@ -0,0 +1,9 @@ +package com.cengenes.configuration.api.entity.order; + +import com.cengenes.configuration.api.entity.response.PageResponse; + +import java.util.List; + +public class OrderDetailResponse extends PageResponse { + private List items; +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderInfo.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderInfo.java new file mode 100644 index 0000000..dce39ca --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderInfo.java @@ -0,0 +1,223 @@ +package com.cengenes.configuration.api.entity.order; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.math.BigDecimal; +import java.util.Date; + +@Entity +@Table(name = "order_info") +public class OrderInfo { + @Id + private Integer orderId; + private Integer employeeId; + private Integer customerId; + private Date orderDate; + private Date shippedDate; + private Date paidDate; + private String shipName; + private String shipAddress1; + private String shipAddress2; + private String shipCity; + private String shipState; + private String shipPostalCode; + private String shipCountry; + private BigDecimal shippingFee; + private String paymentType; + private String orderStatus; + + private String customerName; + private String customerPhone; + private String customerEmail; + private String customerCompany; + private String employeeName; + private String employeeDepartment; + private String employeeJobTitle; + + public OrderInfo(){} + + public Integer getOrderId() { + return orderId; + } + + public void setOrderId(Integer orderId) { + this.orderId = orderId; + } + + public Integer getEmployeeId() { + return employeeId; + } + + public void setEmployeeId(Integer employeeId) { + this.employeeId = employeeId; + } + + public Integer getCustomerId() { + return customerId; + } + + public void setCustomerId(Integer customerId) { + this.customerId = customerId; + } + + public Date getOrderDate() { + return orderDate; + } + + public void setOrderDate(Date orderDate) { + this.orderDate = orderDate; + } + + public Date getShippedDate() { + return shippedDate; + } + + public void setShippedDate(Date shippedDate) { + this.shippedDate = shippedDate; + } + + public Date getPaidDate() { + return paidDate; + } + + public void setPaidDate(Date paidDate) { + this.paidDate = paidDate; + } + + public String getShipName() { + return shipName; + } + + public void setShipName(String shipName) { + this.shipName = shipName; + } + + public String getShipAddress1() { + return shipAddress1; + } + + public void setShipAddress1(String shipAddress1) { + this.shipAddress1 = shipAddress1; + } + + public String getShipAddress2() { + return shipAddress2; + } + + public void setShipAddress2(String shipAddress2) { + this.shipAddress2 = shipAddress2; + } + + public String getShipCity() { + return shipCity; + } + + public void setShipCity(String shipCity) { + this.shipCity = shipCity; + } + + public String getShipState() { + return shipState; + } + + public void setShipState(String shipState) { + this.shipState = shipState; + } + + public String getShipPostalCode() { + return shipPostalCode; + } + + public void setShipPostalCode(String shipPostalCode) { + this.shipPostalCode = shipPostalCode; + } + + public String getShipCountry() { + return shipCountry; + } + + public void setShipCountry(String shipCountry) { + this.shipCountry = shipCountry; + } + + public BigDecimal getShippingFee() { + return shippingFee; + } + + public void setShippingFee(BigDecimal shippingFee) { + this.shippingFee = shippingFee; + } + + public String getPaymentType() { + return paymentType; + } + + public void setPaymentType(String paymentType) { + this.paymentType = paymentType; + } + + public String getOrderStatus() { + return orderStatus; + } + + public void setOrderStatus(String orderStatus) { + this.orderStatus = orderStatus; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getCustomerEmail() { + return customerEmail; + } + + public void setCustomerEmail(String customerEmail) { + this.customerEmail = customerEmail; + } + + public String getCustomerCompany() { + return customerCompany; + } + + public void setCustomerCompany(String customerCompany) { + this.customerCompany = customerCompany; + } + + public String getEmployeeName() { + return employeeName; + } + + public void setEmployeeName(String employeeName) { + this.employeeName = employeeName; + } + + public String getEmployeeDepartment() { + return employeeDepartment; + } + + public void setEmployeeDepartment(String employeeDepartment) { + this.employeeDepartment = employeeDepartment; + } + + public String getEmployeeJobTitle() { + return employeeJobTitle; + } + + public void setEmployeeJobTitle(String employeeJobTitle) { + this.employeeJobTitle = employeeJobTitle; + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderInfoResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderInfoResponse.java new file mode 100644 index 0000000..d4aa759 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderInfoResponse.java @@ -0,0 +1,9 @@ +package com.cengenes.configuration.api.entity.order; + +import com.cengenes.configuration.api.entity.response.PageResponse; + +import java.util.List; + +public class OrderInfoResponse extends PageResponse { + private List items; +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderItem.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderItem.java new file mode 100644 index 0000000..4815b8a --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderItem.java @@ -0,0 +1,86 @@ +package com.cengenes.configuration.api.entity.order; + +import javax.persistence.*; +import java.math.BigDecimal; +import java.util.Date; + +@Entity +@Table(name = "order_items") +public class OrderItem { + + @EmbeddedId + @AttributeOverrides({ + @AttributeOverride(name = "orderId", column = @Column(name = "order_id")), + @AttributeOverride(name = "productId", column = @Column(name = "product_id")) + }) + CompositeOrderProductKey orderItemKey; + private BigDecimal quantity; + private BigDecimal unitPrice; + private BigDecimal discount; + private String orderItemStatus; + private Date dateAllocated; + + public OrderItem() { + } + + public OrderItem(int orderId, int productId, BigDecimal quantity, BigDecimal unitPrice, BigDecimal discount, String orderItemStatus, Date dateAllocated) { + this(new CompositeOrderProductKey(orderId, productId), quantity, unitPrice, discount, orderItemStatus, dateAllocated); + } + + public OrderItem(CompositeOrderProductKey orderItemKey, BigDecimal quantity, BigDecimal unitPrice, BigDecimal discount, String orderItemStatus, Date dateAllocated) { + this.orderItemKey = orderItemKey; + this.quantity = quantity; + this.unitPrice = unitPrice; + this.discount = discount; + this.dateAllocated = dateAllocated; + this.orderItemStatus = orderItemStatus; + } + + public CompositeOrderProductKey getOrderItemKey() { + return orderItemKey; + } + + public void setOrderItemKey(CompositeOrderProductKey orderItemKey) { + this.orderItemKey = orderItemKey; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal quantity) { + this.quantity = quantity; + } + + public BigDecimal getUnitPrice() { + return unitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + this.unitPrice = unitPrice; + } + + public BigDecimal getDiscount() { + return discount; + } + + public void setDiscount(BigDecimal discount) { + this.discount = discount; + } + + public String getOrderItemStatus() { + return orderItemStatus; + } + + public void setOrderItemStatus(String orderItemStatus) { + this.orderItemStatus = orderItemStatus; + } + + public Date getDateAllocated() { + return dateAllocated; + } + + public void setDateAllocated(Date dateAllocated) { + this.dateAllocated = dateAllocated; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderItemResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderItemResponse.java new file mode 100644 index 0000000..8d07d3b --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/order/OrderItemResponse.java @@ -0,0 +1,9 @@ +package com.cengenes.configuration.api.entity.order; + +import com.cengenes.configuration.api.entity.response.PageResponse; + +import java.util.List; + +public class OrderItemResponse extends PageResponse { + private List items; +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/OperationResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/OperationResponse.java new file mode 100644 index 0000000..2b44f7a --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/OperationResponse.java @@ -0,0 +1,23 @@ +package com.cengenes.configuration.api.entity.response; + +public class OperationResponse { + public enum ResponseStatusEnum {SUCCESS, ERROR, WARNING, NO_ACCESS}; + private ResponseStatusEnum operationStatus; + private String operationMessage; + + public ResponseStatusEnum getOperationStatus() { + return operationStatus; + } + + public void setOperationStatus(ResponseStatusEnum operationStatus) { + this.operationStatus = operationStatus; + } + + public String getOperationMessage() { + return operationMessage; + } + + public void setOperationMessage(String operationMessage) { + this.operationMessage = operationMessage; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/PageResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/PageResponse.java new file mode 100644 index 0000000..a82462d --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/PageResponse.java @@ -0,0 +1,120 @@ +package com.cengenes.configuration.api.entity.response; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Sort; + +import java.util.List; + +public class PageResponse extends OperationResponse { + private boolean first; + private boolean last; + private int currentPageNumber; + private int itemsInPage; + private int pageSize; + private int totalPages; + private long totalItems; + private Sort sort; + private List items; + + public void setPageStats(Page pg, boolean setDefaultMessage){ + this.first = pg.isFirst(); + this.last = pg.isLast(); + this.currentPageNumber = pg.getNumber(); + this.itemsInPage = pg.getNumberOfElements(); + this.pageSize = pg.getSize(); + this.totalPages = pg.getTotalPages(); + this.totalItems = pg.getTotalElements(); + //this.items = pg.getContent(); + this.sort = pg.getSort(); + if (setDefaultMessage == true){ + this.setOperationStatus(ResponseStatusEnum.SUCCESS); + this.setOperationMessage("Page " + (pg.getNumber()+ 1 ) + " of " + pg.getTotalPages() ); + } + } + + public void setPageTotal(int count, boolean setDefaultMessage){ + //this.items = list; + this.first = true; + this.last = true; + this.itemsInPage = count; + this.totalItems = count; + this.totalPages = 1; + this.pageSize = count; + if (setDefaultMessage == true){ + this.setOperationStatus(ResponseStatusEnum.SUCCESS); + this.setOperationMessage("Total " + count + " items "); + } + } + + public int getTotalPages() { + return totalPages; + } + + public void setTotalPages(int totalPages) { + this.totalPages = totalPages; + } + + public long getTotalItems() { + return totalItems; + } + + public void setTotalItems(long totalItems) { + this.totalItems = totalItems; + } + + public Sort getSort() { + return sort; + } + + public void setSort(Sort sort) { + this.sort = sort; + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } + + public boolean isFirst() { + return first; + } + + public void setFirst(boolean first) { + this.first = first; + } + + public boolean isLast() { + return last; + } + + public void setLast(boolean last) { + this.last = last; + } + + public int getCurrentPageNumber() { + return currentPageNumber; + } + + public void setCurrentPageNumber(int currentPageNumber) { + this.currentPageNumber = currentPageNumber; + } + + public int getItemsInPage() { + return itemsInPage; + } + + public void setItemsInPage(int itemsInPage) { + this.itemsInPage = itemsInPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/SingleDataSeriesResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/SingleDataSeriesResponse.java new file mode 100644 index 0000000..590d4da --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/response/SingleDataSeriesResponse.java @@ -0,0 +1,17 @@ +package com.cengenes.configuration.api.entity.response; + +import com.cengenes.configuration.api.entity.data.SingleSeries; + +import java.util.List; + +public class SingleDataSeriesResponse extends OperationResponse{ + private List items; + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/user/User.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/user/User.java new file mode 100644 index 0000000..214e704 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/user/User.java @@ -0,0 +1,238 @@ +package com.cengenes.configuration.api.entity.user; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "user") +public class User { + @Id + private String userId; + private String password; + private String firstName; + private String lastName; + private String email; + private String address1; + private String address2; + private String country; + private String postal; + private String role; + private String otherRoles; + private Integer isActive; + private Integer isBlocked; + private String secretQuestion; + private String secretAnswer; + private Integer enableBetaTesting; + private Integer enableRenewal; + private String phone; + private Integer securityProviderId; + private Integer defaultCustomerId; + private String company; + + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getId() { + return userId; + } + + public void setId(String id) { + this.userId = id; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getAddress1() { + return address1; + } + + public void setAddress1(String address1) { + this.address1 = address1; + } + + public String getAddress2() { + return address2; + } + + public void setAddress2(String address2) { + this.address2 = address2; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getPostal() { + return postal; + } + + public void setPostal(String postal) { + this.postal = postal; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getOtherRoles() { + return otherRoles; + } + + public void setOtherRoles(String otherRoles) { + this.otherRoles = otherRoles; + } + + public Integer getIsActive() { + return isActive; + } + + public void setIsActive(Integer isActive) { + this.isActive = isActive; + } + + public Integer getIsBlocked() { + return isBlocked; + } + + public void setIsBlocked(Integer isBlocked) { + this.isBlocked = isBlocked; + } + + public String getSecretQuestion() { + return secretQuestion; + } + + public void setSecretQuestion(String secretQuestion) { + this.secretQuestion = secretQuestion; + } + + public String getSecretAnswer() { + return secretAnswer; + } + + public void setSecretAnswer(String secretAnswer) { + this.secretAnswer = secretAnswer; + } + + public Integer getEnableBetaTesting() { + return enableBetaTesting; + } + + public void setEnableBetaTesting(Integer enableBetaTesting) { + this.enableBetaTesting = enableBetaTesting; + } + + public Integer getEnableRenewal() { + return enableRenewal; + } + + public void setEnableRenewal(Integer enableRenewal) { + this.enableRenewal = enableRenewal; + } + + public Integer getSecurityProviderId() { + return securityProviderId; + } + + public void setSecurityProviderId(Integer securityProviderId) { + this.securityProviderId = securityProviderId; + } + + public Integer getDefaultCustomerId() { + return defaultCustomerId; + } + + public void setDefaultCustomerId(Integer defaultCustomerId) { + this.defaultCustomerId = defaultCustomerId; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + @Override + public String toString() { + return "User{" + + "userId='" + userId + '\'' + + ", password='" + password + '\'' + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", email='" + email + '\'' + + ", address1='" + address1 + '\'' + + ", address2='" + address2 + '\'' + + ", country='" + country + '\'' + + ", postal='" + postal + '\'' + + ", role='" + role + '\'' + + ", otherRoles='" + otherRoles + '\'' + + ", isActive=" + isActive + + ", isBlocked=" + isBlocked + + ", secretQuestion='" + secretQuestion + '\'' + + ", secretAnswer='" + secretAnswer + '\'' + + ", enableBetaTesting=" + enableBetaTesting + + ", enableRenewal=" + enableRenewal + + ", phone='" + phone + '\'' + + ", securityProviderId=" + securityProviderId + + ", defaultCustomerId=" + defaultCustomerId + + ", company='" + company + '\'' + + '}'; + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/user/UserResponse.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/user/UserResponse.java new file mode 100644 index 0000000..fe6e04b --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/entity/user/UserResponse.java @@ -0,0 +1,7 @@ +package com.cengenes.configuration.api.entity.user; + +import com.cengenes.configuration.api.entity.response.OperationResponse; + +public class UserResponse extends OperationResponse { + private User data = new User(); +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/DynamicConfigurationApiException.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/DynamicConfigurationApiException.java index 92377a7..85ad434 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/DynamicConfigurationApiException.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/DynamicConfigurationApiException.java @@ -1,20 +1,20 @@ -package com.cengenes.configuration.api.exception; - -/** - * @author enes.acikoglu - */ -public abstract class DynamicConfigurationApiException extends RuntimeException { - - /** - * - */ - private static final long serialVersionUID = 1256671219899520653L; - - public DynamicConfigurationApiException(String message) { - super(message); - } - - public DynamicConfigurationApiException(String message, Throwable cause) { - super(message, cause); - } -} +package com.cengenes.configuration.api.exception; + +/** + * @author enes.acikoglu + */ +public abstract class DynamicConfigurationApiException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = 1256671219899520653L; + + public DynamicConfigurationApiException(String message) { + super(message); + } + + public DynamicConfigurationApiException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/EntityNotFoundException.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/EntityNotFoundException.java index 0650383..a9c39b2 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/EntityNotFoundException.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/EntityNotFoundException.java @@ -1,17 +1,17 @@ -package com.cengenes.configuration.api.exception; - -public class EntityNotFoundException extends DynamicConfigurationApiException { - - /** - * - */ - private static final long serialVersionUID = 1595331078979818402L; - - public EntityNotFoundException(String message) { - super(message); - } - - public EntityNotFoundException(String message, Throwable cause) { - super(message, cause); - } +package com.cengenes.configuration.api.exception; + +public class EntityNotFoundException extends DynamicConfigurationApiException { + + /** + * + */ + private static final long serialVersionUID = 1595331078979818402L; + + public EntityNotFoundException(String message) { + super(message); + } + + public EntityNotFoundException(String message, Throwable cause) { + super(message, cause); + } } \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/MissingMandatoryFieldException.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/MissingMandatoryFieldException.java index 7f38589..cf65c92 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/MissingMandatoryFieldException.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/exception/MissingMandatoryFieldException.java @@ -1,17 +1,17 @@ -package com.cengenes.configuration.api.exception; - -public class MissingMandatoryFieldException extends DynamicConfigurationApiException { - - /** - * - */ - private static final long serialVersionUID = -1901236013226031468L; - - public MissingMandatoryFieldException(String message) { - super(message); - } - - public MissingMandatoryFieldException(String message, Throwable cause) { - super(message, cause); - } +package com.cengenes.configuration.api.exception; + +public class MissingMandatoryFieldException extends DynamicConfigurationApiException { + + /** + * + */ + private static final long serialVersionUID = -1901236013226031468L; + + public MissingMandatoryFieldException(String message) { + super(message); + } + + public MissingMandatoryFieldException(String message, Throwable cause) { + super(message, cause); + } } \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/BookRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/BookRepository.java new file mode 100644 index 0000000..4f4118b --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/BookRepository.java @@ -0,0 +1,25 @@ +package com.cengenes.configuration.api.repository; + +import com.cengenes.configuration.api.entity.book.Book; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import javax.transaction.Transactional; + +import java.util.List; +import java.util.Optional; + +@Transactional +public interface BookRepository extends JpaRepository { + List findAll(); + Page findAll(Pageable p); + Optional findOneById(Integer id); + Book findBookById(Integer id); + + //Product deleteById(Integer id); + //void delete(Product p) ; + //void delete(Integer id); + //boolean exists( Integer id); + //Product save(Product p); +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/ConfigurationRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/ConfigurationRepository.java index c5d5b8e..a25f76c 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/ConfigurationRepository.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/ConfigurationRepository.java @@ -1,13 +1,16 @@ -package com.cengenes.configuration.api.repository; - -import java.util.List; - -import org.springframework.data.jpa.repository.JpaRepository; - -import com.cengenes.configuration.api.entity.Configuration; - -public interface ConfigurationRepository extends JpaRepository { - - List findByApplicationNameAndIsActive(String applicationName, Boolean isActive); - -} +package com.cengenes.configuration.api.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.cengenes.configuration.api.entity.Configuration; +import org.springframework.data.jpa.repository.Query; + +public interface ConfigurationRepository extends JpaRepository { + + List findByApplicationNameAndIsActive(String applicationName, Boolean isActive); + + @Query(value = "DELETE FROM configuration WHERE configuration.id = ?1", nativeQuery = true) + void delete(Long configuration); +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/CustomerRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/CustomerRepository.java new file mode 100644 index 0000000..6ede686 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/CustomerRepository.java @@ -0,0 +1,18 @@ +package com.cengenes.configuration.api.repository; + +import com.cengenes.configuration.api.entity.customer.Customer; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CustomerRepository extends JpaRepository { + List findAll(); + Page findAll(Pageable p); + Customer save(Customer c); + void deleteCustomerById(Integer id); + Customer findCustomerById( Integer id); +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/EmployeeRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/EmployeeRepository.java new file mode 100644 index 0000000..9d855fc --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/EmployeeRepository.java @@ -0,0 +1,16 @@ +package com.cengenes.configuration.api.repository; + +import com.cengenes.configuration.api.entity.employee.Employee; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface EmployeeRepository extends JpaRepository { + List findAll(); + Page findAll(Pageable p); + Employee save(Employee e); + void deleteEmployeeById(Integer id); + Employee findEmployeeById( Integer id); +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderInfoRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderInfoRepository.java new file mode 100644 index 0000000..2dc8b76 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderInfoRepository.java @@ -0,0 +1,13 @@ +package com.cengenes.configuration.api.repository; + +import com.cengenes.configuration.api.entity.order.OrderInfo; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface OrderInfoRepository extends JpaRepository { + List findAll(); + Page findAll(Pageable p); +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderItemRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderItemRepository.java new file mode 100644 index 0000000..769eec5 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderItemRepository.java @@ -0,0 +1,13 @@ +package com.cengenes.configuration.api.repository; + +import com.cengenes.configuration.api.entity.order.OrderItem; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface OrderItemRepository extends JpaRepository { + List findAll(); + Page findAll(Pageable p); +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderRepository.java new file mode 100644 index 0000000..bc45a81 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/OrderRepository.java @@ -0,0 +1,13 @@ +package com.cengenes.configuration.api.repository; + +import com.cengenes.configuration.api.entity.order.Order; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface OrderRepository extends JpaRepository { + List findAll(); + Page findAll(Pageable p); +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/UserRepository.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/UserRepository.java new file mode 100644 index 0000000..9afc9b2 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/repository/UserRepository.java @@ -0,0 +1,11 @@ +package com.cengenes.configuration.api.repository; + +import com.cengenes.configuration.api.entity.user.User; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserRepository extends JpaRepository { + Optional findOneByUserId(String userId); + Optional findOneByUserIdAndPassword(String userId, String password); +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/AuthService.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/AuthService.java new file mode 100644 index 0000000..5e6b0f9 --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/AuthService.java @@ -0,0 +1,7 @@ +package com.cengenes.configuration.api.service; + +import javax.servlet.http.HttpServletResponse; + +public interface AuthService { + void authenticate(String authHeader, HttpServletResponse response); +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/ConfigurationService.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/ConfigurationService.java index 8db9a1d..86a2351 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/ConfigurationService.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/ConfigurationService.java @@ -1,27 +1,27 @@ -package com.cengenes.configuration.api.service; - -import java.util.List; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; - -import com.cengenes.configuration.api.dto.ConfigurationDto; -import com.cengenes.configuration.api.entity.Configuration; - -public interface ConfigurationService { - - Page findAll(Pageable pageable); - - ConfigurationDto findOne(Long id); - - List findActiveApplicationsByName(String applicationName); - - Configuration save(ConfigurationDto entity); - - ConfigurationDto update(Long id, ConfigurationDto request); - - void delete(Long id); - - List findAll(); - -} +package com.cengenes.configuration.api.service; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import com.cengenes.configuration.api.dto.ConfigurationDto; +import com.cengenes.configuration.api.entity.Configuration; + +public interface ConfigurationService { + + Page findAll(Pageable pageable); + + ConfigurationDto findOne(Long id); + + List findActiveApplicationsByName(String applicationName); + + Configuration save(ConfigurationDto entity); + + ConfigurationDto update(Long id, ConfigurationDto request); + + void delete(Long id); + + List findAll(); + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/imp/AuthServiceImpl.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/imp/AuthServiceImpl.java new file mode 100644 index 0000000..fafcb9e --- /dev/null +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/imp/AuthServiceImpl.java @@ -0,0 +1,31 @@ +package com.cengenes.configuration.api.service.imp; + +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.cengenes.configuration.api.entity.user.User; +import com.cengenes.configuration.api.repository.UserRepository; +import com.cengenes.configuration.api.service.AuthService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletResponse; +import java.util.Optional; + +@Service +public class AuthServiceImpl implements AuthService { + + @Autowired + private UserRepository userRepository; + + @Override + public void authenticate(String authHeader, HttpServletResponse response) { + String[] parts = authHeader.split(":"); + String username = parts[0]; + String password = parts[1]; + Optional user = userRepository.findOneByUserIdAndPassword(username, password); + if(user.isPresent()){ + response.setStatus(200); + } else { + response.setStatus(401); + } + } +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/imp/ConfigurationServiceImp.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/imp/ConfigurationServiceImp.java index be43935..3d56354 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/imp/ConfigurationServiceImp.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/service/imp/ConfigurationServiceImp.java @@ -1,107 +1,107 @@ -package com.cengenes.configuration.api.service.imp; - -import java.util.List; -import java.util.stream.Collectors; - -import javax.transaction.Transactional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; - -import com.cengenes.configuration.api.converter.ConfigurationDtoToEntityConverter; -import com.cengenes.configuration.api.converter.ConfigurationEntityToDtoConverter; -import com.cengenes.configuration.api.dto.ConfigurationDto; -import com.cengenes.configuration.api.entity.Configuration; -import com.cengenes.configuration.api.exception.EntityNotFoundException; -import com.cengenes.configuration.api.repository.ConfigurationRepository; -import com.cengenes.configuration.api.service.ConfigurationService; -import com.cengenes.configuration.api.validator.ConfigurationInfoValidator; - -@Service -@Transactional -public class ConfigurationServiceImp implements ConfigurationService { - - @Autowired - private ConfigurationRepository configurationRepository; - - @Autowired - private ConfigurationEntityToDtoConverter entityToDtoConverter; - - @Autowired - private ConfigurationDtoToEntityConverter dtoToEntityConverter; - - @Autowired - private ConfigurationInfoValidator configurationInfoValidator; - - @Override - public ConfigurationDto findOne(Long id) { - - Configuration configuration = configurationRepository.findOne(id); - - if (configuration == null) - throw new EntityNotFoundException("entity.notFound"); - - return entityToDtoConverter.convert(configuration); - } - - @Override - public Configuration save(ConfigurationDto entity) { - configurationInfoValidator.validate(entity); - return configurationRepository.save(dtoToEntityConverter.convert(entity)); - } - - @Override - public List findActiveApplicationsByName(String applicationName) { - - List configurations = configurationRepository.findByApplicationNameAndIsActive(applicationName, - Boolean.TRUE); - - if (configurations.isEmpty()) - throw new EntityNotFoundException("entity.notFound"); - - return configurations.parallelStream().map(entityToDtoConverter::convert).collect(Collectors.toList()); - } - - @Override - public ConfigurationDto update(Long id, ConfigurationDto request) { - - configurationInfoValidator.validate(request); - - Configuration existingEntity = configurationRepository.findOne(id); - - if (existingEntity == null) - throw new EntityNotFoundException("entity.notFound"); - - Configuration newEntity = dtoToEntityConverter.convert(request); - - newEntity.setId(existingEntity.getId()); - - return entityToDtoConverter.convert((configurationRepository.save(newEntity))); - } - - @Override - public void delete(Long id) { - - Configuration existingEntity = configurationRepository.findOne(id); - - if (existingEntity == null) - throw new EntityNotFoundException("entity.notFound"); - - configurationRepository.delete(id); - - } - - @Override - public Page findAll(Pageable pageable) { - return configurationRepository.findAll(pageable); - } - - @Override - public List findAll() { - return configurationRepository.findAll().parallelStream().map(entityToDtoConverter::convert) - .collect(Collectors.toList()); - } - -} +package com.cengenes.configuration.api.service.imp; + +import java.util.List; +import java.util.stream.Collectors; + +import javax.transaction.Transactional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import com.cengenes.configuration.api.converter.ConfigurationDtoToEntityConverter; +import com.cengenes.configuration.api.converter.ConfigurationEntityToDtoConverter; +import com.cengenes.configuration.api.dto.ConfigurationDto; +import com.cengenes.configuration.api.entity.Configuration; +import com.cengenes.configuration.api.exception.EntityNotFoundException; +import com.cengenes.configuration.api.repository.ConfigurationRepository; +import com.cengenes.configuration.api.service.ConfigurationService; +import com.cengenes.configuration.api.validator.ConfigurationInfoValidator; + +@Service +@Transactional +public class ConfigurationServiceImp implements ConfigurationService { + + @Autowired + private ConfigurationRepository configurationRepository; + + @Autowired + private ConfigurationEntityToDtoConverter entityToDtoConverter; + + @Autowired + private ConfigurationDtoToEntityConverter dtoToEntityConverter; + + @Autowired + private ConfigurationInfoValidator configurationInfoValidator; + + @Override + public ConfigurationDto findOne(Long id) { + + Configuration configuration = configurationRepository.getOne(id); + + if (configuration == null) + throw new EntityNotFoundException("entity.notFound"); + + return entityToDtoConverter.convert(configuration); + } + + @Override + public Configuration save(ConfigurationDto entity) { + configurationInfoValidator.validate(entity); + return configurationRepository.save(dtoToEntityConverter.convert(entity)); + } + + @Override + public List findActiveApplicationsByName(String applicationName) { + + List configurations = configurationRepository.findByApplicationNameAndIsActive(applicationName, + Boolean.TRUE); + + if (configurations.isEmpty()) + throw new EntityNotFoundException("entity.notFound"); + + return configurations.parallelStream().map(entityToDtoConverter::convert).collect(Collectors.toList()); + } + + @Override + public ConfigurationDto update(Long id, ConfigurationDto request) { + + configurationInfoValidator.validate(request); + + Configuration existingEntity = configurationRepository.getOne(id); + + if (existingEntity == null) + throw new EntityNotFoundException("entity.notFound"); + + Configuration newEntity = dtoToEntityConverter.convert(request); + + newEntity.setId(existingEntity.getId()); + + return entityToDtoConverter.convert((configurationRepository.save(newEntity))); + } + + @Override + public void delete(Long id) { + + Configuration existingEntity = configurationRepository.getOne(id); + + if (existingEntity == null) + throw new EntityNotFoundException("entity.notFound"); + + configurationRepository.delete(id); + + } + + @Override + public Page findAll(Pageable pageable) { + return configurationRepository.findAll(pageable); + } + + @Override + public List findAll() { + return configurationRepository.findAll().parallelStream().map(entityToDtoConverter::convert) + .collect(Collectors.toList()); + } + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/types/RequestStatus.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/types/RequestStatus.java index 513e57d..bcc08ec 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/types/RequestStatus.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/types/RequestStatus.java @@ -1,6 +1,6 @@ -package com.cengenes.configuration.api.types; - -public enum RequestStatus { - SUCCESS, FAILURE; - -} +package com.cengenes.configuration.api.types; + +public enum RequestStatus { + SUCCESS, FAILURE; + +} diff --git a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/validator/ConfigurationInfoValidator.java b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/validator/ConfigurationInfoValidator.java index 6ef61e9..4aed34d 100644 --- a/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/validator/ConfigurationInfoValidator.java +++ b/SpringBootCrudApi/src/main/java/com/cengenes/configuration/api/validator/ConfigurationInfoValidator.java @@ -1,21 +1,21 @@ -package com.cengenes.configuration.api.validator; - -import org.springframework.stereotype.Component; - -import com.cengenes.configuration.api.dto.ConfigurationDto; -import com.cengenes.configuration.api.exception.MissingMandatoryFieldException; - -@Component -public class ConfigurationInfoValidator { - - public void validate(ConfigurationDto configurationDto) { - - if (configurationDto == null || configurationDto.getName() == null - || configurationDto.getApplicationName() == null || configurationDto.getType() == null - || configurationDto.getValue() == null || configurationDto.getIsActive() == null) - - throw new MissingMandatoryFieldException("missing.field"); - - } - -} +package com.cengenes.configuration.api.validator; + +import org.springframework.stereotype.Component; + +import com.cengenes.configuration.api.dto.ConfigurationDto; +import com.cengenes.configuration.api.exception.MissingMandatoryFieldException; + +@Component +public class ConfigurationInfoValidator { + + public void validate(ConfigurationDto configurationDto) { + + if (configurationDto == null || configurationDto.getName() == null + || configurationDto.getApplicationName() == null || configurationDto.getType() == null + || configurationDto.getValue() == null || configurationDto.getIsActive() == null) + + throw new MissingMandatoryFieldException("missing.field"); + + } + +} diff --git a/SpringBootCrudApi/src/main/resources/application.properties b/SpringBootCrudApi/src/main/resources/application.properties index 395ac7f..c5f3177 100644 --- a/SpringBootCrudApi/src/main/resources/application.properties +++ b/SpringBootCrudApi/src/main/resources/application.properties @@ -1,24 +1,14 @@ -security.user.name=test -security.user.password=1 - - -# H2 -spring.h2.console.enabled=true -spring.h2.console.path=/h2 - - -spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=test -spring.datasource.password=1 -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect - - - - -#spring h2 in-memory database enabled -spring.datasource.platform=h2 -spring.datasource.continueOnError=false -spring.jpa.hibernate.ddl-auto=create-drop -spring.datasource.data=classpath:/db-init/configuration/configuration-h2.sql -spring.jpa.properties.hibernate.show_sql=true + +# H2 +spring.h2.console.enabled=true +spring.h2.console.path=/h2 + + +spring.datasource.url=jdbc:h2:mem:demo;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +spring.datasource.username=sa +spring.datasource.password= +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.platform=h2 +spring.datasource.initialize=true +spring.jpa.hibernate.ddl-auto=none +spring.datasource.continue-on-error=false diff --git a/SpringBootCrudApi/src/main/resources/data.sql b/SpringBootCrudApi/src/main/resources/data.sql new file mode 100644 index 0000000..e2c891b --- /dev/null +++ b/SpringBootCrudApi/src/main/resources/data.sql @@ -0,0 +1,2661 @@ +/* User */ +insert into user (user_id, password, first_name, last_name, email, company, phone, address1, address2, country, postal, + role, is_active, is_blocked, security_provider_id, default_customer_id, secret_question, + secret_answer, enable_beta_testing, enable_renewal) +values ('demo', 'demo', 'Mrinmoy', 'Majumdar', 'arivera2@joomla.org', 'Abshire Inc', '7-(740)701-4547', + '80429 Garrison Crossing', '4967', 'USA', '64890', 'USER', 1, 0, 10001, 20000, 'Diverse', 'Yellow', 0, 0), + ('admin', 'admin', 'Theresa', 'Russell', 'trussell1@about.me', 'Glover, Adams and Bins', '383-(779)851-3208', + '30874 Graceland Terrace', '99152', 'USA', '51065', 'ADMIN', 1, 0, 10001, 20000, 'knowledge base', 'Mauv', 1, + 0), + ('user', 'user', 'Virginia', 'Reynolds', 'vreynolds0@slashdot.org', 'Rippin, Osinski and Beatty', + '84-(228)809-9998', '0118 Burrows Plaza', '496', 'USA', '94086', 'USER', 1, 0, 10001, 20000, 'Innovative', + 'Turquoise', 1, 1), + ('jowens3', 'jowens3', 'Judy', 'Owens', 'jowens3@hp.com', 'Altenwerth, Fisher and Heidenreich', + '30-(772)268-8227', '98 Loeprich Way', '447', 'Greece', null, 'USER', 0, 0, 10001, 20001, 'capacity', 'Fuscia', + 1, 1), + ('kburns4', 'kburns4', 'Kelly', 'Burns', 'kburns4@icio.us', 'McCullough-Morar', '86-(857)185-5740', + '1638 Basil Alley', '56297', 'China', null, 'ADMIN', 1, 0, 10000, 20002, 'user-facing', 'Crimson', 1, 1), + ('jshaw5', 'jshaw5', 'Julie', 'Shaw', 'jshaw5@opera.com', 'Steuber-Okuneva', '1-(871)375-6188', + '389 Myrtle Pass', '41444', 'Canada', null, 'ADMIN', 1, 1, 10000, 20000, 'software', 'Green', 0, 1), + ('pgilbert6', 'pgilbert6', 'Peter', 'Gilbert', 'pgilbert6@eepurl.com', 'Robel Inc', '52-(372)555-4687', + '11522 Fuller Avenue', '5', 'Mexico', '39230', 'ADMIN', 1, 1, 10000, 20000, 'multi-state', 'Puce', 1, 1), + ('jjacobs7', 'jjacobs7', 'Justin', 'Jacobs', 'jjacobs7@google.co.uk', 'Harris-Bashirian', '963-(199)359-2552', + '95012 Hanover Street', '2377', 'India', null, 'USER', 1, 0, 10000, 20002, 'motivating', 'Crimson', 1, 0), + ('kbennett8', 'kbennett8', 'Kevin', 'Bennett', 'kbennett8@hostgator.com', 'Leannon Inc', '62-(892)710-5713', + '459 Coleman Drive', '397', 'Indonesia', null, 'ADMIN', 0, 0, 10001, 20000, 'Exclusive', 'Purple', 1, 1), + ('cmurphy9', 'cmurphy9', 'Chris', 'Murphy', 'cmurphy9@over-blog.com', 'Mosciski LLC', '64-(272)961-0086', + '2 Ludington Point', '7', 'New Zealand', null, 'ADMIN', 0, 1, 10000, 20000, 'empowering', 'Maroon', 0, 1); + +/* Employees */ +insert into employees (id, last_name, first_name, email, phone, address1, address2, city, state, postal_code, country, + avatar, job_title, department, manager_id) +values (201, 'Harris', 'George', 'gharris0@pagesperso-orange.fr', '1-(210)270-8536', '2 Bayside Drive', null, + 'San Antonio', 'Texas', '78240', 'United States', + 'https://robohash.org/modilaboriosammolestiae.bmp?size=50x50&set=set1', 'Administrative Assistant I', 'Toys', + null) + , (202, 'Hayes', 'Rachel', 'rhayes1@si.edu', '1-(971)797-2729', '30 Anhalt Street', null, 'Portland', 'Oregon', + '97232', 'United States', 'https://robohash.org/seddistinctiodolorem.jpg?size=50x50&set=set1', + 'Design Engineer', 'Books', null) + , (203, 'Palmer', 'Anthony', 'apalmer2@posterous.com', '1-(702)984-2108', '02809 4th Pass', null, + 'North Las Vegas', 'Nevada', '89036', 'United States', + 'https://robohash.org/vitaererumdolore.png?size=50x50&set=set1', 'Health Coach II', 'Toys', null) + , (204, 'Alvarez', 'Laura', 'lalvarez3@time.com', '1-(518)328-2658', '647 Lakeland Road', null, 'Albany', + 'New York', '12210', 'United States', 'https://robohash.org/nobisplaceatquisquam.jpg?size=50x50&set=set1', + 'Computer Systems Analyst II', 'Health', null) + , (205, 'Reynolds', 'Annie', 'areynolds4@nasa.gov', '1-(775)838-2203', '163 Carey Street', null, 'Reno', 'Nevada', + '89550', 'United States', 'https://robohash.org/praesentiumdoloremrerum.png?size=50x50&set=set1', + 'Senior Quality Engineer', 'Kids', null) + , (206, 'Henry', 'Joe', 'jhenry5@bbb.org', '1-(682)563-2229', '1 Harper Circle', null, 'Fort Worth', 'Texas', + '76178', 'United States', 'https://robohash.org/earumiurevoluptas.jpg?size=50x50&set=set1', + 'Chief Design Engineer', 'Electronics', null) + , (207, 'Willis', 'Willie', 'wwillis6@berkeley.edu', '1-(317)654-6888', '641 Kropf Parkway', null, 'Indianapolis', + 'Indiana', '46216', 'United States', 'https://robohash.org/suntsitnecessitatibus.png?size=50x50&set=set1', + 'Structural Analysis Engineer', 'Shoes', null) + , (208, 'Lawrence', 'Keith', 'klawrence7@discovery.com', '1-(501)583-8851', '2184 Melby Crossing', null, + 'Little Rock', 'Arkansas', '72222', 'United States', + 'https://robohash.org/delenitiomnisconsequatur.jpg?size=50x50&set=set1', 'VP Quality Control', 'Outdoors', null) + , (209, 'Johnston', 'Tina', 'tjohnston8@alexa.com', '1-(901)128-9976', '72 Hauk Road', null, 'Memphis', + 'Tennessee', '38114', 'United States', 'https://robohash.org/voluptasautmaiores.png?size=50x50&set=set1', + 'Assistant Media Planner', 'Electronics', null) + , (210, 'Burns', 'Lisa', 'lburns9@taobao.com', '1-(585)113-8402', '99 Manufacturers Drive', null, 'Rochester', + 'New York', '14624', 'United States', 'https://robohash.org/illumsinttempore.jpg?size=50x50&set=set1', + 'Operator', 'Industrial', null) + , (211, 'Stone', 'Howard', 'hstonea@ucsd.edu', '1-(202)958-2516', '03 Anthes Center', null, 'Washington', + 'District of Columbia', '20425', 'United States', 'https://robohash.org/eautet.bmp?size=50x50&set=set1', + 'Account Executive', 'Electronics', null) + , (212, 'Brown', 'Julie', 'jbrownb@squidoo.com', '1-(217)741-6449', '37574 4th Drive', null, 'Springfield', + 'Illinois', '62705', 'United States', 'https://robohash.org/laborumtotameveniet.png?size=50x50&set=set1', + 'Analog Circuit Design manager', 'Electronics', null) + , (213, 'Turner', 'Edward', 'eturnerc@theatlantic.com', '1-(701)353-1996', '3 Bultman Circle', null, 'Fargo', + 'North Dakota', '58122', 'United States', 'https://robohash.org/sedutporro.png?size=50x50&set=set1', + 'Structural Engineer', 'Computers', null) + , (214, 'Nichols', 'Douglas', 'dnicholsd@fda.gov', '1-(302)771-6486', '5150 Holmberg Way', null, 'Wilmington', + 'Delaware', '19805', 'United States', 'https://robohash.org/blanditiiscommodiet.png?size=50x50&set=set1', + 'Editor', 'Outdoors', null) + , (215, 'Gilbert', 'Jessica', 'jgilberte@infoseek.co.jp', '1-(320)607-0289', '32 Summit Park', null, 'Saint Cloud', + 'Minnesota', '56372', 'United States', 'https://robohash.org/providentaccusamussed.bmp?size=50x50&set=set1', + 'Account Executive', 'Baby', null) + , (216, 'Hernandez', 'Kathy', 'khernandezf@shinystat.com', '1-(210)733-3380', '24 Merrick Way', null, + 'San Antonio', 'Texas', '78225', 'United States', 'https://robohash.org/utfaciliset.png?size=50x50&set=set1', + 'Junior Executive', 'Movies', null) + , (217, 'Sullivan', 'Lillian', 'lsullivang@flavors.me', '1-(904)885-2053', '42 Manufacturers Pass', null, + 'Jacksonville', 'Florida', '32215', 'United States', 'https://robohash.org/quiaetaut.jpg?size=50x50&set=set1', + 'Engineer I', 'Sports', null) + , (218, 'Jenkins', 'Frances', 'fjenkinsh@huffingtonpost.com', '1-(512)764-3809', '69255 Dakota Plaza', null, + 'Austin', 'Texas', '78769', 'United States', + 'https://robohash.org/voluptatemnamaliquam.bmp?size=50x50&set=set1', 'Developer IV', 'Baby', null) + , (219, 'Myers', 'Roger', 'rmyersi@alexa.com', '1-(480)583-9583', '3 Eagle Crest Place', null, 'Gilbert', + 'Arizona', '85297', 'United States', 'https://robohash.org/consequaturutquo.png?size=50x50&set=set1', + 'Account Executive', 'Beauty', null) + , (220, 'Hunter', 'Bonnie', 'bhunterj@ucsd.edu', '1-(320)933-5140', '99 Arapahoe Terrace', null, 'Saint Cloud', + 'Minnesota', '56372', 'United States', 'https://robohash.org/etfacilisquo.bmp?size=50x50&set=set1', + 'Analog Circuit Design manager', 'Baby', null); + +/* Books */ +insert into books (id, book_code, book_name, description, standard_cost, list_price, target_level, reorder_level, + minimum_reorder_quantity, quantity_per_unit, discontinued, category) +values (601, 'B1', 'Game Of Thrones I.', null, 47.09, 23.39, 75, 10, 10, 50, 1, 'Adventure') + , (602, 'B2', 'Game Of Thrones II.', null, 38.83, 93.84, 90, 15, 15, 56, 0, 'Adventure') + , (603, 'B3', 'The 100', null, 82.83, 83.84, 95, 20, 30, 56, 0, 'Drama') + , (604, 'B4', 'Introduction to Big Data', null, 82.83, 93.84, 180, 75, 50, 56, 0, 'Informative') + , (605, 'B5', 'Wayward Pines II.', null, 88.83, 93.84, 40, 15, 15, 56, 0, 'Drama') + , (606, 'B6', 'Thinking in Java', null, 63.88, 51.7, 75, 10, 20, 79, 1, 'Action') + , (607, 'B7', 'Wayward Pines III.', null, 11.02, 13.98, 100, 30, 10, 92, 1, 'Drama') + , (608, 'B8', 'Harry Potter and the Philosophers Stone', null, 58.44, 46.34, 75, 20, 20, 54, 1, 'Action') + , (609, 'B9', 'C programming for experts', null, 47.58, 48.83, 50, 5, 15, 58, 1, 'Informative') + , (610, 'B10', 'Conjuring', null, 15.81, 15.61, 120, 40, 30, 11, 1, 'Drama') + , (611, 'B11', 'Game Of Thrones III.', null, 87.09, 72.39, 75, 25, 15, 50, 1, 'Adventure') + , (612, 'B12', 'The Traveller', null, 82.83, 79.84, 50, 10, 5, 56, 0, 'Adventure') + , (613, 'B13', 'Supernatural', null, 82.83, 93.84, 55, 10, 5, 56, 0, 'Drama') + , (614, 'B14', 'Criminal Minds', null, 82.83, 93.84, 50, 10, 10, 56, 0, 'Drama') + , (615, 'B15', 'Introduction to C++', null, 86.83, 93.84, 200, 80, 50, 56, 0, 'Informative') + , (616, 'B16', 'Harry Potter and the Prisoner of Azkaban', null, 33.88, 71.76, 250, 100, 50, 79, 1, 'Action') + , (617, 'B17', 'Harry Potter and the Goblet of Fire', null, 41.02, 60.98, 100, 30, 20, 92, 1, 'Action') + , (618, 'B18', 'Harry Potter and the Chamber of Secrets', null, 53.44, 56.34, 75, 15, 10, 54, 1, 'Action') + , (619, 'B19', 'Python for beginers', null, 57.58, 48.83, 75, 15, 15, 58, 1, 'Informative') + , (620, 'B20', 'Wayward Pines I.', null, 17.81, 10.61, 80, 14, 10, 11, 1, 'Drama'); + +/* Customers */ +insert into customers (id, last_name, first_name, email, company, phone, address1, address2, city, state, postal_code, + country) +values (1, 'Gray', 'Clarence', 'cgray0@rambler.ru', 'Jetpulse', '1-(260)615-5114', '02937 Merrick Avenue', null, + 'Fort Wayne', 'Indiana', '46805', 'United States') + , (2, 'Cooper', 'Emily', 'ecooper1@macromedia.com', 'Skippad', '1-(251)614-5034', '60 Forster Crossing', null, + 'Mobile', 'Alabama', '36605', 'United States') + , (3, 'Wilson', 'George', 'gwilson2@xinhuanet.com', 'Riffpath', '1-(901)445-9881', '52 Browning Center', null, + 'Memphis', 'Tennessee', '38181', 'United States') + , (4, 'Mcdonald', 'Michael', 'mmcdonald3@twitter.com', 'Feedfire', '1-(419)743-7314', '85093 Jackson Park', null, + 'Toledo', 'Ohio', '43610', 'United States') + , (5, 'Tucker', 'Lori', 'ltucker4@etsy.com', 'Oyondu', '1-(202)381-2663', '0706 Heffernan Pass', null, + 'Washington', 'District of Columbia', '20380', 'United States') + , (6, 'Hansen', 'Lois', 'lhansen5@stumbleupon.com', 'Yozio', '1-(315)385-6866', '2 Ruskin Pass', null, 'Syracuse', + 'New York', '13251', 'United States') + , (7, 'Grant', 'Frances', 'fgrant6@yale.edu', 'Eire', '1-(863)799-9068', '61402 Morning Court', null, 'Lakeland', + 'Florida', '33811', 'United States') + , (8, 'Lewis', 'Catherine', 'clewis7@unesco.org', 'Realpoint', '1-(915)208-4997', '775 Messerschmidt Junction', + null, 'El Paso', 'Texas', '88563', 'United States') + , (9, 'Rogers', 'Edward', 'erogers8@guardian.co.uk', 'Quinu', '1-(971)934-2404', '7074 Montana Place', null, + 'Portland', 'Oregon', '97271', 'United States') + , (10, 'Owens', 'Tina', 'towens9@earthlink.net', 'Blogtag', '1-(712)989-9002', '59039 Sachtjen Street', null, + 'Sioux City', 'Iowa', '51105', 'United States') + , (11, 'Peterson', 'Fred', 'fpetersona@home.pl', 'Meedoo', '1-(202)228-9380', '55 Knutson Street', null, + 'Washington', 'District of Columbia', '20099', 'United States') + , (12, 'Cox', 'Jason', 'jcoxb@slashdot.org', 'Tagcat', '1-(651)991-0172', '19 Hoffman Avenue', null, 'Saint Paul', + 'Minnesota', '55114', 'United States') + , (13, 'Perez', 'Paul', 'pperezc@ask.com', 'Kazu', '1-(405)290-7944', '6336 Continental Circle', null, + 'Oklahoma City', 'Oklahoma', '73167', 'United States') + , (14, 'Duncan', 'Anthony', 'aduncand@disqus.com', 'Aibox', '1-(727)705-8400', '17794 Northport Point', null, + 'Clearwater', 'Florida', '33763', 'United States') + , (15, 'Graham', 'Sean', 'sgrahame@google.com.br', 'Tekfly', '1-(901)443-0731', '47493 Reinke Drive', null, + 'Memphis', 'Tennessee', '38131', 'United States') + , (16, 'Simpson', 'Jose', 'jsimpsonf@youtube.com', 'Youspan', '1-(518)381-4659', '498 Carey Lane', null, 'Albany', + 'New York', '12262', 'United States') + , (17, 'Simmons', 'Frances', 'fsimmonsg@webster.com', 'Feednation', '1-(251)473-1327', '44102 Montana Crossing', + null, 'Mobile', 'Alabama', '36641', 'United States') + , (18, 'Schmidt', 'John', 'jschmidth@vinaora.com', 'Topicblab', '1-(202)945-2079', '384 Goodland Pass', null, + 'Washington', 'District of Columbia', '20210', 'United States') + , (19, 'West', 'Roger', 'rwesti@cornell.edu', 'Skilith', '1-(716)707-3907', '74 Nancy Pass', null, 'Buffalo', + 'New York', '14215', 'United States') + , (20, 'Fields', 'Jesse', 'jfieldsj@shop-pro.jp', 'Vinte', '1-(617)810-9493', '602 Laurel Park', null, 'Boston', + 'Massachusetts', '02203', 'United States') + , (21, 'Patterson', 'Kathy', 'kpattersonk@machines.org', 'Brainverse', '1-(806)803-9725', '67063 Spenser Junction', + null, 'Amarillo', 'Texas', '79188', 'United States') + , (22, 'Bell', 'Stephanie', 'sbelll@gravatar.com', 'DabZ', '1-(801)924-1975', '05 Gina Crossing', null, + 'Salt Lake City', 'Utah', '84145', 'United States') + , (23, 'Turner', 'Martha', 'mturnerm@hp.com', 'Yadel', '1-(225)880-9134', '97789 Scofield Point', null, + 'Baton Rouge', 'Louisiana', '70894', 'United States') + , (24, 'Ross', 'Richard', 'rrossn@weebly.com', 'Voolith', '1-(415)690-1916', '19 Briar Crest Alley', null, + 'San Francisco', 'California', '94164', 'United States') + , (25, 'Stephens', 'Stephanie', 'sstephenso@times.co.uk', 'BlogXS', '1-(501)827-1408', '63291 Huxley Drive', null, + 'North Little Rock', 'Arkansas', '72118', 'United States') + , (26, 'Sanchez', 'Diane', 'dsanchezp@sun.com', 'Tagtune', '1-(315)979-6793', '13 Oneill Junction', null, + 'Syracuse', 'New York', '13224', 'United States') + , (27, 'Lawrence', 'Douglas', 'dlawrenceq@flickr.com', 'Browsetype', '1-(610)622-4045', '83224 Mallard Center', + null, 'Philadelphia', 'Pennsylvania', '19109', 'United States') + , (28, 'Hansen', 'Lori', 'lhansenr@patch.com', 'Einti', '1-(915)266-1989', '48410 Westport Circle', null, + 'El Paso', 'Texas', '88546', 'United States') + , (29, 'Medina', 'Robert', 'rmedinas@uiuc.edu', 'Tambee', '1-(216)752-7216', '0562 Muir Trail', null, 'Cleveland', + 'Ohio', '44197', 'United States') + , (30, 'Harrison', 'Shawn', 'sharrisont@webnode.com', 'Youopia', '1-(205)595-8085', '20 Mayer Center', null, + 'Birmingham', 'Alabama', '35205', 'United States') + , (31, 'Alexander', 'Julia', 'jalexanderu@netsol.com', 'Oodoo', '1-(864)349-2185', '61859 West Point', null, + 'Greenville', 'South Carolina', '29610', 'United States') + , (32, 'Stanley', 'Victor', 'vstanleyv@wikipedia.org', 'Centimia', '1-(561)507-7317', '08229 Glacier Hill Avenue', + null, 'Boynton Beach', 'Florida', '33436', 'United States') + , (33, 'Wheeler', 'Dennis', 'dwheelerw@indiatimes.com', 'Dynabox', '1-(419)889-2883', '409 American Ash Plaza', + null, 'Lima', 'Ohio', '45807', 'United States') + , (34, 'Frazier', 'Rachel', 'rfrazierx@sfgate.com', 'Skivee', '1-(314)249-1796', '7 Waxwing Court', null, + 'Saint Louis', 'Missouri', '63131', 'United States') + , (35, 'Brooks', 'Shawn', 'sbrooksy@mediafire.com', 'Omba', '1-(971)854-8478', '614 Monica Terrace', null, + 'Portland', 'Oregon', '97240', 'United States') + , (36, 'Coleman', 'Frank', 'fcolemanz@un.org', 'Agimba', '1-(318)446-4337', '4 Browning Park', null, 'Shreveport', + 'Louisiana', '71151', 'United States') + , (37, 'Wright', 'Frank', 'fwright10@flickr.com', 'Meedoo', '1-(504)852-2553', '03446 Sheridan Trail', null, + 'New Orleans', 'Louisiana', '70183', 'United States') + , (38, 'Perkins', 'Tina', 'tperkins11@va.gov', 'Rhybox', '1-(571)497-0755', '62 Grayhawk Lane', null, 'Fairfax', + 'Virginia', '22036', 'United States') + , (39, 'Griffin', 'Ruth', 'rgriffin12@pcworld.com', 'Trudoo', '1-(504)312-7448', '29701 Jenifer Junction', null, + 'Metairie', 'Louisiana', '70033', 'United States') + , (40, 'Sanchez', 'Sean', 'ssanchez13@bandcamp.com', 'Chatterpoint', '1-(316)535-7647', '10 Stuart Road', null, + 'Wichita', 'Kansas', '67260', 'United States') + , (41, 'Harris', 'Linda', 'lharris14@ask.com', 'Blogpad', '1-(913)258-6547', '17635 Elka Alley', null, + 'Shawnee Mission', 'Kansas', '66205', 'United States') + , (42, 'Wood', 'George', 'gwood15@imdb.com', 'Feednation', '1-(865)482-7169', '210 Anhalt Drive', null, + 'Knoxville', 'Tennessee', '37924', 'United States') + , (43, 'Bennett', 'Nancy', 'nbennett16@netsol.com', 'Yodo', '1-(210)749-3167', '97861 Harper Pass', null, + 'San Antonio', 'Texas', '78260', 'United States') + , (44, 'Pierce', 'Jesse', 'jpierce17@cyberchimps.com', 'Divanoodle', '1-(501)518-2300', '0 Columbus Terrace', null, + 'Little Rock', 'Arkansas', '72231', 'United States') + , (45, 'Larson', 'Jerry', 'jlarson18@ustream.tv', 'Kazu', '1-(916)702-0977', '0422 Merry Court', null, + 'Sacramento', 'California', '95852', 'United States') + , (46, 'Williams', 'Norma', 'nwilliams19@spiegel.de', 'Yacero', '1-(562)631-4036', '5779 Burning Wood Crossing', + null, 'Long Beach', 'California', '90847', 'United States') + , (47, 'Kelley', 'Louis', 'lkelley1a@wsj.com', 'Linkbuzz', '1-(432)286-2200', '04321 Northport Pass', null, + 'Odessa', 'Texas', '79764', 'United States') + , (48, 'Mason', 'Ruby', 'rmason1b@census.gov', 'Trudeo', '1-(763)835-7627', '99219 5th Place', null, 'Monticello', + 'Minnesota', '55565', 'United States') + , (49, 'Carr', 'Nicole', 'ncarr1c@yellowbook.com', 'Plajo', '1-(330)154-9245', '41 Monica Parkway', null, + 'Youngstown', 'Ohio', '44511', 'United States') + , (50, 'Franklin', 'Michelle', 'mfranklin1d@ucoz.com', 'Wikivu', '1-(405)751-8906', '62 Rutledge Alley', null, + 'Oklahoma City', 'Oklahoma', '73147', 'United States') + , (51, 'Hawkins', 'Larry', 'lhawkins1e@typepad.com', 'Tagpad', '1-(240)796-9270', '48 Columbus Road', null, + 'Hagerstown', 'Maryland', '21747', 'United States') + , (52, 'Adams', 'Lillian', 'ladams1f@smugmug.com', 'Avamm', '1-(419)394-2363', '69708 West Avenue', null, 'Toledo', + 'Ohio', '43605', 'United States') + , (53, 'Williamson', 'Janice', 'jwilliamson1g@sbwire.com', 'Wordware', '1-(212)576-0309', '311 Clemons Crossing', + null, 'New York City', 'New York', '10090', 'United States') + , (54, 'Mitchell', 'Lisa', 'lmitchell1h@live.com', 'Trudoo', '1-(225)794-6979', '17242 Eagan Terrace', null, + 'Baton Rouge', 'Louisiana', '70820', 'United States') + , (55, 'Lawrence', 'Anna', 'alawrence1i@manage.com', 'Pixope', '1-(818)505-8262', '51241 Tennessee Point', null, + 'Santa Monica', 'California', '90405', 'United States') + , (56, 'Scott', 'Margaret', 'mscott1j@arizona.edu', 'Mynte', '1-(202)265-0994', '117 Arapahoe Crossing', null, + 'Washington', 'District of Columbia', '20051', 'United States') + , (57, 'Harper', 'Timothy', 'tharper1k@loc.gov', 'Trudoo', '1-(212)348-5025', '137 Commercial Court', null, + 'New York City', 'New York', '10175', 'United States') + , (58, 'Frazier', 'Mary', 'mfrazier1l@mapy.cz', 'Photobug', '1-(214)939-0299', '281 Briar Crest Way', null, + 'Garland', 'Texas', '75049', 'United States') + , (59, 'Young', 'Margaret', 'myoung1m@ehow.com', 'Realmix', '1-(318)144-2666', '537 Memorial Way', null, + 'Shreveport', 'Louisiana', '71105', 'United States') + , (60, 'Sullivan', 'Phyllis', 'psullivan1n@jiathis.com', 'Demivee', '1-(518)361-7505', '117 Onsgard Crossing', + null, 'Albany', 'New York', '12227', 'United States') + , (61, 'Knight', 'Roy', 'rknight1o@qq.com', 'Meezzy', '1-(478)438-2599', '60 Kinsman Drive', null, 'Macon', + 'United Kingdom', '31210', 'United States') + , (62, 'Ruiz', 'Andrea', 'aruiz1p@domainmarket.com', 'Fivespan', '1-(415)374-7204', '55455 Heffernan Plaza', null, + 'San Francisco', 'California', '94142', 'United States') + , (63, 'Hayes', 'Heather', 'hhayes1q@odnoklasniki.ru', 'Twitternation', '1-(615)919-6350', '31 Banding Plaza', + null, 'Jackson', 'Mississippi', '39296', 'United States') + , (64, 'Chapman', 'Roy', 'rchapman1r@theguardian.com', 'BlogXS', '1-(941)329-4488', '27487 Fair Oaks Crossing', + null, 'Sarasota', 'Florida', '34233', 'United States') + , (65, 'Moore', 'Daniel', 'dmoore1s@google.co.uk', 'Twitterbridge', '1-(408)838-8747', '52377 Everett Court', null, + 'San Jose', 'California', '95194', 'United States') + , (66, 'Day', 'Amy', 'aday1t@indiegogo.com', 'Brainverse', '1-(336)903-6679', '50107 Northport Circle', null, + 'Winston Salem', 'North Carolina', '27157', 'United States') + , (67, 'Kelley', 'Jesse', 'jkelley1u@who.int', 'Zoomzone', '1-(304)183-6041', '31740 Bayside Trail', null, + 'Huntington', 'West Virginia', '25711', 'United States') + , (68, 'Andrews', 'Andrea', 'aandrews1v@patch.com', 'Fanoodle', '1-(206)996-3516', '544 Lakewood Gardens Alley', + null, 'Seattle', 'Washington', '98148', 'United States') + , (69, 'Willis', 'Robert', 'rwillis1w@si.edu', 'Tazz', '1-(678)738-3382', '0998 Bellgrove Circle', null, 'Duluth', + 'United Kingdom', '30195', 'United States') + , (70, 'Reid', 'Daniel', 'dreid1x@miitbeian.gov.cn', 'Babbleblab', '1-(786)539-0220', '2 New Castle Avenue', null, + 'Miami', 'Florida', '33111', 'United States') + , (71, 'Roberts', 'Louise', 'lroberts1y@cpanel.net', 'Skippad', '1-(316)418-5043', '598 Mayfield Road', null, + 'Wichita', 'Kansas', '67210', 'United States') + , (72, 'Harrison', 'Margaret', 'mharrison1z@globe.ne.jp', 'Zoovu', '1-(775)625-5357', '636 Maple Point', null, + 'Reno', 'Nevada', '89550', 'United States') + , (73, 'Chapman', 'Peter', 'pchapman20@eventbrite.com', 'Linkbuzz', '1-(574)707-4449', '1 Vermont Plaza', null, + 'South Bend', 'Indiana', '46620', 'United States') + , (74, 'Tucker', 'Willie', 'wtucker21@hubpages.com', 'Eazzy', '1-(814)593-2963', '3 Dryden Trail', null, 'Erie', + 'Pennsylvania', '16505', 'United States') + , (75, 'Bradley', 'Adam', 'abradley22@cnet.com', 'Yabox', '1-(903)334-0845', '15 Veith Center', null, 'Tyler', + 'Texas', '75705', 'United States') + , (76, 'Armstrong', 'Juan', 'jarmstrong23@archive.org', 'Gevee', '1-(916)285-8157', '95 Claremont Crossing', null, + 'Sacramento', 'California', '95865', 'United States') + , (77, 'Payne', 'Kenneth', 'kpayne24@com.com', 'Skinte', '1-(770)150-8423', '75 Beilfuss Court', null, + 'Alpharetta', 'United Kingdom', '30022', 'United States') + , (78, 'Jacobs', 'Louis', 'ljacobs25@intel.com', 'Photolist', '1-(404)386-3449', '542 Browning Park', null, + 'Atlanta', 'United Kingdom', '30343', 'United States') + , (79, 'Cooper', 'Marilyn', 'mcooper26@whitehouse.gov', 'Yotz', '1-(520)875-3539', '03 Transport Point', null, + 'Tucson', 'Arizona', '85710', 'United States') + , (80, 'Watkins', 'William', 'wwatkins27@pbs.org', 'Brightbean', '1-(719)568-3678', '0316 La Follette Drive', null, + 'Colorado Springs', 'Colorado', '80920', 'United States') + , (81, 'Baker', 'Douglas', 'dbaker28@exblog.jp', 'Voonix', '1-(619)121-6070', '99 Kedzie Terrace', null, + 'Chula Vista', 'California', '91913', 'United States') + , (82, 'Cunningham', 'Daniel', 'dcunningham29@oakley.com', 'Leexo', '1-(619)609-6206', '53540 Hallows Place', null, + 'San Diego', 'California', '92137', 'United States') + , (83, 'Mitchell', 'Edward', 'emitchell2a@amazon.com', 'Jatri', '1-(502)427-5275', '3 Jana Junction', null, + 'Louisville', 'Kentucky', '40280', 'United States') + , (84, 'Matthews', 'Adam', 'amatthews2b@live.com', 'Muxo', '1-(316)764-9074', '5 Arapahoe Plaza', null, 'Wichita', + 'Kansas', '67220', 'United States') + , (85, 'Jacobs', 'Diane', 'djacobs2c@jimdo.com', 'Youspan', '1-(804)398-4775', '6 Moose Street', null, 'Richmond', + 'Virginia', '23285', 'United States') + , (86, 'Frazier', 'Mary', 'mfrazier2d@forbes.com', 'Zoomdog', '1-(716)502-4243', '713 Continental Trail', null, + 'Buffalo', 'New York', '14210', 'United States') + , (87, 'Howard', 'Anthony', 'ahoward2e@disqus.com', 'Katz', '1-(805)800-7968', '006 Elka Center', null, + 'Bakersfield', 'California', '93311', 'United States') + , (88, 'Kelly', 'Anna', 'akelly2f@unc.edu', 'Trilia', '1-(804)117-9707', '292 Browning Circle', null, 'Richmond', + 'Virginia', '23228', 'United States') + , (89, 'Clark', 'Kathy', 'kclark2g@businesswire.com', 'Gigabox', '1-(831)755-4869', '45 Walton Parkway', null, + 'Salinas', 'California', '93907', 'United States') + , (90, 'Carpenter', 'Gerald', 'gcarpenter2h@foxnews.com', 'Yakidoo', '1-(213)344-9608', '84560 Stephen Parkway', + null, 'Los Angeles', 'California', '90055', 'United States') + , (91, 'Hart', 'Albert', 'ahart2i@scribd.com', 'Jaloo', '1-(415)201-5281', '0 Washington Place', null, 'Oakland', + 'California', '94611', 'United States') + , (92, 'Young', 'Julia', 'jyoung2j@craigslist.org', 'Oloo', '1-(615)660-1203', '0623 Gale Drive', null, 'Jackson', + 'Mississippi', '39210', 'United States') + , (93, 'Pierce', 'Tammy', 'tpierce2k@psu.edu', 'Ntags', '1-(703)772-3155', '501 Leroy Parkway', null, 'Washington', + 'District of Columbia', '20041', 'United States') + , (94, 'Washington', 'Ronald', 'rwashington2l@drupal.org', 'Livetube', '1-(202)828-6093', '6220 Del Sol Alley', + null, 'Washington', 'District of Columbia', '20551', 'United States') + , (95, 'Carter', 'Alan', 'acarter2m@simplemachines.org', 'Centizu', '1-(952)234-1678', '043 Sunnyside Center', + null, 'Young America', 'Minnesota', '55551', 'United States') + , (96, 'Freeman', 'Stephanie', 'sfreeman2n@redcross.org', 'Feednation', '1-(504)126-8245', '1120 Veith Parkway', + null, 'New Orleans', 'Louisiana', '70165', 'United States') + , (97, 'Price', 'Sara', 'sprice2o@irs.gov', 'Izio', '1-(415)668-5714', '96394 Bonner Hill', null, 'San Francisco', + 'California', '94116', 'United States') + , (98, 'Parker', 'Emily', 'eparker2p@4shared.com', 'Skalith', '1-(330)637-4894', '0 Old Shore Center', null, + 'Akron', 'Ohio', '44310', 'United States') + , (99, 'Chavez', 'Jeremy', 'jchavez2q@businessweek.com', 'Topicware', '1-(515)769-2045', '8584 Jay Street', null, + 'Des Moines', 'Iowa', '50335', 'United States') + , (100, 'Kim', 'Pamela', 'pkim2r@stumbleupon.com', 'Photolist', '1-(510)144-4318', '3688 Gerald Trail', null, + 'Sacramento', 'California', '95823', 'United States'); + + +/* orders */ +insert into orders (id, employee_id, customer_id, order_date, shipped_date, ship_name, ship_address1, ship_address2, + ship_city, ship_state, ship_postal_code, ship_country, shipping_fee, payment_type, paid_date, + order_status) +values (4001, 204, 40, '2016-04-05', '2016-11-06', 'Jean Fuller', '93 Spohn Place', null, 'Manggekompo', null, null, + 'Indonesia', 8.14, 'Card', '2016-10-12', 'On Hold') + , (4002, 204, 95, '2017-01-29', '2016-05-28', 'Diane Holmes', '46 Eliot Trail', null, 'Virginia Beach', 'Virginia', + '23459', 'United States', 1.55, 'Check', '2016-06-27', 'Shipped') + , (4003, 218, 54, '2016-08-19', '2016-12-08', 'Jerry Frazier', '23 Sundown Junction', null, 'Obodivka', null, null, + 'Ukraine', 2.29, 'Cash', '2016-09-27', 'On Hold') + , (4004, 204, 69, '2016-09-25', '2016-12-24', 'Denise Freeman', '4909 Beilfuss Hill', null, 'Nova Venécia', null, + '29830-000', 'Brazil', 4.77, 'Check', '2016-07-04', 'New') + , (4005, 215, 10, '2017-03-14', '2016-03-19', 'Jonathan Gordon', '7 Ludington Court', null, 'Sukamaju', null, null, + 'Indonesia', 8.78, 'Check', '2016-03-22', 'On Hold') + , (4006, 211, 23, '2016-08-14', '2016-12-05', 'Sean Carter', '859 Dahle Plaza', null, 'Dayou', null, null, 'China', + 9.43, 'Cash', '2016-08-21', 'New') + , (4007, 204, 92, '2017-01-02', '2016-07-09', 'Alice Warren', '5 Fuller Center', null, 'Log pri Brezovici', null, + '1358', 'India', 3.25, 'Cash', '2016-03-24', 'Shipped') + , (4008, 205, 20, '2016-05-15', '2016-09-12', 'Andrea Hamilton', '99 Blue Bill Park Junction', null, 'Liangshui', + null, null, 'China', 7.04, 'Check', '2016-09-02', 'On Hold') + , (4009, 219, 58, '2016-11-27', '2017-03-02', 'Wanda Hill', '907 Sundown Court', null, 'Pedra Azul', null, + '39970-000', 'Brazil', 4.35, 'Cash', '2016-09-27', 'On Hold') + , (4010, 218, 57, '2016-09-11', '2017-02-26', 'Carolyn Foster', '0 Charing Cross Court', null, 'Chicago', + 'Illinois', '60609', 'United States', 1.23, 'Cash', '2016-08-09', 'Complete') + , (4011, 207, 3, '2017-03-01', '2016-08-04', 'Timothy Warren', '19 John Wall Parkway', null, 'Lyon', 'Rhône-Alpes', + '69362 CEDEX 07', 'France', 9.57, 'Card', '2016-05-08', 'Complete') + , (4012, 210, 59, '2016-12-31', '2016-08-08', 'Kathleen Marshall', '2 Swallow Circle', null, 'Cunliji', null, null, + 'China', 9.03, 'Cash', '2016-04-23', 'On Hold') + , (4013, 204, 57, '2017-01-11', '2017-02-13', 'Jane Ortiz', '1136 Kedzie Alley', null, 'Eirado', + 'Viana do Castelo', '4990-540', 'Portugal', 8.9, 'Check', '2016-10-26', 'Shipped') + , (4014, 212, 26, '2016-09-23', '2016-05-13', 'Carolyn Martinez', '954 Kropf Court', null, 'Ibitinga', null, + '14940-000', 'Brazil', 4.57, 'Card', '2016-09-11', 'New') + , (4015, 201, 86, '2016-11-04', '2016-10-03', 'Debra Willis', '89 Grasskamp Road', null, 'San Francisco', null, + '8501', 'Philippines', 3.53, 'Card', '2016-10-05', 'New') + , (4016, 208, 17, '2016-04-17', '2016-03-22', 'Sharon Little', '27501 Sommers Junction', null, 'San Juan Opico', + null, null, 'India', 6.87, 'Card', '2017-01-08', 'Complete') + , (4017, 205, 73, '2016-07-03', '2016-09-26', 'Nancy Hughes', '1 John Wall Avenue', null, 'La Libertad', null, + null, 'Argentina', 4.67, 'Check', '2017-02-01', 'New') + , (4018, 213, 16, '2016-12-01', '2016-06-08', 'Sara Knight', '98248 Tony Pass', null, 'Val-d''Or', 'Québec', 'J9P', + 'Canada', 9.52, 'Card', '2016-08-06', 'New') + , (4019, 209, 10, '2016-04-18', '2016-04-25', 'Russell Wood', '3 Commercial Point', null, 'Rokietnica', null, + '62-090', 'Poland', 6.8, 'Card', '2017-01-20', 'On Hold') + , (4020, 216, 1, '2016-07-23', '2017-02-23', 'Aaron Grant', '15477 Farwell Circle', null, 'Yongyang', null, null, + 'China', 3.17, 'Cash', '2016-08-11', 'Complete') + , (4021, 209, 38, '2016-12-16', '2017-02-14', 'Ryan Foster', '9218 Leroy Avenue', null, 'Mogapinyana', null, null, + 'India', 3.34, 'Cash', '2016-06-21', 'On Hold') + , (4022, 207, 91, '2016-07-18', '2016-04-06', 'Peter Montgomery', '570 Londonderry Pass', null, 'Mathakola', null, + null, 'India', 8.11, 'Card', '2016-10-27', 'New') + , (4023, 209, 39, '2016-07-15', '2017-02-02', 'Lawrence Schmidt', '371 Acker Drive', null, 'Mesa', 'Arizona', + '85205', 'United States', 1.39, 'Cash', '2016-10-27', 'Complete') + , (4024, 219, 51, '2016-12-08', '2017-01-03', 'Eric Gray', '4608 Farmco Point', null, 'Gemblengmulyo', null, null, + 'Indonesia', 8.76, 'Card', '2016-05-13', 'Complete') + , (4025, 204, 77, '2016-09-24', '2017-01-20', 'Gloria Green', '62 Sunnyside Park', null, 'Itararé', null, + '18460-000', 'Brazil', 7.75, 'Cash', '2017-02-06', 'On Hold') + , (4026, 215, 73, '2016-09-15', '2016-12-24', 'Nicholas Price', '5672 Ruskin Hill', null, 'Maimará', null, '4624', + 'Argentina', 9.11, 'Card', '2016-07-22', 'On Hold') + , (4027, 208, 98, '2016-05-31', '2016-07-14', 'Doris Watson', '133 Gina Street', null, 'Bantiran', null, null, + 'Indonesia', 3.0, 'Cash', '2016-10-08', 'Complete') + , (4028, 217, 39, '2016-05-10', '2016-04-07', 'Linda Foster', '40382 4th Terrace', null, 'Agrelo', 'Braga', + '4730-300', 'Portugal', 2.39, 'Cash', '2016-09-11', 'Complete') + , (4029, 212, 52, '2016-09-14', '2016-12-21', 'Anthony Spencer', '02 Esker Junction', null, 'El Ocotón', null, + null, 'Canada', 7.72, 'Check', '2016-09-23', 'Shipped') + , (4030, 218, 74, '2016-05-08', '2016-07-21', 'James Kennedy', '7460 Westport Hill', null, 'Köln', + 'Nordrhein-Westfalen', '51107', 'Germany', 6.16, 'Cash', '2016-11-27', 'Shipped') + , (4031, 214, 4, '2016-05-31', '2017-03-03', 'Theresa Robinson', '44 Havey Way', null, 'Qingtong', null, null, + 'China', 5.02, 'Check', '2017-03-15', 'New') + , (4032, 201, 81, '2016-07-05', '2016-11-18', 'Jesse Ray', '68 Derek Hill', null, 'Azogues', null, null, + 'Argentina', 5.41, 'Check', '2016-10-16', 'New') + , (4033, 203, 15, '2016-09-07', '2016-06-09', 'Harold Fields', '2 Vermont Terrace', null, 'Mogocha', null, + '673732', 'Russia', 2.38, 'Check', '2016-03-30', 'Complete') + , (4034, 217, 11, '2016-08-19', '2016-12-08', 'Larry Watkins', '629 Waxwing Avenue', null, 'Krasnyy Oktyabr’', + null, '398526', 'Russia', 5.23, 'Cash', '2016-07-01', 'On Hold') + , (4035, 205, 51, '2016-11-29', '2016-09-02', 'Debra Marshall', '23578 Arizona Junction', null, 'Juhut', null, + null, 'Indonesia', 1.59, 'Card', '2016-06-17', 'Shipped') + , (4036, 217, 56, '2016-10-21', '2017-02-13', 'Todd Stephens', '63633 Columbus Avenue', null, 'Paccho', null, null, + 'Peru', 5.09, 'Cash', '2016-04-25', 'New') + , (4037, 219, 60, '2016-09-22', '2016-11-08', 'Jean Webb', '0916 Grover Way', null, 'Kuršėnai', null, '81001', + 'Denmark', 8.66, 'Cash', '2016-09-30', 'Shipped') + , (4038, 213, 3, '2016-06-01', '2016-10-07', 'Heather Snyder', '44 Grayhawk Court', null, 'Haenam', null, null, + 'Finland', 5.33, 'Cash', '2016-06-30', 'Complete') + , (4039, 201, 28, '2017-02-19', '2016-11-25', 'Janet Howard', '5351 Barby Trail', null, 'Shanghu', null, null, + 'China', 9.18, 'Check', '2017-03-16', 'On Hold') + , (4040, 215, 74, '2016-09-14', '2016-06-23', 'Aaron Wheeler', '08 Burrows Avenue', null, 'Tân Sơn', null, null, + 'Vietnam', 3.36, 'Card', '2017-03-05', 'New') + , (4041, 204, 79, '2016-09-27', '2017-02-15', 'Lori Watkins', '3 Pennsylvania Court', null, 'Victoria', null, + 'VCT', 'India', 9.41, 'Card', '2016-08-12', 'New') + , (4042, 205, 92, '2016-11-03', '2016-05-11', 'Alice Miller', '7895 Amoth Avenue', null, 'Mae Lao', null, '57250', + 'Thailand', 2.11, 'Cash', '2016-08-06', 'Shipped') + , (4043, 212, 82, '2016-11-17', '2016-04-19', 'Marilyn Nguyen', '25203 Meadow Ridge Plaza', null, 'Nine', 'Braga', + '4775-446', 'Portugal', 6.03, 'Cash', '2016-05-07', 'On Hold') + , (4044, 218, 55, '2016-06-26', '2016-08-15', 'Ashley West', '08621 Porter Lane', null, 'Kingsport', 'Tennessee', + '37665', 'United States', 8.23, 'Cash', '2016-12-17', 'New') + , (4045, 217, 53, '2016-05-07', '2017-02-25', 'Julia Fernandez', '91519 Harbort Way', null, 'Issoire', 'Auvergne', + '63504 CEDEX', 'France', 1.14, 'Check', '2016-10-27', 'Complete') + , (4046, 211, 78, '2016-12-11', '2017-02-15', 'Willie Sims', '683 Caliangt Parkway', null, 'Balazar', 'Braga', + '4805-005', 'Portugal', 6.57, 'Card', '2017-02-13', 'On Hold') + , (4047, 201, 77, '2016-05-20', '2017-02-19', 'Samuel Burke', '25 Grover Lane', null, 'Housuo', null, null, + 'China', 6.99, 'Cash', '2016-08-12', 'New') + , (4048, 217, 72, '2016-11-06', '2016-09-29', 'Patricia Green', '29791 Thierer Street', null, 'Campamento', null, + '052027', 'Argentina', 3.33, 'Check', '2016-03-24', 'Complete') + , (4049, 210, 98, '2016-08-24', '2016-04-16', 'Nicole Washington', '68 Monica Point', null, 'Cikaung', null, null, + 'Indonesia', 5.78, 'Check', '2016-04-30', 'Complete') + , (4050, 215, 26, '2016-10-07', '2016-11-03', 'Marie Bryant', '36611 Schlimgen Place', null, 'Villa Francisca', + null, '10215', 'Canada', 4.11, 'Check', '2016-07-29', 'Complete') + , (4051, 212, 51, '2016-05-19', '2017-03-16', 'Brandon Lane', '5 Duke Center', null, 'Soutinho', 'Porto', + '4650-530', 'Portugal', 9.62, 'Check', '2016-11-28', 'Shipped') + , (4052, 205, 9, '2016-07-19', '2016-09-05', 'Pamela Ferguson', '0 Mockingbird Crossing', null, 'Jefferson City', + 'Missouri', '65105', 'United States', 9.98, 'Card', '2016-12-08', 'Shipped') + , (4053, 210, 42, '2016-04-09', '2017-02-05', 'Gloria Edwards', '8275 Sage Plaza', null, 'Yilkiqi', null, null, + 'China', 5.21, 'Cash', '2016-11-10', 'On Hold') + , (4054, 211, 70, '2017-02-28', '2017-02-11', 'John Cole', '4679 Trailsway Circle', null, 'Sanlanbahai', null, + null, 'China', 4.42, 'Card', '2017-01-06', 'Complete') + , (4055, 208, 65, '2017-01-11', '2017-02-14', 'Bobby Butler', '314 Jenna Crossing', null, 'Malusac', null, '2005', + 'Philippines', 7.37, 'Cash', '2017-03-15', 'Shipped') + , (4056, 220, 15, '2016-07-12', '2016-09-06', 'Anthony Lane', '1 Packers Avenue', null, 'Batambak', null, null, + 'Indonesia', 5.41, 'Card', '2016-11-21', 'On Hold') + , (4057, 220, 76, '2016-05-05', '2016-04-19', 'Karen Ray', '891 Raven Street', null, 'Chinju', null, null, + 'Finland', 4.71, 'Cash', '2017-02-11', 'On Hold') + , (4058, 216, 90, '2017-01-26', '2016-12-19', 'Martha Gonzalez', '8695 Mandrake Place', null, 'Maythalūn', null, + null, 'India', 1.75, 'Card', '2017-03-16', 'On Hold') + , (4059, 212, 43, '2016-09-20', '2017-02-11', 'Judy Daniels', '154 Lukken Court', null, 'Luoqiao', null, null, + 'China', 4.63, 'Check', '2016-11-09', 'On Hold') + , (4060, 207, 80, '2016-04-29', '2016-07-01', 'Jane Stevens', '43 Kingsford Pass', null, 'Dobruševo', null, '7514', + 'Denmark', 1.96, 'Cash', '2016-09-02', 'On Hold') + , (4061, 214, 89, '2016-10-09', '2016-09-09', 'Emily Miller', '5 Pearson Lane', null, 'East London', null, '5688', + 'South Africa', 2.14, 'Card', '2016-06-10', 'Complete') + , (4062, 220, 8, '2016-12-01', '2017-03-09', 'Sarah Johnson', '30 Chinook Lane', null, 'Selishche', null, '180536', + 'Russia', 3.76, 'Card', '2016-11-18', 'On Hold') + , (4063, 220, 48, '2017-03-05', '2016-11-30', 'Carolyn Reyes', '72 Michigan Pass', null, 'Sukasenang', null, null, + 'Indonesia', 6.52, 'Cash', '2016-05-20', 'Shipped') + , (4064, 214, 31, '2016-07-19', '2016-08-16', 'Kathryn Coleman', '43358 Packers Court', null, 'Przystajń', null, + '42-141', 'Poland', 1.68, 'Card', '2016-12-13', 'Complete') + , (4065, 205, 41, '2016-12-09', '2016-03-20', 'Clarence Graham', '1675 Starling Point', null, 'Zangbawa', null, + null, 'China', 5.82, 'Cash', '2016-07-08', 'Complete') + , (4066, 205, 41, '2016-05-25', '2016-11-15', 'David Harris', '00 Warner Court', null, 'Kabba', null, null, + 'Netherlands', 7.24, 'Cash', '2016-09-24', 'New') + , (4067, 218, 13, '2016-07-24', '2016-12-06', 'Ruth Fields', '88567 Golf Course Plaza', null, 'Mauá', null, + '09300-000', 'Brazil', 6.82, 'Cash', '2017-01-26', 'New') + , (4068, 206, 11, '2016-05-04', '2016-07-10', 'Todd Butler', '88 Graedel Point', null, 'Jablah', null, null, + 'India', 3.83, 'Cash', '2016-06-17', 'On Hold') + , (4069, 215, 55, '2016-12-22', '2016-03-28', 'Catherine Perkins', '95 Troy Parkway', null, 'Frampol', null, + '23-440', 'Poland', 7.6, 'Check', '2016-08-24', 'Shipped') + , (4070, 220, 40, '2016-10-17', '2016-12-01', 'Jeffrey Rodriguez', '3393 Weeping Birch Court', null, 'Burunday', + null, null, 'Denmark', 2.52, 'Cash', '2016-09-06', 'Shipped') + , (4071, 218, 70, '2017-03-16', '2016-12-09', 'Rachel Butler', '79327 Ridgeway Circle', null, 'Dupnitsa', null, + '2680', 'Denmark', 6.25, 'Check', '2016-04-02', 'Complete') + , (4072, 205, 45, '2017-01-22', '2016-05-15', 'Robin Fisher', '0 Susan Court', null, 'Morohongō', null, '357-0211', + 'Japan', 4.42, 'Card', '2017-03-06', 'Complete') + , (4073, 217, 94, '2017-01-25', '2016-04-11', 'Ruth Carpenter', '4 Glacier Hill Road', null, 'Ngrejo', null, null, + 'Indonesia', 4.9, 'Cash', '2016-08-13', 'On Hold') + , (4074, 219, 27, '2017-01-06', '2017-01-03', 'Irene Kelly', '0 Comanche Junction', null, 'Chao', null, null, + 'Peru', 5.32, 'Check', '2016-11-20', 'On Hold') + , (4075, 214, 44, '2016-06-24', '2016-12-20', 'Douglas Sims', '81709 Helena Park', null, 'Dongmaku', null, null, + 'China', 3.35, 'Card', '2017-02-27', 'Complete') + , (4076, 216, 27, '2016-09-23', '2016-10-05', 'Kenneth Rose', '5316 Dottie Way', null, 'Olszówka', null, '62-641', + 'Poland', 2.63, 'Cash', '2016-05-27', 'Shipped') + , (4077, 211, 84, '2016-11-24', '2016-08-04', 'Jimmy Morgan', '42187 Shoshone Center', null, 'Saltsjöbaden', + 'Stockholm', '133 41', 'Sweden', 1.11, 'Cash', '2016-09-09', 'On Hold') + , (4078, 202, 57, '2016-05-28', '2016-06-02', 'Annie Vasquez', '5 Lien Junction', null, 'Al Qaţn', null, null, + 'South Africa', 2.73, 'Check', '2016-11-14', 'On Hold') + , (4079, 202, 64, '2016-07-05', '2016-05-20', 'Henry Mccoy', '58 Nelson Circle', null, 'Tsaghkahovit', null, null, + 'India', 3.29, 'Card', '2016-08-18', 'Shipped') + , (4080, 216, 44, '2017-02-20', '2016-10-08', 'Norma Graham', '27 Heffernan Pass', null, 'Cairima', null, null, + 'China', 7.02, 'Check', '2017-03-06', 'Complete') + , (4081, 218, 60, '2017-03-16', '2016-08-06', 'Albert Wright', '572 Vahlen Place', null, 'Drahovo', null, null, + 'Ukraine', 4.92, 'Check', '2017-01-29', 'New') + , (4082, 219, 15, '2016-12-26', '2017-02-17', 'Jane Wells', '21 Merchant Way', null, 'Acacías', null, '507009', + 'Argentina', 6.53, 'Card', '2016-06-04', 'Complete') + , (4083, 212, 61, '2016-06-24', '2016-03-23', 'Jesse Mitchell', '4060 Carioca Drive', null, 'Ntoroko', null, null, + 'South Africa', 9.41, 'Cash', '2016-10-19', 'On Hold') + , (4084, 216, 3, '2016-08-20', '2017-02-15', 'Carlos Brooks', '868 Pankratz Trail', null, 'Bat Khela', null, + '18351', 'Iran', 1.0, 'Check', '2016-12-22', 'On Hold') + , (4085, 209, 25, '2016-12-03', '2016-06-01', 'Christopher Williamson', '8874 Starling Plaza', null, 'Tarbes', + 'Midi-Pyrénées', '65951 CEDEX 9', 'France', 4.15, 'Card', '2017-02-04', 'New') + , (4086, 205, 2, '2016-06-19', '2016-08-26', 'Joseph Wells', '7223 Carpenter Road', null, 'Chitral', null, '17200', + 'Iran', 5.31, 'Card', '2016-07-22', 'Shipped') + , (4087, 216, 96, '2016-06-04', '2016-12-31', 'Teresa Thomas', '908 Ramsey Junction', null, 'Dzerzhinskiy', null, + '140083', 'Russia', 4.29, 'Cash', '2017-03-03', 'Shipped') + , (4088, 203, 35, '2016-09-21', '2017-01-08', 'Scott Gomez', '70537 Tennessee Crossing', null, 'Bồng Sơn', null, + null, 'Vietnam', 6.93, 'Cash', '2017-01-01', 'New') + , (4089, 210, 18, '2017-02-17', '2016-10-28', 'Nicole Miller', '0 Jackson Place', null, 'Šilheřovice', null, + '747 15', 'Czech Republic', 5.64, 'Card', '2016-11-17', 'On Hold') + , (4090, 201, 8, '2016-11-12', '2016-06-02', 'Donald Nguyen', '7320 Bunting Pass', null, 'Namioka', null, + '953-0062', 'Japan', 7.07, 'Cash', '2016-09-29', 'Complete') + , (4091, 212, 67, '2016-04-08', '2016-11-21', 'Shawn Myers', '1844 Esch Plaza', null, 'Gračec', null, '10370', + 'Canada', 4.84, 'Card', '2016-03-17', 'New') + , (4092, 220, 16, '2017-01-12', '2016-08-04', 'Daniel Armstrong', '2 Donald Alley', null, 'La Colorada', null, + null, 'Denmark', 2.98, 'Check', '2016-12-08', 'Shipped') + , (4093, 203, 60, '2016-04-17', '2016-05-10', 'Henry Gonzales', '23848 6th Center', null, 'Guayatá', null, + '153047', 'Argentina', 1.54, 'Check', '2016-04-18', 'New') + , (4094, 209, 37, '2016-08-07', '2016-04-26', 'Stephanie Snyder', '1152 Morning Park', null, 'Zhitan', null, null, + 'China', 9.76, 'Card', '2016-05-23', 'New') + , (4095, 205, 46, '2016-09-01', '2017-02-25', 'Joan Butler', '98050 Mitchell Point', null, 'Bun Barat', null, null, + 'Indonesia', 9.57, 'Card', '2017-01-25', 'Shipped') + , (4096, 211, 92, '2017-01-02', '2016-12-06', 'Gloria Murray', '8 Vidon Terrace', null, 'Rumenka', null, null, + 'India', 5.33, 'Card', '2016-12-28', 'Shipped') + , (4097, 210, 66, '2016-07-04', '2016-05-30', 'Dorothy Simpson', '0 Pearson Point', null, 'Yevpatoriya', null, + null, 'Ukraine', 3.52, 'Check', '2016-04-28', 'Complete') + , (4098, 219, 59, '2016-09-27', '2016-12-17', 'Katherine Brooks', '921 Anhalt Place', null, 'Rietavas', null, + '90018', 'Denmark', 5.29, 'Check', '2016-12-19', 'Complete') + , (4099, 207, 65, '2016-07-06', '2016-10-11', 'Linda Reid', '89712 Dryden Point', null, 'Bronnitsy', null, + '142451', 'Russia', 5.68, 'Card', '2016-07-08', 'New') + , (4100, 212, 61, '2016-04-14', '2016-05-02', 'Richard Carpenter', '17032 Melrose Crossing', null, 'White River', + null, '1256', 'South Africa', 7.22, 'Card', '2016-08-03', 'Shipped') + , (4101, 206, 23, '2016-03-28', '2016-12-01', 'Clarence Coleman', '9167 Valley Edge Point', null, 'Guocun', null, + null, 'China', 5.86, 'Check', '2016-08-19', 'Shipped') + , (4102, 202, 16, '2016-07-26', '2017-01-18', 'Kevin Dunn', '178 Park Meadow Avenue', null, 'Mlonggo', null, null, + 'Indonesia', 4.15, 'Check', '2016-08-03', 'Complete') + , (4103, 211, 65, '2017-01-17', '2016-11-09', 'Keith Lopez', '689 Anthes Pass', null, 'Cibanten', null, null, + 'Indonesia', 8.25, 'Check', '2016-10-15', 'Shipped') + , (4104, 218, 86, '2017-03-12', '2016-05-25', 'Chris Wright', '57974 Riverside Junction', null, 'Ban Mai', null, + '80000', 'Thailand', 4.85, 'Cash', '2016-05-08', 'New') + , (4105, 215, 57, '2016-07-03', '2016-05-03', 'Michael Snyder', '93 Ohio Hill', null, 'Bryan', 'Texas', '77806', + 'United States', 3.54, 'Card', '2016-08-10', 'Shipped') + , (4106, 210, 2, '2017-03-07', '2016-09-18', 'David Day', '5024 Summerview Circle', null, 'Itapira', null, + '13970-000', 'Brazil', 3.6, 'Cash', '2017-01-20', 'On Hold') + , (4107, 218, 4, '2016-10-10', '2016-09-02', 'Lisa Kim', '4892 Huxley Center', null, 'Tanjungagung', null, null, + 'Indonesia', 6.23, 'Cash', '2016-06-11', 'On Hold') + , (4108, 214, 26, '2016-06-02', '2016-10-05', 'Teresa Ellis', '1569 Mariners Cove Terrace', null, 'Maszkienice', + null, '32-854', 'Poland', 7.65, 'Check', '2016-04-14', 'On Hold') + , (4109, 201, 51, '2016-10-07', '2017-02-02', 'Jimmy Lawson', '2165 Bluestem Center', null, 'Kampungbaru', null, + null, 'Indonesia', 1.73, 'Check', '2016-09-30', 'Shipped') + , (4110, 215, 4, '2016-08-21', '2017-02-05', 'Jerry Murray', '40070 Anderson Court', null, 'Vicente Guerrero', + 'Veracruz Llave', '92440', 'Mexico', 1.57, 'Card', '2016-06-26', 'New') + , (4111, 210, 56, '2016-07-06', '2016-09-19', 'Joan Adams', '5322 Goodland Avenue', null, 'Paris 17', + 'Île-de-France', '75853 CEDEX 17', 'France', 7.52, 'Cash', '2016-05-07', 'New') + , (4112, 214, 77, '2016-09-04', '2016-10-19', 'Chris Young', '7 Clove Center', null, 'Gongjiahe', null, null, + 'China', 3.31, 'Card', '2016-11-06', 'New') + , (4113, 217, 62, '2016-07-18', '2016-09-30', 'Norma Oliver', '6002 Rieder Road', null, 'Lingbei', null, null, + 'China', 8.85, 'Check', '2016-09-25', 'Complete') + , (4114, 213, 72, '2016-08-01', '2016-09-12', 'Douglas Day', '88 Helena Drive', null, 'Alcoutim', 'Faro', + '8970-055', 'Portugal', 5.52, 'Card', '2016-12-19', 'New') + , (4115, 220, 6, '2016-11-13', '2017-02-22', 'Janet James', '820 Westend Place', null, 'Springfield', + 'Massachusetts', '01129', 'United States', 4.72, 'Cash', '2016-03-21', 'On Hold') + , (4116, 201, 72, '2016-09-01', '2016-09-07', 'Martha Lee', '2 Donald Hill', null, 'Majiang', null, null, 'China', + 4.39, 'Cash', '2016-12-10', 'Shipped') + , (4117, 202, 40, '2017-02-04', '2016-12-09', 'Benjamin Cruz', '02989 Morningstar Avenue', null, 'Gīvī', null, + null, 'Iran', 1.77, 'Check', '2017-01-29', 'Complete') + , (4118, 213, 48, '2016-12-24', '2017-01-06', 'Diane Porter', '7 Kensington Center', null, 'Pingyi', null, null, + 'China', 4.69, 'Check', '2016-05-31', 'On Hold') + , (4119, 205, 69, '2016-06-30', '2016-05-01', 'Brandon Myers', '80411 Victoria Center', null, 'Punsu', null, null, + 'Indonesia', 7.8, 'Cash', '2016-12-28', 'New') + , (4120, 220, 63, '2016-11-11', '2016-10-30', 'Beverly Garza', '2750 Sullivan Place', null, 'San Jose', null, + '8427', 'Philippines', 8.15, 'Check', '2016-09-23', 'Shipped') + , (4121, 220, 32, '2016-05-05', '2016-09-05', 'Cynthia Simpson', '0731 Clarendon Point', null, 'Pomichna', null, + null, 'Ukraine', 5.56, 'Card', '2017-02-23', 'On Hold') + , (4122, 201, 38, '2016-04-24', '2016-07-30', 'Janet West', '4800 Dottie Parkway', null, 'Tân Kỳ', null, null, + 'Vietnam', 2.63, 'Cash', '2016-06-17', 'On Hold') + , (4123, 214, 24, '2016-04-04', '2016-06-11', 'Kevin Stone', '85 Duke Avenue', null, 'Shemonaīkha', null, null, + 'Denmark', 9.99, 'Card', '2016-09-24', 'On Hold') + , (4124, 210, 9, '2016-09-01', '2016-06-18', 'Amy Austin', '80663 Almo Park', null, 'Zaječov', null, '267 63', + 'Czech Republic', 3.58, 'Card', '2016-08-29', 'Complete') + , (4125, 206, 78, '2017-02-09', '2016-07-07', 'Gregory Greene', '6 Commercial Junction', null, 'Hudong', null, + null, 'China', 7.34, 'Cash', '2016-12-26', 'New') + , (4126, 215, 48, '2016-07-30', '2016-12-25', 'Laura Woods', '115 Ramsey Plaza', null, 'Allentown', 'Pennsylvania', + '18105', 'United States', 4.92, 'Check', '2016-09-28', 'On Hold') + , (4127, 220, 19, '2016-03-29', '2016-05-27', 'Stephanie Reed', '452 Grayhawk Way', null, 'Sicheng', null, null, + 'China', 1.1, 'Card', '2017-03-14', 'Shipped') + , (4128, 208, 64, '2016-06-03', '2016-08-13', 'Craig Gonzalez', '6028 West Street', null, 'Kliteh', null, null, + 'Indonesia', 1.73, 'Cash', '2016-06-23', 'Complete') + , (4129, 201, 28, '2016-09-05', '2016-04-03', 'Raymond Gomez', '4 Stone Corner Place', null, 'Chechenglu', null, + null, 'China', 4.32, 'Card', '2016-06-29', 'Complete') + , (4130, 215, 83, '2016-11-14', '2016-09-13', 'Kenneth Taylor', '7 Nevada Way', null, 'Alīpur', null, '34451', + 'Iran', 5.07, 'Card', '2016-11-28', 'Complete') + , (4131, 203, 76, '2017-02-01', '2017-01-04', 'Jose Peters', '2493 Saint Paul Crossing', null, 'Bofuer', null, + null, 'Indonesia', 9.85, 'Card', '2016-11-18', 'New') + , (4132, 207, 67, '2016-09-02', '2017-03-10', 'Martin West', '7251 Prairieview Place', null, 'Espinillo', null, + '3460', 'Argentina', 7.9, 'Card', '2017-02-05', 'New') + , (4133, 208, 78, '2016-08-27', '2016-12-26', 'Louise Dunn', '4076 East Trail', null, 'Caramanta', null, '056047', + 'Argentina', 1.28, 'Cash', '2016-12-22', 'Shipped') + , (4134, 209, 93, '2016-06-27', '2016-04-10', 'Gregory Stanley', '67 Namekagon Crossing', null, 'Pasarkayu', null, + null, 'Indonesia', 2.83, 'Check', '2016-09-17', 'Complete') + , (4135, 206, 60, '2016-03-23', '2016-06-19', 'Ronald Palmer', '21 Old Shore Place', null, 'Tujing', null, null, + 'China', 9.01, 'Check', '2016-12-22', 'New') + , (4136, 209, 10, '2016-11-07', '2016-11-21', 'Harry Robinson', '740 Toban Court', null, 'Liujiage', null, null, + 'China', 7.13, 'Card', '2016-09-20', 'New') + , (4137, 214, 83, '2016-05-20', '2016-04-08', 'Joan Torres', '5167 Laurel Drive', null, 'Nirji', null, null, + 'China', 9.81, 'Card', '2016-09-13', 'Complete') + , (4138, 207, 47, '2016-07-17', '2016-10-03', 'Carlos Jones', '4 Fuller Lane', null, 'Detroit', 'Michigan', + '48258', 'United States', 8.02, 'Card', '2016-11-16', 'On Hold') + , (4139, 214, 92, '2016-07-17', '2017-01-23', 'Terry Freeman', '738 Vernon Road', null, 'Veverská Bítýška', null, + '664 71', 'Czech Republic', 1.93, 'Check', '2016-04-04', 'Complete') + , (4140, 204, 92, '2016-06-09', '2016-05-06', 'Rose Hunt', '3242 Bunting Trail', null, 'Schaumburg', 'Illinois', + '60193', 'United States', 7.65, 'Check', '2016-07-03', 'On Hold') + , (4141, 214, 12, '2016-11-19', '2017-03-16', 'Harry Reid', '395 Hauk Road', null, 'Rudky', null, null, 'Ukraine', + 5.23, 'Card', '2017-01-18', 'On Hold') + , (4142, 212, 88, '2016-12-25', '2016-12-14', 'Fred Olson', '9311 Old Gate Park', null, 'Hejiabao', null, null, + 'China', 4.02, 'Check', '2016-05-16', 'New') + , (4143, 217, 79, '2016-06-14', '2016-08-25', 'Paul Arnold', '08347 Comanche Pass', null, 'Bukovec', null, + '739 84', 'Czech Republic', 6.02, 'Card', '2016-05-08', 'New') + , (4144, 216, 56, '2016-06-03', '2016-07-22', 'Carolyn Woods', '55 Stoughton Pass', null, 'Shengmi', null, null, + 'China', 7.32, 'Card', '2016-07-27', 'New') + , (4145, 218, 84, '2016-07-02', '2016-11-05', 'Craig Schmidt', '2 Stephen Plaza', null, 'Arhust', null, null, + 'Japan', 3.31, 'Check', '2016-06-17', 'New') + , (4146, 219, 13, '2016-09-02', '2017-01-29', 'Antonio Jordan', '452 Clemons Court', null, 'København', + 'Region Hovedstaden', '1787', 'Denmark', 4.84, 'Card', '2016-11-10', 'Complete') + , (4147, 212, 51, '2016-10-19', '2017-01-20', 'Carol Evans', '1649 Crescent Oaks Road', null, 'Roubaix', + 'Nord-Pas-de-Calais', '59100', 'France', 7.71, 'Card', '2017-03-08', 'On Hold') + , (4148, 217, 26, '2016-04-16', '2016-11-28', 'Steven Torres', '73679 Morning Drive', null, 'Ayotupas', null, null, + 'Japan', 7.0, 'Card', '2016-06-12', 'On Hold') + , (4149, 215, 1, '2017-02-06', '2016-10-27', 'Louis Watson', '03 Golf View Way', null, 'Madaoua', null, null, + 'United Kingdom', 4.45, 'Check', '2016-07-22', 'Complete') + , (4150, 210, 100, '2017-01-14', '2016-11-12', 'Robin Reynolds', '5 Hagan Hill', null, 'Huacaschuque', null, null, + 'Peru', 7.37, 'Check', '2017-02-09', 'New') + , (4151, 217, 24, '2016-09-06', '2016-10-11', 'Julia Gilbert', '3 Manitowish Avenue', null, 'Passos', + 'Viana do Castelo', '4990-770', 'Portugal', 1.76, 'Card', '2016-07-16', 'New') + , (4152, 210, 90, '2016-05-26', '2016-07-14', 'Chris Chavez', '0 Birchwood Plaza', null, 'Odivelas', 'Lisboa', + '2675-080', 'Portugal', 8.35, 'Cash', '2017-02-05', 'On Hold') + , (4153, 220, 79, '2016-10-27', '2016-08-14', 'Adam Morrison', '04510 West Circle', null, 'Weda', null, null, + 'Japan', 8.84, 'Check', '2016-10-05', 'On Hold') + , (4154, 210, 57, '2017-02-21', '2016-09-28', 'Doris Snyder', '37027 Hintze Parkway', null, 'Vakhrushi', null, + '613110', 'Russia', 2.75, 'Cash', '2016-12-02', 'Complete') + , (4155, 202, 24, '2017-02-03', '2016-08-03', 'Lisa Fisher', '919 Warner Circle', null, 'Kanbe', null, null, + 'India', 2.48, 'Check', '2016-12-23', 'New') + , (4156, 213, 89, '2017-01-26', '2016-06-25', 'Gloria Murphy', '6750 Hansons Center', null, 'Saint Petersburg', + null, '190990', 'Russia', 2.88, 'Cash', '2017-01-31', 'On Hold') + , (4157, 219, 83, '2016-08-03', '2016-06-15', 'Sara Mcdonald', '88365 Namekagon Park', null, 'Maofan', null, null, + 'China', 4.69, 'Cash', '2016-09-22', 'New') + , (4158, 202, 79, '2016-08-13', '2016-10-08', 'John Barnes', '41 Springs Plaza', null, 'Carangola', null, + '36800-000', 'Brazil', 4.84, 'Check', '2016-11-25', 'New') + , (4159, 215, 84, '2016-11-30', '2017-02-27', 'Bobby Matthews', '39153 Kipling Trail', null, 'Now Zād', null, null, + 'Germany', 7.56, 'Cash', '2016-09-25', 'Shipped') + , (4160, 216, 40, '2016-07-27', '2016-12-05', 'Robin Greene', '899 Waubesa Alley', null, 'Vellinge', 'Skåne', + '235 93', 'Sweden', 4.17, 'Card', '2016-12-22', 'New') + , (4161, 211, 91, '2017-03-12', '2016-09-11', 'Joseph Long', '3 Nobel Terrace', null, 'Bukabu', null, null, + 'Japan', 2.26, 'Card', '2016-10-26', 'On Hold') + , (4162, 204, 94, '2016-10-08', '2016-09-26', 'Lisa Rodriguez', '880 Arizona Terrace', null, 'Elena', null, '5815', + 'Argentina', 3.13, 'Cash', '2016-06-15', 'Shipped') + , (4163, 208, 49, '2017-02-23', '2016-06-05', 'Douglas Parker', '79 Mariners Cove Plaza', null, 'Şafāshahr', null, + null, 'Iran', 1.83, 'Cash', '2016-10-26', 'On Hold') + , (4164, 201, 23, '2016-10-31', '2017-01-07', 'Laura Stewart', '97911 Meadow Ridge Road', null, 'Hexi', null, null, + 'China', 1.24, 'Check', '2017-03-08', 'Shipped') + , (4165, 202, 27, '2017-01-07', '2016-10-05', 'Matthew Jordan', '29 Lakewood Trail', null, 'Kalkal Barat', null, + null, 'Japan', 9.19, 'Card', '2016-09-03', 'Shipped') + , (4166, 218, 61, '2016-03-31', '2017-03-03', 'Denise Mason', '79 Carberry Alley', null, 'Vạn Giã', null, null, + 'Vietnam', 7.78, 'Card', '2016-03-23', 'New') + , (4167, 220, 56, '2016-11-12', '2016-06-18', 'Phillip Castillo', '9910 Reindahl Parkway', null, 'Shangyanzhuang', + null, null, 'China', 2.48, 'Card', '2016-07-14', 'Complete') + , (4168, 201, 41, '2016-07-10', '2016-07-29', 'Dorothy Nelson', '8 Hermina Terrace', null, 'Petrolina', null, + '56300-000', 'Brazil', 1.52, 'Check', '2016-11-11', 'Shipped') + , (4169, 218, 100, '2016-12-18', '2016-12-02', 'Lawrence Willis', '21 Northland Trail', null, 'Bukor', null, null, + 'India', 2.28, 'Card', '2017-01-06', 'New') + , (4170, 218, 6, '2016-10-31', '2016-10-20', 'Jonathan Banks', '5748 Kings Hill', null, 'Tianning', null, null, + 'China', 5.71, 'Check', '2016-06-02', 'Shipped') + , (4171, 211, 93, '2016-11-16', '2017-01-20', 'Gary Green', '001 Straubel Point', null, 'Huangshapu', null, null, + 'China', 3.6, 'Cash', '2016-12-12', 'Complete') + , (4172, 203, 46, '2016-10-16', '2016-09-08', 'Nancy Bryant', '367 Gateway Park', null, 'Zhutang', null, null, + 'China', 2.19, 'Cash', '2017-02-15', 'Shipped') + , (4173, 208, 72, '2016-08-27', '2016-04-09', 'Jeremy Rose', '8 Service Lane', null, 'Jinshandian', null, null, + 'China', 8.09, 'Check', '2017-01-18', 'On Hold') + , (4174, 212, 88, '2016-06-25', '2016-08-21', 'Rebecca Gibson', '74 American Crossing', null, 'Canmang', null, + null, 'China', 1.31, 'Card', '2017-02-08', 'New') + , (4175, 208, 75, '2017-02-28', '2017-01-03', 'Marilyn Hanson', '676 Service Crossing', null, 'Racławice', null, + '32-222', 'Poland', 2.88, 'Check', '2017-02-18', 'New') + , (4176, 204, 1, '2016-09-23', '2016-08-16', 'Denise Hanson', '8 Lakewood Crossing', null, 'Huaizhong', null, null, + 'China', 9.48, 'Card', '2016-12-30', 'On Hold') + , (4177, 204, 20, '2017-03-02', '2016-12-27', 'John Shaw', '4752 Meadow Ridge Lane', null, 'Sosnovo-Ozerskoye', + null, '612955', 'Russia', 7.17, 'Check', '2016-06-21', 'On Hold') + , (4178, 202, 30, '2016-03-20', '2016-10-17', 'Russell Fernandez', '5941 Esch Lane', null, 'Shuiyang', null, null, + 'China', 1.04, 'Check', '2017-01-05', 'On Hold') + , (4179, 202, 27, '2017-01-14', '2016-07-31', 'Annie Ruiz', '67778 Butterfield Trail', null, 'Qalyūb', null, null, + 'Germany', 5.51, 'Card', '2016-05-12', 'Shipped') + , (4180, 208, 1, '2017-03-16', '2016-04-04', 'Ashley Gonzales', '88504 Johnson Street', null, 'Salingogan', null, + '6417', 'Philippines', 7.56, 'Check', '2016-07-26', 'Shipped') + , (4181, 203, 70, '2016-03-25', '2016-11-06', 'Richard George', '54 3rd Circle', null, 'Haibeitou', null, null, + 'China', 1.99, 'Cash', '2016-09-05', 'New') + , (4182, 219, 69, '2016-04-11', '2017-02-03', 'David Harris', '2 Menomonie Pass', null, 'Oslo', 'Oslo', '0188', + 'Greece', 1.93, 'Check', '2016-11-30', 'Shipped') + , (4183, 211, 25, '2016-12-08', '2016-11-16', 'Catherine Reynolds', '302 Autumn Leaf Parkway', null, 'Lameiras', + 'Lisboa', '2715-145', 'Portugal', 6.68, 'Cash', '2016-04-02', 'Shipped') + , (4184, 217, 73, '2016-06-19', '2016-11-29', 'Donald Moreno', '690 Laurel Park', null, 'Sinisian', null, '4212', + 'Philippines', 3.1, 'Check', '2017-01-06', 'New') + , (4185, 210, 34, '2016-07-03', '2016-05-23', 'Ryan Thomas', '45044 Harper Place', null, 'Madīnat Lab‘ūs', null, + null, 'South Africa', 6.31, 'Cash', '2016-06-27', 'Complete') + , (4186, 206, 91, '2016-05-26', '2016-09-09', 'Ruby Lynch', '8350 Karstens Parkway', null, 'Puyo', null, null, + 'Argentina', 6.07, 'Check', '2016-05-10', 'Shipped') + , (4187, 208, 64, '2016-05-31', '2016-10-16', 'Linda Robinson', '6069 Chive Plaza', null, 'Joutseno', null, + '54101', 'Finland', 3.11, 'Card', '2016-05-15', 'Shipped') + , (4188, 216, 41, '2017-02-07', '2016-03-28', 'Bonnie Morris', '2611 Comanche Junction', null, 'Lacombe', + 'Alberta', 'T4L', 'Canada', 2.53, 'Check', '2016-08-31', 'New') + , (4189, 206, 51, '2016-12-20', '2016-12-08', 'Dennis Gardner', '2348 Blue Bill Park Crossing', null, 'Ngkiong', + null, null, 'Japan', 5.1, 'Check', '2016-11-28', 'New') + , (4190, 220, 54, '2016-08-06', '2016-08-27', 'Carolyn Matthews', '817 Ohio Point', null, 'Orekhovo-Zuyevo', null, + '142609', 'Russia', 7.52, 'Card', '2016-03-22', 'On Hold') + , (4191, 207, 96, '2016-07-03', '2016-06-18', 'Jesse Parker', '3 Eastwood Terrace', null, 'Berezovo', null, null, + 'Ukraine', 6.64, 'Check', '2016-05-07', 'New') + , (4192, 216, 18, '2016-06-05', '2017-01-11', 'Ann Gilbert', '6 Oak Valley Lane', null, 'Caijiang', null, null, + 'China', 3.72, 'Cash', '2016-11-17', 'On Hold') + , (4193, 208, 22, '2016-06-26', '2017-02-22', 'Martha Hawkins', '57581 Union Road', null, 'Ilinden', null, '1041', + 'Denmark', 5.64, 'Cash', '2016-05-23', 'On Hold') + , (4194, 207, 42, '2017-02-03', '2017-01-08', 'Jeffrey Hart', '83 Green Ridge Point', null, 'Wangcheng', null, + null, 'China', 1.15, 'Check', '2016-12-07', 'Shipped') + , (4195, 217, 28, '2016-10-18', '2016-05-01', 'Joseph Riley', '54373 Coleman Street', null, 'Karangbungur', null, + null, 'Japan', 5.9, 'Cash', '2016-04-23', 'Complete') + , (4196, 207, 78, '2016-07-09', '2016-07-15', 'Brian Dean', '9 Stone Corner Hill', null, 'Dambulla', null, '21100', + 'United Kingdom', 5.15, 'Check', '2016-07-09', 'On Hold') + , (4197, 204, 38, '2016-07-19', '2016-04-13', 'Christine Campbell', '47302 Porter Junction', null, 'Dananshan', + null, null, 'China', 6.74, 'Card', '2016-11-07', 'Complete') + , (4198, 201, 7, '2017-03-02', '2016-08-16', 'Ruth Mcdonald', '401 Erie Avenue', null, 'Borkowice', null, '26-422', + 'Poland', 3.24, 'Cash', '2016-04-17', 'New') + , (4199, 216, 87, '2016-12-14', '2017-03-05', 'Jean Armstrong', '450 Sullivan Avenue', null, 'Carpenter', null, + '2009', 'Philippines', 4.25, 'Cash', '2016-07-11', 'Complete') + , (4200, 218, 8, '2017-02-01', '2016-04-17', 'Gary Price', '775 Butterfield Lane', null, 'Vaasa', null, '66999', + 'Finland', 5.36, 'Card', '2016-07-09', 'Shipped') + , (4201, 217, 77, '2016-11-10', '2016-11-13', 'Carolyn Scott', '5878 Badeau Lane', null, 'Kazanskaya', null, + '396614', 'Russia', 7.94, 'Card', '2016-12-09', 'New') + , (4202, 204, 10, '2016-08-12', '2016-03-21', 'Earl Anderson', '9 Roth Court', null, 'Governor’s Harbour', null, + null, 'Canada', 2.47, 'Card', '2016-08-06', 'Complete') + , (4203, 204, 54, '2016-05-26', '2016-04-18', 'Elizabeth Kelley', '70 Burrows Street', null, 'Fucheng', null, null, + 'China', 9.94, 'Cash', '2016-08-24', 'Shipped') + , (4204, 208, 58, '2017-03-09', '2016-04-17', 'Julia Wilson', '46476 Burning Wood Crossing', null, 'Koper', null, + '6600', 'India', 3.82, 'Card', '2016-08-26', 'New') + , (4205, 208, 85, '2016-05-04', '2016-03-18', 'Jeffrey Oliver', '39 Tennessee Avenue', null, 'Jejkowice', null, + '44-290', 'Poland', 7.22, 'Card', '2016-09-23', 'Shipped') + , (4206, 220, 8, '2016-06-16', '2017-01-03', 'Angela Walker', '579 Miller Street', null, 'Hà Tĩnh', null, null, + 'Vietnam', 1.04, 'Check', '2016-05-18', 'Complete') + , (4207, 212, 55, '2016-07-04', '2016-11-09', 'Karen Hansen', '953 Manufacturers Pass', null, 'Lysekil', + 'Västra Götaland', '453 35', 'Sweden', 8.81, 'Check', '2016-03-18', 'New') + , (4208, 217, 96, '2016-10-26', '2016-07-11', 'Patricia West', '1 Browning Alley', null, 'Huayang', null, null, + 'China', 7.54, 'Card', '2016-09-15', 'New') + , (4209, 203, 71, '2016-08-04', '2017-01-01', 'Phillip Gardner', '30438 Mariners Cove Way', null, 'Phu Khiao', + null, '36110', 'Thailand', 3.03, 'Check', '2016-03-31', 'Shipped') + , (4210, 207, 30, '2017-03-08', '2016-07-21', 'Fred Howard', '45981 Hovde Trail', null, 'Suncheon', null, null, + 'Finland', 1.13, 'Check', '2016-07-14', 'On Hold') + , (4211, 217, 57, '2016-05-28', '2017-03-11', 'George Wagner', '24863 Messerschmidt Road', null, 'Ningzhong', null, + null, 'China', 6.5, 'Check', '2016-07-26', 'New') + , (4212, 213, 19, '2016-11-28', '2016-06-09', 'Clarence Russell', '85 Kropf Circle', null, 'Ouro Branco', null, + '59347-000', 'Brazil', 6.88, 'Check', '2016-04-02', 'On Hold') + , (4213, 217, 51, '2016-06-25', '2016-05-25', 'Jane Johnston', '1708 Corscot Pass', null, 'Şafāshahr', null, null, + 'Iran', 9.16, 'Cash', '2016-10-12', 'Complete') + , (4214, 203, 88, '2017-02-19', '2016-03-25', 'John Adams', '100 Hollow Ridge Way', null, 'Satita', null, null, + 'India', 3.01, 'Cash', '2016-11-19', 'Shipped') + , (4215, 202, 12, '2017-01-26', '2016-10-07', 'Diana Graham', '12 Esch Park', null, 'Krasnokamensk', null, + '662955', 'Russia', 9.29, 'Check', '2016-06-10', 'Shipped') + , (4216, 211, 66, '2016-07-19', '2016-11-30', 'John Henry', '448 Hanover Trail', null, 'Phitsanulok', null, + '65000', 'Thailand', 7.23, 'Card', '2016-09-22', 'Shipped') + , (4217, 218, 98, '2016-11-20', '2016-11-12', 'Donna Bradley', '92136 Arkansas Avenue', null, 'Balong Wetan', null, + null, 'Japan', 7.79, 'Card', '2016-12-18', 'New') + , (4218, 206, 5, '2016-05-04', '2016-08-19', 'Kevin Harper', '2911 Laurel Point', null, 'Patapan', null, null, + 'Japan', 1.52, 'Card', '2016-03-20', 'On Hold') + , (4219, 205, 76, '2016-11-15', '2016-12-12', 'Margaret Hanson', '9603 Northridge Junction', null, 'Mwembe', null, + null, 'India', 4.76, 'Cash', '2017-03-14', 'Shipped') + , (4220, 206, 62, '2016-12-30', '2016-10-23', 'Henry Bradley', '84 Lake View Plaza', null, 'Zheleznovodsk', null, + '357408', 'Russia', 8.08, 'Cash', '2017-02-23', 'Complete') + , (4221, 218, 91, '2016-08-07', '2016-08-31', 'Jane Fowler', '2484 Hoepker Hill', null, 'Huangcun', null, null, + 'China', 9.34, 'Card', '2017-01-10', 'Complete') + , (4222, 207, 19, '2016-05-22', '2016-06-25', 'Kimberly Peterson', '5851 Carey Crossing', null, 'Pochuta', null, + '04008', 'Japan', 9.16, 'Card', '2016-04-25', 'Shipped') + , (4223, 203, 69, '2017-02-13', '2016-09-18', 'Nicholas Simpson', '9 Hudson Way', null, 'Chashan', null, null, + 'China', 5.37, 'Check', '2017-01-01', 'On Hold') + , (4224, 214, 71, '2017-02-28', '2016-06-18', 'Carol Rodriguez', '78 Grayhawk Place', null, 'Luntas', null, null, + 'Indonesia', 1.76, 'Card', '2016-10-06', 'Shipped') + , (4225, 207, 34, '2017-03-06', '2016-07-20', 'Jessica Mason', '65 Merrick Lane', null, 'Křižanov', null, '789 01', + 'Czech Republic', 9.75, 'Card', '2016-12-28', 'New') + , (4226, 209, 74, '2016-06-04', '2017-01-15', 'Jeffrey Sims', '05441 Wayridge Pass', null, 'Rennes', 'Bretagne', + '35047 CEDEX 9', 'France', 9.09, 'Check', '2016-05-19', 'Shipped') + , (4227, 205, 74, '2016-09-09', '2017-01-06', 'Arthur Simmons', '733 Logan Circle', null, 'Dzhankoy', null, null, + 'Ukraine', 2.51, 'Check', '2017-01-25', 'New') + , (4228, 207, 52, '2017-01-30', '2017-01-08', 'Kevin Williams', '3561 6th Trail', null, 'Narganá', null, null, + 'Denmark', 7.32, 'Cash', '2016-06-24', 'On Hold') + , (4229, 209, 76, '2016-05-05', '2016-07-11', 'Joe Stewart', '0314 Ryan Parkway', null, 'San Jose', 'Oaxaca', + '69570', 'Mexico', 9.28, 'Check', '2016-05-06', 'Shipped') + , (4230, 214, 2, '2016-09-19', '2016-09-08', 'Walter Barnes', '80695 Stone Corner Road', null, 'Busdi', null, + '6210', 'Philippines', 5.97, 'Check', '2016-07-19', 'Shipped') + , (4231, 211, 55, '2016-08-27', '2016-10-04', 'Sean Holmes', '91 Becker Drive', null, 'Gezan', null, null, 'China', + 3.81, 'Check', '2016-06-14', 'Shipped') + , (4232, 209, 14, '2016-04-01', '2017-03-06', 'Sandra Perez', '45373 Buhler Park', null, 'Ust’-Kut', null, + '162176', 'Russia', 4.25, 'Cash', '2017-01-22', 'Shipped') + , (4233, 205, 96, '2016-09-27', '2016-07-03', 'Sara Kelly', '73457 Buhler Court', null, 'Sima', null, null, + 'Canada', 7.2, 'Card', '2016-12-14', 'Complete') + , (4234, 217, 74, '2016-11-22', '2017-01-18', 'Edward Reid', '02 Westport Trail', null, 'Tchaourou', null, null, + 'India', 3.5, 'Cash', '2016-12-25', 'New') + , (4235, 206, 69, '2016-03-17', '2016-10-29', 'Betty Cook', '83578 Ohio Avenue', null, 'Stockholm', 'Stockholm', + '101 22', 'Sweden', 6.17, 'Check', '2016-09-02', 'On Hold') + , (4236, 217, 97, '2017-02-06', '2016-07-01', 'Diana Ellis', '49 Jenna Circle', null, 'Yanshan', null, null, + 'China', 6.06, 'Check', '2016-07-16', 'Complete') + , (4237, 216, 17, '2016-11-30', '2016-10-02', 'Donald Miller', '8581 Farragut Junction', null, 'Yosowilangun', + null, null, 'Indonesia', 8.9, 'Check', '2016-11-01', 'Complete') + , (4238, 203, 21, '2017-02-09', '2016-12-14', 'Eric Coleman', '9242 Badeau Street', null, 'Caiyuan', null, null, + 'China', 4.1, 'Check', '2016-06-07', 'Shipped') + , (4239, 213, 23, '2016-09-15', '2016-11-04', 'Heather Vasquez', '454 Gale Hill', null, 'Susoh', null, null, + 'Indonesia', 1.59, 'Check', '2016-10-25', 'New') + , (4240, 208, 2, '2016-05-28', '2016-05-21', 'Martin Sims', '30 Bunting Center', null, 'Efeng', null, null, + 'China', 1.92, 'Cash', '2016-12-15', 'Complete') + , (4241, 202, 85, '2017-02-05', '2016-08-13', 'Catherine Washington', '637 Hermina Court', null, 'San Francisco', + 'Jalisco', '46175', 'Mexico', 6.49, 'Card', '2016-12-20', 'On Hold') + , (4242, 204, 17, '2016-10-04', '2016-05-13', 'Gary Kennedy', '2 Grasskamp Point', null, 'Famaillá', null, '4132', + 'Argentina', 9.78, 'Card', '2016-12-03', 'Complete') + , (4243, 205, 86, '2016-04-15', '2016-05-25', 'Pamela Parker', '43642 Utah Point', null, 'Santa Rosa', + 'Nuevo Leon', '67803', 'Mexico', 1.78, 'Card', '2017-02-16', 'Shipped') + , (4244, 208, 3, '2016-08-02', '2017-03-13', 'Michelle Russell', '947 Jenna Place', null, 'Kinshasa', null, null, + 'Canada', 8.43, 'Cash', '2016-04-13', 'New') + , (4245, 210, 32, '2016-06-16', '2016-07-14', 'Lois Jenkins', '1 Pepper Wood Road', null, 'Kallinge', 'Blekinge', + '372 53', 'Sweden', 4.77, 'Cash', '2016-03-17', 'On Hold') + , (4246, 203, 39, '2017-02-04', '2016-08-08', 'Kelly Ramirez', '20490 Eagle Crest Circle', null, 'Baraba', null, + '623509', 'Russia', 8.65, 'Cash', '2016-10-04', 'Complete') + , (4247, 202, 24, '2016-05-05', '2016-11-26', 'Harold Gray', '9033 Elmside Plaza', null, 'N’dalatando', null, null, + 'Netherlands', 2.78, 'Cash', '2016-07-24', 'New') + , (4248, 210, 16, '2017-01-27', '2017-03-14', 'Dennis Fisher', '4 Sage Road', null, 'Niederanven', null, 'L-6948', + 'United Kingdom', 1.26, 'Check', '2016-05-12', 'On Hold') + , (4249, 203, 20, '2016-07-21', '2016-12-08', 'Antonio Wells', '99743 Algoma Hill', null, 'Mūdīyah', null, null, + 'South Africa', 4.36, 'Card', '2016-05-28', 'Complete') + , (4250, 217, 88, '2016-05-31', '2016-10-17', 'William Gonzales', '3258 Holy Cross Way', null, 'Yangdun', null, + null, 'China', 7.06, 'Check', '2016-04-13', 'New') + , (4251, 211, 1, '2017-03-04', '2016-10-27', 'Ronald Ward', '5 Logan Terrace', null, 'Tanahmerah', null, null, + 'Indonesia', 4.38, 'Card', '2016-09-22', 'On Hold') + , (4252, 217, 87, '2016-12-29', '2016-09-18', 'Gloria Boyd', '10 Grayhawk Hill', null, 'Boromlya', null, null, + 'Ukraine', 4.84, 'Cash', '2016-08-01', 'On Hold') + , (4253, 212, 99, '2017-02-02', '2016-04-28', 'Raymond Scott', '3 Donald Trail', null, 'Lakshmīpur', null, '1553', + 'Canada', 8.37, 'Cash', '2016-12-06', 'On Hold') + , (4254, 201, 7, '2016-11-28', '2016-04-11', 'Arthur Hamilton', '95 Doe Crossing Avenue', null, 'Purwosari', null, + null, 'Indonesia', 6.84, 'Card', '2016-06-14', 'Shipped') + , (4255, 220, 100, '2016-09-30', '2016-10-08', 'Jean Wagner', '5690 Meadow Valley Alley', null, 'Svedala', 'Skåne', + '233 94', 'Sweden', 8.57, 'Check', '2017-01-06', 'Shipped') + , (4256, 218, 78, '2016-04-28', '2016-04-03', 'Kimberly Rose', '6067 Twin Pines Hill', null, 'Capinzal', null, + '89665-000', 'Brazil', 6.07, 'Check', '2016-05-18', 'New') + , (4257, 213, 44, '2016-11-04', '2016-03-28', 'Doris Foster', '170 Chive Court', null, 'Lang', null, null, 'China', + 1.72, 'Card', '2016-10-20', 'Shipped') + , (4258, 208, 46, '2017-01-11', '2016-09-25', 'Teresa Reynolds', '3 Prairie Rose Alley', null, 'Tashang', null, + null, 'China', 4.84, 'Card', '2016-10-16', 'On Hold') + , (4259, 215, 89, '2016-07-07', '2016-12-29', 'Christine Turner', '0746 Heffernan Center', null, 'Henggang', null, + null, 'China', 6.81, 'Cash', '2016-08-21', 'New') + , (4260, 210, 23, '2016-10-26', '2017-02-10', 'Jimmy Jordan', '903 Anniversary Trail', null, 'Elaiochóri', null, + null, 'Greece', 9.66, 'Cash', '2017-01-10', 'Complete') + , (4261, 207, 20, '2016-11-07', '2017-02-17', 'Andrew Baker', '3 Pennsylvania Park', null, 'Kansas City', + 'Missouri', '64130', 'United States', 5.46, 'Cash', '2016-11-20', 'Complete') + , (4262, 203, 32, '2017-02-21', '2016-11-17', 'Diana Dixon', '18520 Maryland Drive', null, 'Santa Catalina', null, + '2701', 'Philippines', 4.66, 'Card', '2017-01-09', 'On Hold') + , (4263, 210, 10, '2017-02-28', '2017-02-26', 'Karen Miller', '5608 Moose Court', null, 'Torres Vedras', 'Lisboa', + '2560-234', 'Portugal', 5.71, 'Card', '2016-11-30', 'New') + , (4264, 214, 39, '2017-01-09', '2016-10-24', 'Angela Austin', '9659 Vera Point', null, 'Santiaoshi', null, null, + 'China', 6.59, 'Check', '2016-05-07', 'Shipped') + , (4265, 203, 3, '2016-11-11', '2016-11-22', 'Steve Snyder', '7626 Hoepker Junction', null, 'Wulan Hada', null, + null, 'China', 5.67, 'Cash', '2017-01-01', 'New') + , (4266, 218, 94, '2016-04-06', '2016-10-02', 'Kevin Daniels', '24 Chinook Point', null, 'Bhairāhawā', null, null, + 'United Kingdom', 8.21, 'Card', '2016-05-12', 'Shipped') + , (4267, 203, 58, '2016-11-14', '2016-03-28', 'Patricia Welch', '60375 Corry Street', null, 'Solidaridad', + 'Veracruz Llave', '94330', 'Mexico', 2.77, 'Card', '2017-02-02', 'On Hold') + , (4268, 218, 2, '2016-07-02', '2016-08-14', 'Wanda Reynolds', '965 Calypso Circle', null, 'Dera Bugti', null, + '80100', 'Iran', 8.86, 'Check', '2017-01-30', 'On Hold') + , (4269, 216, 47, '2017-03-11', '2016-07-16', 'Harold Williamson', '14332 Texas Junction', null, 'Mzimba', null, + null, 'India', 2.47, 'Cash', '2016-06-01', 'Shipped') + , (4270, 213, 62, '2016-11-09', '2017-02-07', 'Juan Fox', '17 Eagan Crossing', null, 'Xiayang', null, null, + 'China', 7.63, 'Card', '2017-02-17', 'Shipped') + , (4271, 211, 70, '2016-04-16', '2016-04-26', 'Ryan Long', '0 Harper Circle', null, 'Blagoveshchenka', null, + '658670', 'Russia', 3.2, 'Card', '2016-09-10', 'Complete') + , (4272, 206, 29, '2016-03-25', '2016-10-07', 'Frank Cole', '07 Westend Place', null, 'Laixi', null, null, 'China', + 1.93, 'Cash', '2016-05-01', 'New') + , (4273, 209, 25, '2016-05-06', '2016-04-13', 'Tammy Wilson', '74278 Grim Pass', null, 'Åkersberga', 'Stockholm', + '184 70', 'Sweden', 2.83, 'Card', '2016-10-29', 'Complete') + , (4274, 206, 82, '2017-02-07', '2017-03-06', 'Joan Gonzales', '40 Stephen Street', null, 'Tlogoagung', null, null, + 'Indonesia', 3.44, 'Check', '2016-10-14', 'Complete') + , (4275, 203, 91, '2016-10-10', '2016-11-04', 'Jeffrey Hughes', '38 Toban Plaza', null, 'Privas', 'Rhône-Alpes', + '07004 CEDEX', 'France', 8.33, 'Card', '2016-04-23', 'On Hold') + , (4276, 210, 89, '2016-05-14', '2016-09-03', 'Rachel Martin', '08 Lake View Hill', null, 'Sandgerði', null, '245', + 'India', 2.07, 'Cash', '2016-06-07', 'Complete') + , (4277, 208, 97, '2016-04-06', '2016-07-02', 'Laura Harper', '1 Dexter Street', null, 'Xintaimen', null, null, + 'China', 8.08, 'Check', '2016-05-11', 'Shipped') + , (4278, 215, 3, '2017-03-04', '2017-03-08', 'Annie Rivera', '5975 Debra Park', null, 'Canchaque', null, null, + 'Peru', 5.65, 'Check', '2016-04-09', 'Complete') + , (4279, 201, 6, '2017-03-01', '2016-08-06', 'Pamela Graham', '2 Monument Avenue', null, 'Danxi', null, null, + 'China', 2.05, 'Check', '2016-05-23', 'New') + , (4280, 202, 35, '2017-02-04', '2016-06-09', 'Joseph Jenkins', '00001 Fairfield Center', null, 'Mashtūl as Sūq', + null, null, 'Germany', 5.32, 'Card', '2016-12-28', 'New') + , (4281, 203, 76, '2016-05-19', '2016-07-29', 'Eugene Garcia', '8308 Onsgard Lane', null, 'Limoncito', null, null, + 'India', 4.07, 'Card', '2016-10-20', 'Shipped') + , (4282, 204, 27, '2016-07-20', '2016-09-26', 'Kevin Anderson', '8 Thierer Center', null, 'Saint-Étienne', + 'Rhône-Alpes', '42963 CEDEX 9', 'France', 4.88, 'Card', '2016-07-21', 'Complete') + , (4283, 214, 50, '2016-11-27', '2016-06-14', 'Robin Parker', '51949 Forster Parkway', null, 'Laval', + 'Pays de la Loire', '53009 CEDEX', 'France', 1.04, 'Check', '2016-04-20', 'Complete') + , (4284, 214, 74, '2016-11-29', '2016-12-08', 'Kelly Palmer', '2 Hauk Hill', null, 'Östersund', 'Jämtland', + '831 17', 'Sweden', 4.26, 'Card', '2016-10-08', 'Complete') + , (4285, 214, 76, '2016-10-22', '2016-05-05', 'Diane Freeman', '5441 Petterle Way', null, 'El Tambo', null, null, + 'Peru', 7.17, 'Check', '2016-09-27', 'New') + , (4286, 209, 96, '2016-11-08', '2016-08-26', 'Kathleen Adams', '423 Talisman Point', null, 'Kurume', null, + '963-8846', 'Japan', 1.99, 'Cash', '2016-05-19', 'On Hold') + , (4287, 204, 76, '2016-10-18', '2017-01-15', 'Teresa Mendoza', '818 Atwood Lane', null, 'Mosteiro', + 'Viana do Castelo', '4980-125', 'Portugal', 3.29, 'Cash', '2016-10-03', 'On Hold') + , (4288, 210, 45, '2016-10-15', '2016-12-14', 'Irene Anderson', '4 Rutledge Alley', null, 'Saparua', null, null, + 'Indonesia', 4.35, 'Card', '2016-10-13', 'On Hold') + , (4289, 209, 61, '2017-02-12', '2016-07-15', 'Terry Bennett', '351 Johnson Circle', null, 'Quiling', null, '2902', + 'Philippines', 6.77, 'Card', '2016-07-20', 'New') + , (4290, 203, 1, '2017-03-02', '2016-08-25', 'Ronald Mccoy', '73609 Waywood Center', null, 'Zheleznodorozhnyy', + null, '238411', 'Russia', 1.05, 'Cash', '2016-06-10', 'New') + , (4291, 211, 73, '2016-09-13', '2016-04-17', 'Andrew Matthews', '820 Lawn Crossing', null, 'Japeri', null, + '26400-000', 'Brazil', 1.22, 'Cash', '2016-09-08', 'New') + , (4292, 215, 15, '2016-12-26', '2016-10-04', 'Melissa Chapman', '88384 Ohio Park', null, 'Dayr al Ghuşūn', null, + null, 'India', 9.89, 'Check', '2016-08-14', 'Shipped') + , (4293, 210, 18, '2016-11-23', '2016-12-12', 'Russell Griffin', '6 Eliot Lane', null, 'Changshu City', null, null, + 'China', 9.37, 'Check', '2016-05-10', 'On Hold') + , (4294, 206, 95, '2016-06-24', '2017-01-21', 'Jeffrey Gray', '04078 Hudson Drive', null, 'Luangwa', null, null, + 'India', 2.58, 'Cash', '2016-06-15', 'Shipped') + , (4295, 215, 85, '2016-10-23', '2017-01-29', 'Lori Frazier', '724 Logan Drive', null, 'Gent', 'Vlaanderen', + '9052', 'Denmark', 8.59, 'Cash', '2017-01-01', 'New') + , (4296, 217, 83, '2016-04-08', '2017-02-07', 'Joan Ortiz', '90 Merchant Avenue', null, 'Irasan', null, '3120', + 'Philippines', 4.64, 'Card', '2016-09-01', 'Complete') + , (4297, 211, 29, '2016-07-13', '2017-02-06', 'John Stanley', '680 Artisan Pass', null, 'Borås', 'Västra Götaland', + '504 75', 'Sweden', 1.77, 'Cash', '2016-07-12', 'On Hold') + , (4298, 208, 65, '2016-12-28', '2016-04-19', 'Dorothy Bell', '397 Kim Place', null, 'Zhongxin', null, null, + 'China', 1.2, 'Check', '2017-01-28', 'On Hold') + , (4299, 201, 43, '2017-01-12', '2016-08-07', 'Doris Ramirez', '181 Prentice Terrace', null, 'Severnyy', null, + '141707', 'Russia', 2.65, 'Card', '2016-08-13', 'Shipped') + , (4300, 207, 27, '2016-11-10', '2016-11-01', 'Elizabeth Harrison', '067 Talisman Trail', null, 'Guangang', null, + null, 'China', 4.78, 'Check', '2016-04-30', 'On Hold') + , (4301, 206, 64, '2016-08-14', '2017-01-13', 'Judith Howard', '55095 Sloan Alley', null, 'Longhua', null, null, + 'China', 1.93, 'Card', '2016-10-29', 'New') + , (4302, 213, 33, '2017-01-19', '2016-05-23', 'Julia Simpson', '87375 Londonderry Parkway', null, 'Fufang', null, + null, 'China', 9.23, 'Card', '2016-11-15', 'Shipped') + , (4303, 220, 49, '2016-08-01', '2016-04-23', 'Elizabeth Bell', '60 Ridgeview Trail', null, 'Infantas', 'Braga', + '4810-578', 'Portugal', 3.22, 'Check', '2017-02-01', 'Complete') + , (4304, 217, 56, '2016-09-07', '2016-08-13', 'Ernest Andrews', '231 Graceland Terrace', null, 'Pindamonhangaba', + null, '12400-000', 'Brazil', 2.77, 'Card', '2016-04-04', 'On Hold') + , (4305, 219, 44, '2016-06-11', '2016-03-27', 'Jeffrey Lopez', '76434 Havey Court', null, 'Khvalovo', null, + '187435', 'Russia', 8.84, 'Cash', '2016-04-14', 'Shipped') + , (4306, 212, 16, '2016-05-29', '2016-12-31', 'Ralph Weaver', '15 Armistice Alley', null, 'Odienné', null, null, + 'Canada', 7.1, 'Card', '2017-01-09', 'Shipped') + , (4307, 210, 16, '2016-10-19', '2017-01-10', 'Mary Stevens', '1928 Aberg Park', null, 'Dzwola', null, '23-304', + 'Poland', 4.04, 'Card', '2016-08-24', 'Complete') + , (4308, 220, 50, '2016-09-23', '2016-09-16', 'Douglas Welch', '9 Ryan Circle', null, 'Babakanloa', null, null, + 'Indonesia', 1.11, 'Card', '2016-10-13', 'Shipped') + , (4309, 217, 99, '2016-10-17', '2017-01-01', 'Raymond Cruz', '0402 Burning Wood Alley', null, 'Bucay', null, + '2805', 'Philippines', 9.27, 'Cash', '2016-06-02', 'Complete') + , (4310, 219, 65, '2016-04-14', '2016-05-14', 'Sara Frazier', '43 Truax Terrace', null, 'Halton', 'England', 'LS9', + 'United Kingdom', 5.56, 'Check', '2016-12-04', 'New') + , (4311, 220, 17, '2017-02-03', '2016-07-09', 'Sarah Lane', '414 Gina Point', null, 'Fulong', null, null, 'China', + 3.35, 'Cash', '2016-12-27', 'New') + , (4312, 205, 77, '2017-02-27', '2016-04-10', 'Michelle Bradley', '16664 Towne Point', null, 'Yangchun', null, + null, 'China', 8.64, 'Cash', '2017-01-28', 'Complete') + , (4313, 210, 68, '2016-08-29', '2016-10-27', 'Marie Porter', '7802 Hovde Plaza', null, 'Redakodi', null, null, + 'Indonesia', 1.97, 'Cash', '2016-11-08', 'Complete') + , (4314, 207, 41, '2016-08-08', '2016-08-31', 'Melissa Moore', '438 Mendota Way', null, 'Bensonville', null, null, + 'United Kingdom', 7.97, 'Cash', '2017-01-17', 'New') + , (4315, 212, 96, '2016-08-08', '2016-07-27', 'Katherine Bell', '76 Manley Park', null, 'Xagmakajor', null, null, + 'China', 7.49, 'Cash', '2016-03-29', 'New') + , (4316, 209, 67, '2016-09-26', '2017-02-03', 'Katherine Elliott', '86 Nelson Point', null, 'Boavista', 'Aveiro', + '4520-104', 'Portugal', 1.92, 'Card', '2016-04-28', 'Complete') + , (4317, 219, 40, '2016-10-09', '2016-12-21', 'Dorothy Rose', '75962 Basil Drive', null, 'Pécs', 'Baranya', '7610', + 'Denmark', 3.23, 'Card', '2017-02-21', 'Shipped') + , (4318, 209, 68, '2017-01-15', '2017-01-03', 'Larry Hicks', '5985 Crest Line Road', null, 'Lingqiao', null, null, + 'China', 2.77, 'Check', '2017-01-20', 'Complete') + , (4319, 214, 55, '2016-07-14', '2017-03-05', 'Paula Rodriguez', '6 Lawn Court', null, 'Simajia', null, null, + 'China', 6.33, 'Check', '2016-04-08', 'Shipped') + , (4320, 203, 83, '2016-12-26', '2016-10-07', 'Sharon Richards', '43297 Rigney Avenue', null, 'Salto', null, null, + 'India', 7.32, 'Check', '2016-09-14', 'Complete') + , (4321, 215, 29, '2016-12-27', '2016-07-21', 'Craig Day', '22 Thierer Center', null, 'Alberton', + 'Prince Edward Island', 'P7K', 'Canada', 5.32, 'Check', '2016-04-02', 'On Hold') + , (4322, 207, 80, '2016-12-06', '2016-05-21', 'Donna Butler', '4149 Bartelt Point', null, 'Carbonear', + 'Newfoundland and Labrador', 'A1Y', 'Canada', 3.1, 'Check', '2016-10-03', 'New') + , (4323, 216, 31, '2016-06-27', '2017-03-13', 'Carolyn Ferguson', '97225 Bartelt Avenue', null, 'Tinalmud', null, + '1531', 'Philippines', 7.11, 'Cash', '2016-05-22', 'Complete') + , (4324, 212, 78, '2016-05-19', '2016-11-14', 'Peter Romero', '22977 Westridge Terrace', null, 'Toulouse', + 'Midi-Pyrénées', '31029 CEDEX 4', 'France', 2.97, 'Check', '2016-09-09', 'Shipped') + , (4325, 213, 73, '2017-02-18', '2016-09-22', 'Jose Greene', '40351 Rusk Place', null, 'Vila Nova de Gaia', + 'Porto', '4400-005', 'Portugal', 5.76, 'Cash', '2016-12-12', 'Shipped') + , (4326, 208, 62, '2017-02-14', '2016-11-13', 'Betty Anderson', '8403 Melody Center', null, 'Būsh', null, null, + 'Germany', 9.56, 'Check', '2016-10-08', 'Shipped') + , (4327, 220, 56, '2016-09-06', '2016-08-17', 'Amanda Frazier', '47 Dapin Center', null, 'Pasirmanggu', null, null, + 'Indonesia', 2.25, 'Card', '2016-07-11', 'On Hold') + , (4328, 201, 24, '2016-10-29', '2017-01-25', 'Douglas Foster', '6953 Stoughton Avenue', null, 'Bokhan', null, + '669310', 'Russia', 1.26, 'Card', '2016-07-06', 'Complete') + , (4329, 206, 33, '2017-03-09', '2017-03-12', 'Louis Brown', '76 Little Fleur Park', null, 'Shazhenxi', null, null, + 'China', 3.4, 'Check', '2016-08-09', 'Complete') + , (4330, 205, 61, '2016-04-14', '2016-09-26', 'Elizabeth Butler', '82 Springview Road', null, 'Kimito', null, + '11710', 'Finland', 1.92, 'Card', '2016-10-18', 'Shipped') + , (4331, 220, 39, '2016-06-10', '2016-04-07', 'Albert Flores', '19 Talmadge Hill', null, 'Almelo', + 'Provincie Overijssel', '7604', 'Netherlands', 4.23, 'Check', '2016-12-15', 'Shipped') + , (4332, 217, 47, '2016-10-25', '2016-09-28', 'Kimberly Fowler', '0 Trailsway Crossing', null, 'Iwata', null, + '925-0145', 'Japan', 8.14, 'Check', '2016-06-06', 'On Hold') + , (4333, 209, 12, '2016-12-25', '2016-10-31', 'Joe Powell', '5 Everett Drive', null, 'Bergen', 'Hordaland', '5895', + 'Greece', 8.02, 'Cash', '2016-09-05', 'Shipped') + , (4334, 219, 1, '2016-08-12', '2017-02-18', 'Virginia Collins', '78693 Cordelia Point', null, 'San Benito', null, + '8423', 'Philippines', 8.4, 'Cash', '2017-01-06', 'Complete') + , (4335, 220, 59, '2017-02-26', '2016-11-05', 'Mary Howard', '5 Golf View Street', null, 'Gjinkar', null, null, + 'Canada', 3.54, 'Card', '2016-06-09', 'Complete') + , (4336, 220, 19, '2017-02-09', '2017-01-26', 'Ronald Stevens', '57 Old Shore Crossing', null, 'Bureng', null, + null, 'United Kingdom', 8.21, 'Card', '2016-12-21', 'On Hold') + , (4337, 204, 59, '2016-05-14', '2016-07-08', 'James Evans', '44078 Warner Drive', null, 'Amurzet', null, '679230', + 'Russia', 9.35, 'Card', '2016-07-22', 'Complete') + , (4338, 213, 96, '2016-09-02', '2016-11-10', 'Willie Snyder', '361 Stone Corner Pass', null, 'Sindangsari', null, + null, 'Indonesia', 9.32, 'Check', '2016-04-10', 'Complete') + , (4339, 220, 30, '2017-03-04', '2016-08-16', 'Julie Black', '2922 Grasskamp Alley', null, 'Cotonou', null, null, + 'India', 9.14, 'Cash', '2017-03-07', 'Shipped') + , (4340, 206, 17, '2016-11-18', '2016-11-24', 'Roy Olson', '4 Shopko Hill', null, 'Binagadi', null, null, 'India', + 5.22, 'Check', '2016-10-14', 'Shipped') + , (4341, 202, 28, '2016-11-18', '2017-02-18', 'Evelyn Lawrence', '90 Crownhardt Center', null, 'Bayshint', null, + null, 'Japan', 7.25, 'Check', '2016-12-16', 'On Hold') + , (4342, 209, 37, '2016-10-30', '2016-06-07', 'John Rodriguez', '69 Golf View Avenue', null, 'Hezuoqiao', null, + null, 'China', 8.23, 'Cash', '2016-11-05', 'On Hold') + , (4343, 203, 51, '2016-04-09', '2016-12-17', 'Ruth Kim', '0027 Dunning Pass', null, 'Kuteynykove', null, null, + 'Ukraine', 2.46, 'Cash', '2016-03-28', 'New') + , (4344, 217, 34, '2016-12-16', '2016-10-11', 'Shawn Patterson', '36 Little Fleur Circle', null, 'Xiekou', null, + null, 'China', 6.43, 'Cash', '2016-03-27', 'New') + , (4345, 213, 59, '2016-10-30', '2016-07-10', 'Nancy Jones', '47088 Crowley Junction', null, 'Promna', null, + '26-803', 'Poland', 5.67, 'Cash', '2016-12-02', 'Complete') + , (4346, 217, 70, '2016-12-27', '2016-10-06', 'Deborah Bishop', '1 Summer Ridge Circle', null, 'Bunobogu', null, + null, 'Indonesia', 7.57, 'Cash', '2016-09-19', 'New') + , (4347, 203, 30, '2016-05-26', '2016-08-14', 'Steve Hunt', '4393 Summer Ridge Crossing', null, 'Hošťka', null, + '348 06', 'Czech Republic', 5.78, 'Cash', '2016-12-30', 'Shipped') + , (4348, 203, 9, '2016-04-14', '2016-10-19', 'Betty Black', '23 Nova Junction', null, 'Sępólno Krajeńskie', null, + '89-400', 'Poland', 8.55, 'Cash', '2016-09-23', 'New') + , (4349, 211, 95, '2017-01-28', '2016-04-13', 'Gregory Wood', '96 Grasskamp Point', null, 'Psará', null, null, + 'Greece', 8.47, 'Cash', '2016-12-18', 'Shipped') + , (4350, 218, 97, '2016-03-22', '2016-04-13', 'Martin Martinez', '5 Towne Crossing', null, 'Kista', 'Stockholm', + '164 45', 'Sweden', 8.07, 'Check', '2016-05-15', 'On Hold') + , (4351, 215, 80, '2016-06-20', '2016-11-05', 'Margaret Cook', '82 Eggendart Junction', null, 'Omuthiya', null, + null, 'India', 9.71, 'Cash', '2016-09-18', 'Shipped') + , (4352, 211, 15, '2016-09-02', '2017-01-23', 'Justin Myers', '6734 Continental Drive', null, 'Tadabliro', null, + null, 'Indonesia', 2.23, 'Cash', '2016-05-12', 'New') + , (4353, 216, 77, '2016-10-09', '2016-07-31', 'Jane Ruiz', '2743 Harbort Center', null, 'Pasar', null, null, + 'Indonesia', 4.88, 'Cash', '2016-06-04', 'New') + , (4354, 202, 53, '2017-03-15', '2016-06-21', 'Philip Bradley', '6 Bartillon Park', null, 'Aimorés', null, + '35200-000', 'Brazil', 5.01, 'Cash', '2016-05-16', 'New') + , (4355, 220, 14, '2017-01-03', '2016-05-07', 'Phillip White', '1 Schurz Crossing', null, 'Tuzhai', null, null, + 'China', 7.06, 'Check', '2016-10-18', 'New') + , (4356, 208, 85, '2016-12-26', '2016-07-28', 'George Ryan', '92 Morrow Road', null, 'Nijmegen', + 'Provincie Gelderland', '6519', 'Netherlands', 5.76, 'Cash', '2016-12-14', 'New') + , (4357, 208, 73, '2016-04-06', '2016-04-01', 'Evelyn Rose', '134 Milwaukee Lane', null, 'Tiechang', null, null, + 'China', 5.37, 'Cash', '2016-12-19', 'Shipped') + , (4358, 202, 77, '2016-04-14', '2016-10-21', 'Janet Robertson', '09309 Dottie Park', null, 'Ljubešćica', null, + '42222', 'Canada', 5.27, 'Cash', '2016-06-07', 'On Hold') + , (4359, 202, 35, '2016-05-08', '2017-01-27', 'Diana Perry', '95535 Lotheville Center', null, 'Kvasice', null, + '768 21', 'Czech Republic', 7.1, 'Card', '2016-07-27', 'New') + , (4360, 210, 86, '2016-11-23', '2016-10-12', 'Todd Elliott', '6737 Melrose Road', null, 'Catumbela', null, null, + 'Netherlands', 2.19, 'Check', '2016-04-05', 'Shipped') + , (4361, 209, 45, '2016-04-07', '2016-06-30', 'Emily Dean', '143 Ridge Oak Alley', null, 'Diriá', null, null, + 'United Kingdom', 1.33, 'Cash', '2016-12-31', 'Complete') + , (4362, 208, 88, '2016-05-08', '2016-04-14', 'Eric Simpson', '8113 Graceland Junction', null, 'Borovoy', null, + '309135', 'Russia', 3.81, 'Card', '2016-06-21', 'Shipped') + , (4363, 211, 84, '2016-12-31', '2016-06-05', 'Alan Chapman', '461 Westport Center', null, 'Inayauan', null, + '3336', 'Philippines', 8.62, 'Card', '2017-03-03', 'Complete') + , (4364, 205, 100, '2016-09-10', '2017-02-19', 'Denise Dixon', '066 Gerald Avenue', null, 'Venëv', null, '301320', + 'Russia', 4.82, 'Check', '2016-04-22', 'Shipped') + , (4365, 211, 7, '2017-03-09', '2017-03-16', 'Douglas Nelson', '03051 Grasskamp Way', null, 'Póvoa', 'Vila Real', + '4870-130', 'Portugal', 1.67, 'Check', '2016-08-30', 'Complete') + , (4366, 213, 24, '2016-04-25', '2016-06-06', 'Louis Frazier', '65 Buhler Circle', null, 'Bīleh Savār', null, null, + 'Iran', 9.53, 'Check', '2016-12-20', 'Complete') + , (4367, 207, 8, '2016-09-24', '2016-04-06', 'Theresa Stanley', '487 Birchwood Point', null, 'T’et’ri Tsqaro', + null, null, 'United Kingdom', 5.06, 'Cash', '2016-04-08', 'New') + , (4368, 207, 76, '2016-12-21', '2016-05-03', 'Sean Chapman', '3917 Miller Pass', null, 'Andaray', null, null, + 'Peru', 4.36, 'Check', '2016-07-25', 'New') + , (4369, 215, 90, '2016-03-30', '2017-01-03', 'Eugene Brooks', '137 1st Hill', null, 'Independencia', 'Tamaulipas', + '89888', 'Mexico', 9.56, 'Check', '2017-01-23', 'Shipped') + , (4370, 204, 33, '2016-12-17', '2016-10-22', 'Joan Martin', '24 Hayes Point', null, 'Dobrzeń Wielki', null, + '46-081', 'Poland', 8.87, 'Cash', '2016-07-09', 'Shipped') + , (4371, 204, 13, '2016-12-11', '2016-05-07', 'Martha Mendoza', '0 Sommers Point', null, 'Jiamachi', null, null, + 'China', 1.53, 'Check', '2016-08-05', 'On Hold') + , (4372, 211, 90, '2016-10-27', '2017-02-14', 'Joan Allen', '64 Bluestem Drive', null, 'Conde', 'Braga', + '4815-019', 'Portugal', 2.66, 'Card', '2016-09-25', 'Shipped') + , (4373, 208, 81, '2016-08-20', '2017-03-16', 'Tammy Richards', '15541 Ramsey Alley', null, 'Gunungkendeng', null, + null, 'Indonesia', 5.66, 'Cash', '2016-05-03', 'Shipped') + , (4374, 216, 19, '2017-01-22', '2016-09-10', 'Andrea Medina', '3 Goodland Pass', null, 'Ḩarīb', null, null, + 'South Africa', 1.03, 'Card', '2016-10-12', 'Shipped') + , (4375, 213, 8, '2016-09-13', '2016-12-21', 'Antonio Carpenter', '453 Duke Point', null, 'Rouen', + 'Haute-Normandie', '76029 CEDEX', 'France', 5.11, 'Cash', '2017-01-26', 'Complete') + , (4376, 207, 83, '2016-11-29', '2016-04-13', 'Jeffrey Smith', '7 Old Shore Center', null, 'Licuan', null, '2500', + 'Philippines', 8.55, 'Cash', '2016-11-08', 'New') + , (4377, 216, 13, '2016-11-06', '2016-10-08', 'Mark Perkins', '57 Troy Court', null, 'Mojimán', null, null, + 'Canada', 2.03, 'Card', '2017-01-06', 'Shipped') + , (4378, 219, 4, '2016-08-05', '2017-03-04', 'Louis Jordan', '5 Armistice Street', null, 'Labège', 'Midi-Pyrénées', + '31673 CEDEX', 'France', 3.61, 'Cash', '2016-12-07', 'New') + , (4379, 218, 66, '2017-02-26', '2016-11-18', 'Fred Johnson', '4 Dovetail Crossing', null, 'Santa Cruz', null, + null, 'India', 1.08, 'Cash', '2016-04-02', 'Complete') + , (4380, 201, 27, '2016-09-01', '2016-05-08', 'Rose Harvey', '8 Canary Plaza', null, 'Pingtan', null, null, + 'China', 6.9, 'Check', '2016-12-09', 'Complete') + , (4381, 209, 89, '2017-02-04', '2016-08-30', 'Christine Thomas', '008 Carberry Alley', null, 'Logung', null, null, + 'Indonesia', 6.13, 'Card', '2016-05-09', 'On Hold') + , (4382, 204, 47, '2016-08-11', '2016-12-27', 'Juan Reed', '4337 Del Sol Hill', null, 'Dayeuhluhur', null, null, + 'Indonesia', 7.76, 'Card', '2016-06-15', 'New') + , (4383, 215, 30, '2016-08-07', '2016-07-22', 'Diane Gray', '899 Oneill Pass', null, 'Alegrete', null, '97540-000', + 'Brazil', 5.62, 'Cash', '2016-12-26', 'Complete') + , (4384, 212, 88, '2016-07-23', '2016-05-07', 'Louise Baker', '46092 Kedzie Court', null, 'Ban Mo', null, '18130', + 'Thailand', 4.0, 'Card', '2016-07-11', 'Complete') + , (4385, 203, 62, '2017-02-20', '2016-10-01', 'Paul Thompson', '77444 Northwestern Pass', null, + 'Francisco I Madero', 'Coahuila De Zaragoza', '26010', 'Mexico', 3.99, 'Check', '2016-12-23', 'Shipped') + , (4386, 218, 26, '2016-09-02', '2016-06-10', 'Anne Kim', '67814 Buena Vista Court', null, 'Sanjie', null, null, + 'China', 9.61, 'Card', '2016-04-05', 'New') + , (4387, 219, 20, '2017-03-05', '2016-12-19', 'Matthew Gutierrez', '33055 Evergreen Crossing', null, 'Cusco', null, + null, 'Peru', 6.52, 'Check', '2017-02-17', 'Shipped') + , (4388, 219, 71, '2016-09-06', '2016-05-24', 'Janet Hernandez', '9243 Forest Run Parkway', null, 'Ulanov', null, + null, 'Ukraine', 3.04, 'Cash', '2016-09-20', 'New') + , (4389, 207, 2, '2016-04-25', '2017-02-16', 'Louis Chapman', '878 Roth Alley', null, 'Kusak', null, '423430', + 'Russia', 5.78, 'Cash', '2017-02-18', 'On Hold') + , (4390, 218, 64, '2016-09-25', '2016-09-22', 'Joe Carpenter', '56 Artisan Park', null, 'Xinjiang', null, null, + 'China', 8.2, 'Card', '2016-12-01', 'On Hold') + , (4391, 218, 64, '2016-07-30', '2016-07-23', 'Charles Harper', '7 Sutherland Road', null, 'Tatarbunary', null, + null, 'Ukraine', 4.62, 'Cash', '2016-06-29', 'Shipped') + , (4392, 206, 92, '2016-05-05', '2016-07-17', 'Craig Reynolds', '3 Erie Park', null, 'East End', null, null, + 'Canada', 2.03, 'Check', '2017-02-03', 'New') + , (4393, 212, 45, '2016-06-29', '2016-06-17', 'Raymond Mcdonald', '792 Brown Trail', null, 'Yangfang', null, null, + 'China', 4.44, 'Card', '2017-02-27', 'Complete') + , (4394, 211, 87, '2016-09-28', '2016-04-03', 'Sandra Medina', '7 Eagan Circle', null, 'Baratleke', null, null, + 'Indonesia', 4.34, 'Cash', '2017-01-05', 'Complete') + , (4395, 203, 57, '2016-08-18', '2017-03-05', 'Sean Carpenter', '33 Dottie Park', null, 'Sokal’', null, null, + 'Ukraine', 5.39, 'Cash', '2017-02-22', 'On Hold') + , (4396, 203, 87, '2016-06-19', '2016-07-10', 'Alice Ferguson', '0399 Dixon Hill', null, 'Privolzhskiy', null, + '413138', 'Russia', 8.74, 'Cash', '2016-12-23', 'New') + , (4397, 216, 61, '2016-08-01', '2016-12-25', 'Diana Nguyen', '5052 Rigney Junction', null, 'Guaynabo', 'Pr', + '00971', 'Germany', 5.36, 'Check', '2016-07-12', 'On Hold') + , (4398, 211, 52, '2016-12-04', '2016-05-11', 'Earl Gutierrez', '32 Summit Avenue', null, 'Maqbanah', null, null, + 'South Africa', 5.82, 'Cash', '2016-07-21', 'New') + , (4399, 208, 71, '2016-05-16', '2017-02-25', 'Gloria Gordon', '5 Prentice Trail', null, 'Xichang', null, null, + 'China', 3.2, 'Card', '2016-05-24', 'Complete') + , (4400, 218, 7, '2016-09-06', '2016-03-21', 'Robert Wheeler', '83 Logan Circle', null, 'Zhongshan', null, null, + 'China', 9.15, 'Cash', '2016-08-16', 'Shipped') + , (4401, 210, 53, '2016-09-05', '2016-05-01', 'Walter Williamson', '8459 American Plaza', null, 'Santo Rosario', + null, '3114', 'Philippines', 7.71, 'Check', '2017-01-25', 'New') + , (4402, 216, 92, '2016-10-10', '2016-03-28', 'Jonathan James', '164 Bonner Hill', null, 'Vale de Mendiz', + 'Vila Real', '5085-105', 'Portugal', 2.96, 'Card', '2016-07-15', 'Shipped') + , (4403, 212, 12, '2016-09-15', '2016-11-11', 'Judy Williams', '207 Scofield Place', null, 'Lawa-an', null, '5706', + 'Philippines', 9.68, 'Check', '2016-04-30', 'On Hold') + , (4404, 213, 83, '2016-04-25', '2016-05-14', 'Amy Olson', '84189 Schurz Circle', null, 'Ogoja', null, null, + 'Netherlands', 5.18, 'Card', '2016-11-02', 'Complete') + , (4405, 209, 7, '2016-12-01', '2016-08-30', 'Donna Vasquez', '82460 Ridgeway Hill', null, 'La Guacamaya', null, + null, 'Canada', 5.32, 'Card', '2017-02-11', 'Complete') + , (4406, 209, 66, '2016-09-14', '2016-05-13', 'Susan Jacobs', '17 Morningstar Lane', null, 'Chedao', null, null, + 'China', 4.12, 'Cash', '2016-11-11', 'New') + , (4407, 214, 57, '2016-05-04', '2016-06-03', 'Kathryn Burns', '116 Hollow Ridge Park', null, 'Comagascas', null, + '1950', 'Philippines', 1.05, 'Cash', '2017-01-28', 'New') + , (4408, 201, 64, '2017-02-11', '2016-06-08', 'Doris Bennett', '090 Lien Place', null, 'Luotang', null, null, + 'China', 1.35, 'Cash', '2016-12-16', 'Complete') + , (4409, 209, 41, '2017-02-28', '2016-09-05', 'Cynthia Robertson', '6 Eliot Center', null, 'Abu Dhabi', null, null, + 'Denmark', 4.21, 'Check', '2017-01-01', 'New') + , (4410, 215, 24, '2016-08-28', '2016-10-30', 'Jonathan Parker', '0 Weeping Birch Hill', null, 'Cienfuegos', null, + null, 'Denmark', 1.69, 'Card', '2017-01-21', 'Shipped') + , (4411, 206, 10, '2016-08-30', '2016-12-06', 'Bobby Foster', '8279 Ridgeview Place', null, 'Cruz Alta', null, + '98000-000', 'Brazil', 7.5, 'Cash', '2016-09-09', 'On Hold') + , (4412, 205, 65, '2016-12-13', '2017-02-27', 'Phyllis Moore', '806 Acker Drive', null, 'Paoay', null, '2902', + 'Philippines', 4.63, 'Cash', '2017-01-11', 'Shipped') + , (4413, 211, 2, '2016-12-05', '2016-12-07', 'Kevin Gordon', '00875 Sherman Lane', null, 'Wansheng', null, null, + 'China', 2.7, 'Card', '2016-07-31', 'New') + , (4414, 219, 25, '2017-02-08', '2016-06-22', 'Jack Mccoy', '2 Killdeer Center', null, 'Gresik', null, null, + 'Indonesia', 4.1, 'Check', '2017-03-05', 'On Hold') + , (4415, 220, 9, '2017-01-02', '2016-08-28', 'Margaret Fuller', '1960 Parkside Hill', null, 'Kafr Zaytā', null, + null, 'India', 1.09, 'Cash', '2016-08-07', 'New') + , (4416, 214, 100, '2017-01-07', '2017-02-07', 'Melissa Nichols', '6 Lakewood Gardens Avenue', null, 'Stockholm', + 'Stockholm', '113 90', 'Sweden', 4.1, 'Cash', '2016-03-31', 'On Hold') + , (4417, 210, 87, '2017-01-23', '2016-12-14', 'William Webb', '84 Mifflin Junction', null, 'Kanungu', null, null, + 'South Africa', 4.38, 'Card', '2016-05-05', 'Complete') + , (4418, 213, 29, '2017-01-05', '2017-02-07', 'Anne Gonzales', '7 Myrtle Plaza', null, 'Davila', null, '2012', + 'Philippines', 5.45, 'Cash', '2016-05-23', 'Shipped') + , (4419, 212, 94, '2016-10-19', '2016-12-20', 'Kathleen Graham', '22 Forest Run Hill', null, 'Mollepampa', null, + null, 'Peru', 5.86, 'Check', '2016-07-31', 'Shipped') + , (4420, 201, 32, '2016-11-29', '2016-09-24', 'Diana Sanders', '8925 Kennedy Parkway', null, + 'San Miguel de Tucumán', null, '4137', 'Argentina', 3.71, 'Cash', '2016-08-10', 'Complete') + , (4421, 208, 58, '2017-03-02', '2016-04-03', 'Willie Wright', '60 Old Shore Alley', null, 'Jinjiang', null, null, + 'China', 6.72, 'Card', '2016-10-09', 'Shipped') + , (4422, 206, 59, '2016-04-19', '2016-12-29', 'Frank Evans', '785 Little Fleur Center', null, 'El Triunfo', null, + null, 'Argentina', 9.43, 'Check', '2016-05-13', 'New') + , (4423, 209, 68, '2016-08-22', '2016-11-20', 'Phillip Carter', '6398 John Wall Center', null, 'Shouxihu', null, + null, 'China', 4.22, 'Check', '2016-10-18', 'New') + , (4424, 205, 31, '2016-10-05', '2016-10-09', 'Lillian Gomez', '17560 Melrose Point', null, 'Milwaukee', + 'Wisconsin', '53205', 'United States', 1.16, 'Check', '2016-04-17', 'On Hold') + , (4425, 202, 7, '2016-07-24', '2017-02-22', 'John Ortiz', '45 Vera Place', null, 'Kiel', 'Schleswig-Holstein', + '24109', 'Germany', 5.86, 'Cash', '2016-10-13', 'On Hold') + , (4426, 214, 80, '2016-10-04', '2016-09-01', 'Brandon Fields', '94792 Jackson Hill', null, 'San Juan', 'Pr', + '00918', 'Germany', 2.54, 'Check', '2016-12-19', 'On Hold') + , (4427, 209, 23, '2016-06-23', '2016-04-29', 'Willie Hart', '20 Sloan Terrace', null, 'Mount Darwin', null, null, + 'India', 3.71, 'Cash', '2016-09-22', 'Complete') + , (4428, 211, 7, '2016-09-07', '2016-10-28', 'Walter Montgomery', '67285 Crowley Road', null, 'Wailolong', null, + null, 'Indonesia', 9.79, 'Check', '2016-04-05', 'Complete') + , (4429, 217, 10, '2017-03-02', '2016-11-27', 'Sara Williamson', '72 Monterey Circle', null, 'Salvacion', null, + '1114', 'Philippines', 3.33, 'Card', '2016-05-18', 'On Hold') + , (4430, 210, 12, '2017-02-18', '2016-03-17', 'Wayne Sanders', '21302 Valley Edge Pass', null, 'Balakasap', null, + null, 'Indonesia', 2.18, 'Card', '2016-06-02', 'New') + , (4431, 220, 80, '2016-10-01', '2016-09-28', 'Cynthia Allen', '1 Karstens Avenue', null, + 'Santo António das Areias', 'Portalegre', '7330-254', 'Portugal', 3.4, 'Cash', '2016-08-21', 'New') + , (4432, 211, 95, '2017-02-04', '2016-03-17', 'Jonathan Hughes', '93993 Fairview Junction', null, 'Buje', null, + '52460', 'Canada', 5.19, 'Cash', '2016-10-01', 'New') + , (4433, 208, 67, '2017-02-11', '2016-06-01', 'Gerald Wright', '77811 Dennis Point', null, 'Hohoe', null, null, + 'United Kingdom', 3.25, 'Card', '2016-07-15', 'New') + , (4434, 201, 53, '2016-12-25', '2017-01-07', 'Roy Anderson', '182 High Crossing Terrace', null, 'Bajiazi', null, + null, 'China', 8.8, 'Card', '2017-02-11', 'Shipped') + , (4435, 207, 3, '2016-05-30', '2016-04-07', 'Brenda Wright', '98 Kim Drive', null, 'Lillehammer', 'Oppland', + '2605', 'Greece', 5.76, 'Cash', '2017-02-02', 'On Hold') + , (4436, 204, 29, '2016-07-19', '2016-07-05', 'Philip Price', '16 Brown Plaza', null, 'Čapljina', null, null, + 'India', 9.62, 'Cash', '2016-11-05', 'On Hold') + , (4437, 210, 80, '2016-10-13', '2016-04-24', 'Michelle Webb', '4160 Everett Point', null, 'Waepana', null, null, + 'Indonesia', 9.54, 'Cash', '2016-07-11', 'Complete') + , (4438, 209, 6, '2016-12-31', '2017-01-27', 'Heather Fields', '10 Fairview Center', null, 'Złotniki Kujawskie', + null, '88-180', 'Poland', 1.81, 'Cash', '2017-03-15', 'Shipped') + , (4439, 216, 53, '2017-02-01', '2016-09-12', 'Ryan Long', '0 Gateway Avenue', null, 'Pizhanka', null, '613380', + 'Russia', 9.34, 'Cash', '2016-07-02', 'New') + , (4440, 211, 25, '2017-02-03', '2016-10-13', 'Joyce Stewart', '61 Burrows Street', null, 'Kushelevka', null, + '658381', 'Russia', 6.4, 'Cash', '2017-01-29', 'On Hold') + , (4441, 215, 93, '2016-03-21', '2016-11-17', 'Walter Arnold', '97613 Pond Avenue', null, 'Looc', null, '5507', + 'Philippines', 1.09, 'Cash', '2016-10-05', 'Shipped') + , (4442, 214, 10, '2016-05-10', '2016-05-31', 'Irene Simmons', '36 Larry Court', null, 'Rozhdestveno', null, + '399768', 'Russia', 4.82, 'Check', '2017-01-13', 'Complete') + , (4443, 208, 19, '2017-02-09', '2017-02-05', 'Christina Mccoy', '1482 Rockefeller Point', null, 'Rybatskoye', + null, '196851', 'Russia', 1.62, 'Cash', '2016-09-14', 'Shipped') + , (4444, 210, 98, '2017-02-15', '2016-05-17', 'Marie Fowler', '04 Prairie Rose Junction', null, 'Chicago', + 'Illinois', '60604', 'United States', 7.47, 'Card', '2017-02-22', 'Complete') + , (4445, 218, 32, '2017-02-12', '2016-05-20', 'Louise Bell', '3 Charing Cross Pass', null, 'Selce', null, '1219', + 'Denmark', 4.47, 'Cash', '2016-04-01', 'New') + , (4446, 209, 25, '2016-09-22', '2016-12-03', 'Barbara Black', '697 Oneill Drive', null, 'Shanghang', null, null, + 'China', 4.66, 'Check', '2016-11-09', 'On Hold') + , (4447, 209, 100, '2016-08-26', '2017-01-16', 'James Holmes', '77 Marcy Court', null, 'Estreito', null, + '65975-000', 'Brazil', 9.85, 'Check', '2016-12-04', 'On Hold') + , (4448, 210, 72, '2016-06-25', '2016-12-07', 'Kenneth Williams', '6400 Milwaukee Hill', null, 'Wanshan', null, + null, 'China', 3.66, 'Card', '2016-06-09', 'On Hold') + , (4449, 213, 16, '2016-12-13', '2016-08-07', 'Joshua Jacobs', '8 Judy Park', null, 'Ágios Andréas', null, null, + 'Greece', 3.81, 'Cash', '2016-07-07', 'Complete') + , (4450, 216, 100, '2016-12-21', '2017-02-13', 'Aaron Sanders', '1 Dakota Court', null, 'Huayllo', null, null, + 'Peru', 7.59, 'Cash', '2016-04-22', 'On Hold') + , (4451, 211, 50, '2016-08-22', '2016-06-05', 'Eugene Scott', '03 Golden Leaf Point', null, 'Stírion', null, null, + 'Greece', 8.99, 'Card', '2017-02-25', 'New') + , (4452, 220, 86, '2016-05-07', '2016-07-20', 'Cynthia Phillips', '820 Merchant Way', null, 'Mrongi Daja', null, + null, 'Indonesia', 2.21, 'Check', '2016-04-27', 'On Hold') + , (4453, 213, 58, '2016-10-30', '2016-03-22', 'Martin Reed', '14 Meadow Vale Alley', null, 'Jiangdong', null, null, + 'China', 3.58, 'Cash', '2017-02-12', 'Complete') + , (4454, 206, 98, '2016-05-14', '2016-11-07', 'Janet Porter', '74391 Ronald Regan Park', null, 'Lamakera Dua', + null, null, 'Indonesia', 9.86, 'Check', '2016-06-12', 'New') + , (4455, 204, 2, '2016-03-28', '2016-04-11', 'Amanda Duncan', '047 Jenna Road', null, 'Tungawan', null, '7018', + 'Philippines', 2.04, 'Card', '2016-07-09', 'New') + , (4456, 211, 58, '2016-08-05', '2016-11-19', 'Joseph Henderson', '14 Morningstar Pass', null, 'Kolobolon', null, + null, 'Indonesia', 6.44, 'Check', '2016-05-24', 'New') + , (4457, 215, 21, '2017-02-15', '2016-06-11', 'Cynthia Bishop', '066 Surrey Pass', null, 'Hưng Yên', null, null, + 'Vietnam', 1.61, 'Check', '2016-07-05', 'Shipped') + , (4458, 211, 10, '2016-08-08', '2016-08-06', 'Craig Andrews', '7 Mariners Cove Court', null, 'Tuanchengshan', + null, null, 'China', 8.4, 'Cash', '2016-12-15', 'New') + , (4459, 211, 71, '2016-05-13', '2017-02-19', 'Steve Warren', '6702 Delladonna Point', null, 'Pražmo', null, + '739 04', 'Czech Republic', 8.29, 'Card', '2016-06-29', 'New') + , (4460, 214, 5, '2016-12-21', '2016-06-21', 'Brenda Mills', '77934 Prairieview Way', null, 'Huafeng', null, null, + 'China', 6.76, 'Cash', '2016-07-08', 'New') + , (4461, 212, 34, '2016-04-27', '2016-07-22', 'Randy Wright', '9 Thackeray Way', null, 'Dvůr Králové nad Labem', + null, '544 01', 'Czech Republic', 9.45, 'Card', '2016-03-20', 'Shipped') + , (4462, 202, 47, '2016-10-31', '2016-06-30', 'Michelle Ramirez', '0152 Old Shore Road', null, 'Pulaupinang', null, + null, 'Indonesia', 2.42, 'Card', '2016-09-05', 'New') + , (4463, 209, 86, '2016-07-30', '2016-04-29', 'Frank Duncan', '67 Buell Terrace', null, 'Krasne', null, null, + 'Ukraine', 2.71, 'Card', '2016-06-22', 'Complete') + , (4464, 204, 62, '2017-03-01', '2017-03-11', 'Carlos Warren', '978 Merrick Circle', null, 'Penghua', null, null, + 'China', 7.29, 'Cash', '2016-03-22', 'Shipped') + , (4465, 202, 87, '2016-06-23', '2016-11-15', 'Tina Gardner', '0 Mcguire Terrace', null, 'Cangqian', null, null, + 'China', 2.17, 'Card', '2016-06-01', 'New') + , (4466, 220, 31, '2016-06-04', '2016-06-08', 'Stephen Turner', '17 Leroy Plaza', null, 'Pedaringan', null, null, + 'Indonesia', 8.89, 'Check', '2016-05-09', 'Shipped') + , (4467, 210, 35, '2016-05-21', '2016-09-26', 'Melissa Wilson', '61199 Forest Center', null, 'Krmelín', null, + '739 24', 'Czech Republic', 2.35, 'Card', '2016-06-20', 'On Hold') + , (4468, 216, 50, '2016-09-10', '2016-12-02', 'Billy Harper', '8940 Fisk Parkway', null, 'San Jose', 'California', + '95113', 'United States', 3.98, 'Cash', '2016-10-04', 'Complete') + , (4469, 207, 22, '2016-06-03', '2016-11-06', 'Carl Davis', '5 Lindbergh Street', null, 'Taling Chan', null, + '10170', 'Thailand', 4.71, 'Card', '2017-02-03', 'New') + , (4470, 211, 64, '2016-06-16', '2016-05-26', 'Gerald Henry', '2221 Porter Crossing', null, 'Mozdok', null, + '363759', 'Russia', 9.57, 'Cash', '2016-10-11', 'Shipped') + , (4471, 206, 25, '2016-07-27', '2016-08-24', 'Debra Garza', '65379 Sunnyside Trail', null, 'Jiadingzhen', null, + null, 'China', 1.06, 'Check', '2016-06-23', 'On Hold') + , (4472, 204, 18, '2016-08-30', '2016-10-09', 'Margaret Rodriguez', '3202 Marquette Point', null, 'Oranzherei', + null, '416368', 'Russia', 3.35, 'Check', '2016-06-18', 'On Hold') + , (4473, 212, 88, '2016-10-29', '2016-05-25', 'William Burke', '46 Kingsford Center', null, 'San Juan', null, + '11301', 'Denmark', 3.85, 'Check', '2017-02-12', 'Shipped') + , (4474, 217, 9, '2017-02-19', '2016-05-29', 'Larry Myers', '731 Packers Point', null, 'Trelleborg', 'Skåne', + '231 68', 'Sweden', 4.46, 'Card', '2016-06-19', 'New') + , (4475, 202, 40, '2016-11-03', '2016-04-25', 'Virginia Hall', '141 Rowland Way', null, 'Aoji-ri', null, null, + 'Denmark', 7.58, 'Check', '2016-11-13', 'Shipped') + , (4476, 211, 16, '2017-03-07', '2016-10-14', 'Doris Berry', '60 Rusk Lane', null, 'Al Qamşīyah', null, null, + 'India', 1.8, 'Check', '2016-03-19', 'On Hold') + , (4477, 210, 87, '2016-12-04', '2016-03-22', 'Juan Richards', '3830 Randy Parkway', null, 'Nakhon Nayok', null, + '26120', 'Thailand', 1.22, 'Card', '2016-08-05', 'Complete') + , (4478, 203, 34, '2017-01-28', '2016-09-27', 'Kimberly Fox', '34957 Elka Way', null, 'Santiago', null, + '97700-000', 'Brazil', 3.99, 'Check', '2016-07-06', 'On Hold') + , (4479, 219, 89, '2016-07-01', '2016-05-31', 'Ruby Ruiz', '90581 American Hill', null, 'Agudos', null, + '17120-000', 'Brazil', 5.97, 'Cash', '2016-06-03', 'On Hold') + , (4480, 203, 53, '2016-10-17', '2016-11-07', 'Ruby Robinson', '385 Carioca Plaza', null, 'Kalangan', null, null, + 'Indonesia', 8.71, 'Card', '2016-12-01', 'Complete') + , (4481, 207, 91, '2017-02-25', '2016-03-31', 'Victor Lopez', '170 Mariners Cove Circle', null, 'Bressuire', + 'Poitou-Charentes', '79304 CEDEX', 'France', 8.59, 'Check', '2016-07-30', 'Complete') + , (4482, 215, 58, '2017-02-15', '2016-07-25', 'Kimberly Marshall', '647 Summerview Circle', null, 'Timahankrajan', + null, null, 'Indonesia', 3.07, 'Check', '2016-04-21', 'On Hold') + , (4483, 207, 76, '2016-06-27', '2016-10-15', 'Pamela Matthews', '9379 Summit Trail', null, 'Brangsi', null, null, + 'Indonesia', 1.35, 'Card', '2016-05-27', 'New') + , (4484, 210, 98, '2017-02-03', '2016-11-04', 'Randy Patterson', '6641 American Ash Point', null, 'Ivanec', null, + '42240', 'Canada', 2.36, 'Card', '2016-10-31', 'Shipped') + , (4485, 205, 71, '2017-01-01', '2017-02-16', 'Carolyn Garza', '281 Raven Lane', null, 'Jingyang', null, null, + 'China', 6.85, 'Check', '2016-04-27', 'Shipped') + , (4486, 202, 20, '2016-07-24', '2016-07-06', 'Ruth Perkins', '5656 Northview Lane', null, 'Burevestnik', null, + '607612', 'Russia', 9.29, 'Cash', '2017-03-16', 'On Hold') + , (4487, 203, 49, '2017-02-20', '2017-01-12', 'Kelly Oliver', '249 Londonderry Pass', null, + 'Grande Rivière du Nord', null, null, 'Canada', 7.65, 'Check', '2016-12-04', 'Shipped') + , (4488, 203, 67, '2016-11-09', '2016-07-19', 'Shirley Henry', '3045 Rowland Lane', null, 'Midlands', null, null, + 'Germany', 5.35, 'Check', '2016-06-14', 'Complete') + , (4489, 209, 100, '2017-01-24', '2016-05-30', 'Marie Ferguson', '629 Crownhardt Junction', null, 'El Paso', + 'Texas', '88546', 'United States', 5.18, 'Check', '2016-04-20', 'Shipped') + , (4490, 202, 87, '2016-06-27', '2016-09-05', 'Rachel Scott', '343 Schurz Road', null, 'Cabiguan', null, '1144', + 'Philippines', 1.05, 'Cash', '2016-07-24', 'Shipped') + , (4491, 211, 93, '2017-01-16', '2016-09-29', 'Henry Fields', '26143 Del Sol Avenue', null, 'Huangduobu', null, + null, 'China', 6.15, 'Card', '2016-06-02', 'Shipped') + , (4492, 217, 10, '2016-12-08', '2016-10-01', 'Harold Jones', '2 Oak Avenue', null, 'Surkhakhi', null, '386147', + 'Russia', 9.96, 'Card', '2016-04-07', 'New') + , (4493, 217, 35, '2016-05-05', '2016-05-01', 'Walter Wright', '12 Paget Road', null, 'Siluman', null, null, + 'Indonesia', 2.1, 'Cash', '2016-10-26', 'On Hold') + , (4494, 206, 51, '2017-02-25', '2016-10-24', 'Marilyn Hayes', '4 5th Way', null, 'Punkaharju', null, '58501', + 'Finland', 3.57, 'Cash', '2016-06-22', 'New') + , (4495, 208, 3, '2016-12-27', '2016-09-09', 'Sandra West', '0384 Bowman Center', null, 'Tagta', null, null, + 'India', 6.45, 'Cash', '2016-08-25', 'New') + , (4496, 218, 41, '2017-01-10', '2016-12-11', 'Dennis Meyer', '4 Cambridge Alley', null, 'Cariamanga', null, null, + 'Argentina', 5.33, 'Check', '2016-09-28', 'New') + , (4497, 216, 76, '2016-09-28', '2016-05-12', 'Frank Dean', '23227 Veith Park', null, 'Fengqiao', null, null, + 'China', 6.72, 'Cash', '2016-04-12', 'Complete') + , (4498, 204, 3, '2016-11-11', '2016-12-01', 'Amy Palmer', '7735 Maple Wood Road', null, 'Działoszyce', null, + '28-440', 'Poland', 3.08, 'Card', '2016-09-07', 'Shipped') + , (4499, 211, 96, '2017-02-04', '2016-03-27', 'Emily Nelson', '3 Crownhardt Plaza', null, 'Oslob', null, '6025', + 'Philippines', 6.41, 'Card', '2016-09-25', 'On Hold') + , (4500, 204, 7, '2016-04-29', '2017-01-20', 'Randy Hanson', '687 Drewry Place', null, 'Barberena', null, '06002', + 'Japan', 2.51, 'Card', '2016-12-12', 'Complete') + , (4501, 215, 92, '2017-02-27', '2016-09-26', 'Raymond Banks', '826 Mendota Pass', null, 'Chicago', 'Illinois', + '60681', 'United States', 3.34, 'Card', '2016-10-30', 'Complete') + , (4502, 220, 24, '2016-10-01', '2016-09-26', 'Kimberly Robertson', '2643 Becker Trail', null, 'Columbus', + 'United Kingdom', '31904', 'United States', 3.07, 'Check', '2016-04-27', 'Complete') + , (4503, 215, 52, '2017-02-25', '2016-08-08', 'Marilyn Miller', '1 Tennessee Park', null, 'Spokane', 'Washington', + '99252', 'United States', 5.34, 'Check', '2016-08-16', 'On Hold') + , (4504, 220, 35, '2017-01-27', '2016-09-08', 'Marie Carpenter', '4575 Fair Oaks Hill', null, 'Richmond', + 'Virginia', '23293', 'United States', 7.01, 'Cash', '2016-04-06', 'Shipped') + , (4505, 203, 10, '2016-06-24', '2017-02-22', 'Nicholas Wells', '823 Duke Center', null, 'Irvine', 'California', + '92710', 'United States', 1.4, 'Check', '2016-06-17', 'On Hold') + , (4506, 207, 26, '2016-12-26', '2017-03-14', 'John Dean', '06 Spenser Place', null, 'Charleston', + 'South Carolina', '29403', 'United States', 1.31, 'Cash', '2016-10-25', 'Shipped') + , (4507, 216, 28, '2016-08-22', '2016-12-13', 'Diana Spencer', '26 Ridgeway Plaza', null, 'Ogden', 'Utah', '84403', + 'United States', 9.42, 'Cash', '2016-04-13', 'Shipped') + , (4508, 213, 90, '2016-08-31', '2017-01-13', 'Wanda Bowman', '862 Iowa Avenue', null, 'Kansas City', 'Kansas', + '66160', 'United States', 7.1, 'Cash', '2016-10-19', 'Complete') + , (4509, 204, 93, '2016-07-07', '2016-05-31', 'Andrew Garrett', '27066 Gina Road', null, 'El Paso', 'Texas', + '88558', 'United States', 6.88, 'Check', '2016-04-23', 'Complete') + , (4510, 202, 56, '2017-02-06', '2016-10-29', 'Juan Webb', '6233 South Junction', null, 'Lafayette', 'Louisiana', + '70505', 'United States', 1.07, 'Cash', '2016-05-20', 'New') + , (4511, 219, 54, '2016-11-08', '2016-06-17', 'William Gardner', '5 Meadow Ridge Terrace', null, 'Tacoma', + 'Washington', '98447', 'United States', 4.46, 'Check', '2016-05-25', 'Complete') + , (4512, 215, 4, '2016-09-09', '2016-08-21', 'Fred Fernandez', '15 Ludington Junction', null, 'San Rafael', + 'California', '94913', 'United States', 4.3, 'Cash', '2016-09-02', 'New') + , (4513, 206, 54, '2016-10-28', '2016-06-30', 'Ruth Ellis', '41196 Rieder Avenue', null, 'Baltimore', 'Maryland', + '21211', 'United States', 8.39, 'Card', '2016-05-29', 'Complete') + , (4514, 215, 73, '2017-02-26', '2016-09-17', 'David Ferguson', '5813 Brown Parkway', null, 'Shawnee Mission', + 'Kansas', '66286', 'United States', 2.71, 'Card', '2016-04-18', 'Shipped') + , (4515, 216, 23, '2016-11-08', '2016-06-27', 'Susan Freeman', '0 Bashford Parkway', null, 'Tucson', 'Arizona', + '85720', 'United States', 5.5, 'Check', '2017-02-01', 'Shipped') + , (4516, 212, 9, '2016-04-30', '2016-12-31', 'Alan Hunt', '193 Declaration Plaza', null, 'Louisville', 'Kentucky', + '40256', 'United States', 9.74, 'Cash', '2017-01-20', 'On Hold') + , (4517, 202, 46, '2017-02-01', '2016-07-22', 'Phillip Romero', '1860 Thompson Crossing', null, 'Biloxi', + 'Mississippi', '39534', 'United States', 3.02, 'Card', '2016-11-04', 'Complete') + , (4518, 203, 75, '2016-09-07', '2016-11-14', 'George Diaz', '6 Mcguire Center', null, 'Mesa', 'Arizona', '85210', + 'United States', 7.84, 'Check', '2016-06-21', 'Shipped') + , (4519, 217, 68, '2016-10-07', '2016-08-15', 'Virginia King', '7405 High Crossing Alley', null, 'Sioux City', + 'Iowa', '51105', 'United States', 4.03, 'Check', '2016-05-09', 'Complete') + , (4520, 216, 6, '2017-02-18', '2017-02-17', 'Brenda Ruiz', '224 Badeau Street', null, 'Corpus Christi', 'Texas', + '78426', 'United States', 9.11, 'Check', '2016-11-13', 'New') + , (4521, 201, 84, '2016-09-17', '2016-06-15', 'Debra Brown', '94 Morningstar Center', null, 'San Francisco', + 'California', '94177', 'United States', 6.59, 'Check', '2017-03-10', 'Shipped') + , (4522, 205, 89, '2016-10-22', '2017-03-13', 'Emily Henry', '79 Manufacturers Center', null, 'Los Angeles', + 'California', '90020', 'United States', 4.11, 'Cash', '2016-10-27', 'Complete') + , (4523, 211, 67, '2016-04-17', '2017-02-12', 'Aaron Peterson', '504 Schlimgen Terrace', null, 'Bethesda', + 'Maryland', '20892', 'United States', 5.42, 'Card', '2016-08-25', 'Shipped') + , (4524, 215, 83, '2016-08-22', '2016-07-31', 'Janice Burke', '3 Mcbride Lane', null, 'Washington', + 'District of Columbia', '20073', 'United States', 3.76, 'Card', '2016-08-09', 'Shipped') + , (4525, 217, 100, '2016-03-31', '2016-12-09', 'Debra Kelley', '18155 Northview Plaza', null, 'Detroit', + 'Michigan', '48267', 'United States', 2.26, 'Cash', '2016-12-29', 'On Hold') + , (4526, 214, 32, '2016-11-24', '2016-03-28', 'Donald Sims', '86 Michigan Avenue', null, 'Brooklyn', 'New York', + '11231', 'United States', 5.05, 'Check', '2016-08-07', 'Shipped') + , (4527, 205, 100, '2016-05-13', '2016-06-17', 'Daniel Mason', '4 Hanover Road', null, 'Reno', 'Nevada', '89595', + 'United States', 4.81, 'Check', '2016-10-22', 'Shipped') + , (4528, 201, 32, '2016-11-15', '2016-11-16', 'Howard Knight', '5 Weeping Birch Alley', null, 'Jacksonville', + 'Florida', '32225', 'United States', 5.99, 'Check', '2016-11-07', 'New') + , (4529, 213, 99, '2016-12-02', '2016-07-09', 'Virginia Hughes', '629 Manufacturers Point', null, 'Syracuse', + 'New York', '13224', 'United States', 5.6, 'Card', '2016-12-02', 'Complete') + , (4530, 219, 18, '2016-12-07', '2017-02-07', 'Carl Graham', '90 Heffernan Pass', null, 'Saint Petersburg', + 'Florida', '33737', 'United States', 9.35, 'Check', '2016-10-18', 'Complete') + , (4531, 201, 57, '2016-12-26', '2016-12-29', 'Joan Murray', '38 Bellgrove Crossing', null, 'Tacoma', 'Washington', + '98447', 'United States', 6.69, 'Card', '2016-12-05', 'On Hold') + , (4532, 202, 58, '2016-04-02', '2016-07-01', 'Robert Williams', '09407 Northfield Circle', null, 'Cedar Rapids', + 'Iowa', '52410', 'United States', 6.56, 'Card', '2016-04-16', 'On Hold') + , (4533, 218, 36, '2017-02-07', '2016-05-05', 'Ryan Black', '57199 Hoffman Place', null, 'Jacksonville', 'Florida', + '32204', 'United States', 8.54, 'Check', '2017-01-24', 'Shipped') + , (4534, 208, 92, '2016-07-09', '2016-06-20', 'Brenda Hunter', '16179 Ludington Court', null, 'Birmingham', + 'Alabama', '35263', 'United States', 9.82, 'Cash', '2016-09-30', 'New') + , (4535, 214, 70, '2016-08-04', '2016-06-29', 'Anne Warren', '08161 Barnett Parkway', null, 'Van Nuys', + 'California', '91411', 'United States', 7.04, 'Cash', '2017-02-24', 'Complete') + , (4536, 213, 99, '2017-01-11', '2017-01-21', 'Betty Snyder', '9 Badeau Court', null, 'Davenport', 'Iowa', '52804', + 'United States', 8.72, 'Card', '2016-09-03', 'Shipped') + , (4537, 217, 76, '2016-07-31', '2017-02-13', 'Edward Wilson', '1031 Esch Drive', null, 'Fresno', 'California', + '93750', 'United States', 1.64, 'Check', '2016-04-21', 'On Hold') + , (4538, 210, 60, '2016-06-22', '2016-04-10', 'Terry Butler', '124 Hoepker Pass', null, 'San Antonio', 'Texas', + '78255', 'United States', 2.35, 'Check', '2017-01-31', 'Complete') + , (4539, 220, 5, '2016-11-12', '2016-04-25', 'Emily Hawkins', '990 Quincy Drive', null, 'Richmond', 'Virginia', + '23289', 'United States', 4.36, 'Card', '2016-09-17', 'Complete') + , (4540, 213, 42, '2017-02-28', '2017-02-11', 'Cynthia Rose', '8881 Packers Trail', null, 'Berkeley', 'California', + '94712', 'United States', 6.09, 'Check', '2016-04-14', 'New') + , (4541, 204, 27, '2016-09-30', '2017-01-28', 'Lisa Turner', '83 Graedel Terrace', null, 'Oakland', 'California', + '94611', 'United States', 9.61, 'Card', '2016-05-07', 'Shipped') + , (4542, 219, 26, '2016-07-13', '2016-03-23', 'Jason Price', '475 Meadow Valley Point', null, 'Annapolis', + 'Maryland', '21405', 'United States', 2.93, 'Check', '2016-06-10', 'New') + , (4543, 202, 63, '2016-07-29', '2016-05-20', 'Joan Hayes', '7 Upham Center', null, 'Temple', 'Texas', '76505', + 'United States', 7.39, 'Card', '2016-09-20', 'Complete') + , (4544, 212, 97, '2016-10-31', '2017-01-16', 'Paula Torres', '443 Debs Terrace', null, 'Racine', 'Wisconsin', + '53405', 'United States', 3.93, 'Card', '2016-07-07', 'Shipped') + , (4545, 201, 33, '2017-03-08', '2016-08-21', 'Theresa Watkins', '85395 Rusk Center', null, 'Jackson', + 'Mississippi', '39210', 'United States', 5.32, 'Card', '2016-11-19', 'Complete') + , (4546, 211, 68, '2016-05-25', '2016-07-17', 'Clarence Nguyen', '155 Northport Road', null, 'Greensboro', + 'North Carolina', '27455', 'United States', 7.06, 'Cash', '2016-08-24', 'Shipped') + , (4547, 203, 73, '2016-05-03', '2016-10-23', 'Jean Mason', '03 Eagle Crest Lane', null, 'Colorado Springs', + 'Colorado', '80935', 'United States', 4.2, 'Cash', '2016-04-07', 'New') + , (4548, 217, 2, '2016-05-20', '2016-08-07', 'Nicole Brown', '364 Debra Lane', null, 'Washington', + 'District of Columbia', '20046', 'United States', 7.97, 'Cash', '2016-04-30', 'New') + , (4549, 220, 89, '2016-04-11', '2016-12-11', 'Carol Chapman', '756 Muir Point', null, 'Washington', + 'District of Columbia', '20397', 'United States', 2.21, 'Card', '2017-02-05', 'Shipped') + , (4550, 211, 13, '2016-04-16', '2016-08-03', 'Roy George', '8 Anhalt Terrace', null, 'Indianapolis', 'Indiana', + '46207', 'United States', 4.5, 'Check', '2017-03-06', 'New') + , (4551, 219, 37, '2016-04-14', '2017-03-01', 'Heather Bishop', '0901 Tennessee Street', null, 'Kingsport', + 'Tennessee', '37665', 'United States', 1.92, 'Card', '2017-01-02', 'Shipped') + , (4552, 218, 94, '2017-03-05', '2016-06-01', 'Wayne Mason', '90645 Carberry Drive', null, 'Madison', 'Wisconsin', + '53716', 'United States', 6.96, 'Card', '2016-12-31', 'Complete') + , (4553, 212, 37, '2016-10-16', '2016-10-13', 'Gloria Elliott', '100 Granby Junction', null, 'Miami', 'Florida', + '33153', 'United States', 9.25, 'Cash', '2016-06-09', 'Shipped') + , (4554, 217, 4, '2016-06-05', '2016-07-26', 'Timothy Hayes', '6001 Elgar Circle', null, 'Pensacola', 'Florida', + '32575', 'United States', 6.5, 'Cash', '2016-03-30', 'Complete') + , (4555, 207, 49, '2016-08-19', '2016-08-15', 'Judith Baker', '3436 Briar Crest Park', null, 'Newark', + 'New Jersey', '07188', 'United States', 2.33, 'Check', '2016-09-17', 'Complete') + , (4556, 217, 17, '2016-11-18', '2016-12-10', 'Roy Russell', '6401 Graedel Court', null, 'Alexandria', 'Virginia', + '22301', 'United States', 3.24, 'Check', '2016-04-08', 'Complete') + , (4557, 216, 35, '2016-09-11', '2016-05-07', 'Jacqueline Davis', '864 Cherokee Lane', null, 'Columbus', 'Ohio', + '43226', 'United States', 4.7, 'Card', '2016-08-06', 'Shipped') + , (4558, 211, 20, '2016-10-06', '2016-07-15', 'Eugene Castillo', '03090 Northland Circle', null, 'Salt Lake City', + 'Utah', '84199', 'United States', 9.36, 'Card', '2016-10-06', 'Complete') + , (4559, 216, 13, '2017-01-13', '2016-03-28', 'Janice Mills', '522 Holmberg Alley', null, 'Scottsdale', 'Arizona', + '85271', 'United States', 7.31, 'Cash', '2016-05-15', 'On Hold') + , (4560, 211, 77, '2016-08-24', '2017-03-13', 'Ruby White', '0070 Corben Way', null, 'Naples', 'Florida', '34114', + 'United States', 3.71, 'Check', '2016-07-17', 'On Hold') + , (4561, 219, 55, '2016-08-13', '2016-11-19', 'Frank Jackson', '25 Rigney Point', null, 'Washington', + 'District of Columbia', '20420', 'United States', 1.94, 'Cash', '2016-06-12', 'Shipped') + , (4562, 207, 96, '2016-10-12', '2016-12-04', 'Pamela Peterson', '830 Loftsgordon Junction', null, 'Houston', + 'Texas', '77281', 'United States', 1.45, 'Check', '2017-03-06', 'New') + , (4563, 204, 70, '2016-07-23', '2017-02-06', 'Martha Frazier', '3 Gerald Lane', null, 'Scottsdale', 'Arizona', + '85260', 'United States', 2.74, 'Cash', '2017-01-19', 'New') + , (4564, 204, 59, '2017-02-26', '2016-10-23', 'Kenneth Hawkins', '27305 Maple Crossing', null, 'San Diego', + 'California', '92145', 'United States', 9.41, 'Cash', '2017-02-09', 'On Hold') + , (4565, 203, 66, '2016-08-06', '2017-02-03', 'Barbara Collins', '8 Norway Maple Junction', null, 'Fort Worth', + 'Texas', '76198', 'United States', 1.08, 'Card', '2016-06-24', 'New') + , (4566, 217, 83, '2016-09-14', '2016-03-29', 'Gary Ellis', '97 Nobel Avenue', null, 'Alexandria', 'Louisiana', + '71307', 'United States', 5.05, 'Card', '2016-06-13', 'Shipped') + , (4567, 214, 63, '2017-03-04', '2016-11-05', 'Douglas Hughes', '98309 Mccormick Park', null, 'Kansas City', + 'Kansas', '66160', 'United States', 1.4, 'Card', '2017-02-13', 'Shipped') + , (4568, 208, 12, '2016-10-31', '2017-02-27', 'Harold Flores', '1 Merchant Lane', null, 'Duluth', 'United Kingdom', + '30096', 'United States', 4.84, 'Check', '2016-04-30', 'On Hold') + , (4569, 201, 96, '2016-08-20', '2016-10-03', 'Marie Nguyen', '084 Stuart Hill', null, 'Arlington', 'Texas', + '76004', 'United States', 5.95, 'Cash', '2016-04-25', 'On Hold') + , (4570, 203, 1, '2016-10-13', '2016-03-21', 'Judy Fowler', '7541 Golf Course Way', null, 'Kansas City', + 'Missouri', '64109', 'United States', 8.02, 'Check', '2016-05-05', 'New') + , (4571, 219, 49, '2016-11-04', '2016-09-02', 'Howard Rogers', '5 Scott Hill', null, 'Brooklyn', 'New York', + '11215', 'United States', 5.21, 'Cash', '2016-10-28', 'Complete') + , (4572, 215, 5, '2016-03-24', '2016-08-31', 'Stephanie Martinez', '0022 Reinke Trail', null, 'Baton Rouge', + 'Louisiana', '70894', 'United States', 7.74, 'Card', '2016-08-14', 'On Hold') + , (4573, 206, 61, '2016-08-31', '2016-07-10', 'Jacqueline Lane', '780 Elka Place', null, 'Cleveland', 'Ohio', + '44105', 'United States', 9.12, 'Check', '2016-11-30', 'On Hold') + , (4574, 220, 65, '2016-06-26', '2016-06-25', 'Betty Harrison', '23089 Kensington Junction', null, 'Greensboro', + 'North Carolina', '27404', 'United States', 5.63, 'Check', '2016-03-30', 'Complete') + , (4575, 212, 81, '2016-04-28', '2016-10-19', 'Robin Bradley', '7895 Weeping Birch Plaza', null, 'Waterbury', + 'Connecticut', '06721', 'United States', 7.34, 'Cash', '2017-01-25', 'On Hold') + , (4576, 216, 13, '2017-02-24', '2016-07-18', 'Ralph Bailey', '4019 Harper Park', null, 'Sacramento', 'California', + '94291', 'United States', 6.77, 'Cash', '2017-02-02', 'New') + , (4577, 203, 43, '2016-09-24', '2016-11-18', 'Melissa Ross', '775 Lyons Road', null, 'Bridgeport', 'Connecticut', + '06606', 'United States', 1.64, 'Check', '2016-07-23', 'Shipped') + , (4578, 212, 53, '2016-07-05', '2016-06-19', 'Joan Russell', '0 Kings Terrace', null, 'Bloomington', 'Illinois', + '61709', 'United States', 4.66, 'Card', '2016-04-09', 'New') + , (4579, 214, 17, '2016-10-01', '2016-10-18', 'Benjamin George', '40131 Ronald Regan Road', null, 'Washington', + 'District of Columbia', '20525', 'United States', 8.04, 'Check', '2016-06-16', 'Complete') + , (4580, 207, 69, '2016-04-19', '2017-02-09', 'Katherine Stone', '37483 Melrose Parkway', null, 'Fresno', + 'California', '93794', 'United States', 6.7, 'Check', '2017-02-08', 'Complete') + , (4581, 218, 28, '2017-03-04', '2016-11-25', 'Ernest Cruz', '872 Nancy Street', null, 'Pompano Beach', 'Florida', + '33069', 'United States', 5.81, 'Cash', '2016-04-21', 'On Hold') + , (4582, 217, 32, '2017-03-16', '2016-06-08', 'Joshua Edwards', '72309 Elmside Point', null, 'San Francisco', + 'California', '94110', 'United States', 2.49, 'Cash', '2016-04-01', 'On Hold') + , (4583, 219, 83, '2017-01-24', '2016-07-25', 'Justin Mills', '88350 Wayridge Hill', null, 'Charleston', + 'West Virginia', '25326', 'United States', 6.03, 'Card', '2016-10-07', 'New') + , (4584, 208, 45, '2016-10-18', '2016-05-13', 'Kathleen Gibson', '25 Carpenter Lane', null, 'Reno', 'Nevada', + '89505', 'United States', 5.41, 'Check', '2016-08-21', 'Shipped') + , (4585, 216, 71, '2016-09-19', '2016-10-15', 'Ruby Bennett', '1 Muir Pass', null, 'Las Vegas', 'Nevada', '89135', + 'United States', 2.5, 'Cash', '2016-11-29', 'On Hold') + , (4586, 214, 48, '2016-08-07', '2016-08-12', 'Richard Robinson', '1125 Melvin Terrace', null, 'Bethesda', + 'Maryland', '20816', 'United States', 4.02, 'Card', '2017-01-09', 'Complete') + , (4587, 212, 62, '2016-12-17', '2017-01-23', 'Debra Sanchez', '534 Stoughton Lane', null, 'Johnstown', + 'Pennsylvania', '15906', 'United States', 8.78, 'Cash', '2016-08-07', 'Shipped') + , (4588, 216, 30, '2016-10-24', '2016-12-21', 'Willie Dean', '680 Northview Circle', null, 'Huntington', + 'West Virginia', '25775', 'United States', 8.43, 'Card', '2017-03-12', 'New') + , (4589, 210, 10, '2017-01-01', '2016-09-22', 'Christina Kelley', '8706 Sundown Street', null, 'Peoria', + 'Illinois', '61635', 'United States', 4.24, 'Cash', '2017-02-08', 'On Hold') + , (4590, 205, 6, '2016-11-29', '2017-02-23', 'Russell Montgomery', '977 Packers Drive', null, 'Charlotte', + 'North Carolina', '28247', 'United States', 2.87, 'Cash', '2016-05-30', 'Complete') + , (4591, 206, 15, '2016-03-28', '2017-02-23', 'Edward Cunningham', '283 Bultman Way', null, 'Jacksonville', + 'Florida', '32277', 'United States', 6.55, 'Check', '2017-03-10', 'Shipped') + , (4592, 209, 82, '2016-12-20', '2016-09-07', 'Michael Chavez', '00 Oak Avenue', null, 'Young America', + 'Minnesota', '55551', 'United States', 8.22, 'Check', '2016-04-19', 'On Hold') + , (4593, 204, 24, '2017-03-13', '2016-08-30', 'David White', '506 Nevada Circle', null, 'Portland', 'Maine', + '04109', 'United States', 1.11, 'Card', '2017-01-13', 'On Hold') + , (4594, 206, 27, '2016-09-13', '2017-03-12', 'Cheryl Vasquez', '9070 Di Loreto Court', null, 'Van Nuys', + 'California', '91499', 'United States', 7.42, 'Card', '2017-02-25', 'On Hold') + , (4595, 211, 94, '2016-07-03', '2016-05-08', 'Charles Garrett', '1337 Hooker Trail', null, 'Honolulu', 'Hawaii', + '96810', 'United States', 9.57, 'Check', '2016-10-04', 'Shipped') + , (4596, 216, 56, '2016-07-08', '2017-02-28', 'Michelle Butler', '1 Magdeline Lane', null, 'Orlando', 'Florida', + '32813', 'United States', 7.05, 'Check', '2016-07-12', 'New') + , (4597, 217, 26, '2016-09-24', '2016-10-05', 'Howard Reyes', '3677 Donald Alley', null, 'Carol Stream', + 'Illinois', '60351', 'United States', 7.62, 'Cash', '2017-02-08', 'Complete') + , (4598, 212, 76, '2016-04-13', '2016-08-10', 'Eugene Kelly', '838 Becker Plaza', null, 'Laredo', 'Texas', '78044', + 'United States', 4.9, 'Check', '2016-10-23', 'New') + , (4599, 208, 29, '2016-04-16', '2016-05-15', 'Jimmy Mcdonald', '0 Dayton Place', null, 'Rochester', 'New York', + '14646', 'United States', 1.56, 'Check', '2017-01-14', 'Complete') + , (4600, 208, 2, '2016-04-26', '2016-04-06', 'Stephen Jacobs', '7131 Scoville Terrace', null, 'Phoenix', 'Arizona', + '85020', 'United States', 4.52, 'Cash', '2017-01-22', 'On Hold'); + + +/* Order details */ +insert into order_items (order_id, book_id, quantity, unit_price, discount, order_item_status, date_allocated) +values (4001, 608, 1, 97.34, 8.73, 'Allocated', '2017-01-15') + , (4001, 611, 2, 58.46, 4.36, 'No Stock', '2016-09-21') + , (4001, 616, 2, 58.46, 4.36, 'No Stock', '2016-09-21') + , (4001, 613, 2, 58.46, 4.36, 'No Stock', '2016-09-21') + , (4001, 615, 2, 58.46, 4.36, 'No Stock', '2016-09-21') + , (4002, 604, 3, 88.97, 2.86, 'On Order', '2016-12-15') + , (4002, 610, 4, 37.19, 8.65, 'Allocated', '2016-10-12') + , (4002, 615, 4, 37.19, 8.65, 'Allocated', '2016-10-12') + , (4003, 609, 8, 92.87, 4.01, 'No Stock', '2016-06-15') + , (4003, 612, 7, 87.15, 3.54, 'No Stock', '2017-02-09') + , (4004, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4004, 620, 2, 10.00, 1.00, 'On Order', '2016-12-14') + , (4004, 611, 4, 10.00, 1.00, 'On Order', '2016-12-14') + , (4004, 612, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4005, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4005, 619, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4005, 620, 2, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4006, 617, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4006, 618, 2, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4006, 607, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4007, 617, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4007, 610, 2, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4007, 612, 5, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4008, 612, 1, 57.2, 8.94, 'Allocated', '2017-01-13') + , (4008, 615, 3, 57.2, 8.94, 'Allocated', '2017-01-13') + , (4008, 611, 1, 57.2, 8.94, 'Allocated', '2017-01-13') + , (4009, 605, 6, 62.16, 5.68, 'No Stock', '2017-02-13') + , (4009, 610, 6, 19.31, 5.0, 'No Stock', '2016-09-16') + , (4009, 615, 9, 51.21, 4.48, 'Allocated', '2016-10-18') + , (4010, 601, 1, 32.18, 9.41, 'On Order', '2016-03-17') + , (4010, 602, 1, 31.35, 7.18, 'No Stock', '2016-12-30') + , (4010, 603, 10, 24.24, 2.76, 'Allocated', '2016-07-05') + , (4010, 610, 6, 9.09, 3.02, 'On Order', '2016-07-17') + , (4011, 604, 10, 58.25, 9.3, 'No Stock', '2016-04-04') + , (4011, 606, 5, 73.34, 1.76, 'Allocated', '2016-06-30') + , (4011, 608, 3, 95.07, 4.6, 'On Order', '2016-06-04') + , (4011, 615, 9, 20.84, 3.93, 'Allocated', '2016-06-10') + , (4012, 604, 5, 19.82, 9.97, 'No Stock', '2016-09-21') + , (4012, 601, 3, 19.82, 9.97, 'No Stock', '2016-09-21') + , (4012, 610, 3, 19.82, 9.97, 'No Stock', '2016-09-21') + , (4013, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4013, 604, 2, 19.82, 9.97, 'No Stock', '2016-09-21') + , (4013, 606, 5, 19.82, 9.97, 'No Stock', '2016-09-21') + , (4014, 601, 3, 37.57, 4.99, 'Allocated', '2016-08-21') + , (4015, 611, 8, 95.27, 6.62, 'Allocated', '2017-03-13') + , (4015, 612, 2, 89.63, 4.14, 'Allocated', '2016-04-07') + , (4015, 615, 8, 69.03, 1.11, 'On Order', '2016-08-15') + , (4016, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4016, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4016, 612, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4017, 605, 6, 75.88, 2.1, 'On Order', '2017-02-15') + , (4017, 610, 4, 26.43, 7.18, 'On Order', '2016-04-30') + , (4017, 619, 6, 77.91, 9.26, 'No Stock', '2016-04-02') + , (4018, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4019, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4020, 614, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4021, 604, 3, 20.14, 8.54, 'No Stock', '2016-06-26') + , (4022, 614, 7, 41.61, 4.62, 'On Order', '2016-09-09') + , (4022, 619, 1, 10.45, 2.56, 'On Order', '2016-10-18') + , (4023, 607, 6, 7.68, 5.59, 'On Order', '2016-11-15') + , (4023, 611, 7, 89.4, 1.71, 'No Stock', '2016-04-03') + , (4024, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4024, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4024, 608, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4024, 609, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4025, 612, 6, 81.24, 3.52, 'Allocated', '2016-04-25') + , (4025, 614, 4, 14.07, 2.58, 'On Order', '2016-09-11') + , (4026, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4026, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4027, 611, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4027, 612, 3, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4027, 613, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4028, 605, 5, 95.04, 7.82, 'On Order', '2016-07-24') + , (4028, 615, 8, 74.56, 1.78, 'Allocated', '2016-12-09') + , (4029, 604, 1, 11.06, 5.37, 'On Order', '2016-11-26') + , (4029, 603, 1, 11.06, 5.37, 'On Order', '2016-11-26') + , (4029, 607, 1, 11.06, 5.37, 'On Order', '2016-11-26') + , (4030, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4030, 620, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4030, 619, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4031, 605, 7, 75.42, 2.92, 'No Stock', '2017-02-12') + , (4031, 608, 7, 75.42, 2.92, 'No Stock', '2017-02-12') + , (4031, 609, 7, 75.42, 2.92, 'No Stock', '2017-02-12') + , (4031, 615, 7, 75.42, 2.92, 'No Stock', '2017-02-12') + , (4032, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4032, 612, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4032, 611, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4032, 619, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4033, 615, 4, 45.55, 6.19, 'Allocated', '2016-05-09') + , (4033, 609, 3, 45.55, 6.19, 'Allocated', '2016-05-09') + , (4033, 620, 1, 45.55, 6.19, 'Allocated', '2016-05-09') + , (4034, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4034, 620, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4034, 609, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4035, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4035, 614, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4035, 619, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4036, 604, 1, 46.63, 4.25, 'No Stock', '2016-05-04') + , (4036, 605, 6, 66.75, 9.97, 'Allocated', '2017-02-25') + , (4037, 615, 2, 44.76, 7.22, 'On Order', '2017-03-01') + , (4037, 612, 2, 44.76, 7.22, 'On Order', '2017-03-01') + , (4038, 602, 2, 13.25, 7.66, 'On Order', '2016-07-13') + , (4038, 620, 3, 13.25, 7.66, 'On Order', '2016-07-13') + , (4039, 609, 1, 99.68, 6.09, 'No Stock', '2016-07-24') + , (4039, 619, 3, 99.68, 6.09, 'No Stock', '2016-07-24') + , (4039, 620, 1, 99.68, 6.09, 'No Stock', '2016-07-24') + , (4040, 612, 2, 79.64, 6.72, 'Allocated', '2016-04-24') + , (4040, 620, 2, 79.64, 6.72, 'Allocated', '2016-04-24') + , (4041, 615, 9, 42.79, 8.92, 'No Stock', '2016-03-31') + , (4041, 612, 2, 42.79, 8.92, 'No Stock', '2016-03-31') + , (4041, 620, 1, 42.79, 8.92, 'No Stock', '2016-03-31') + , (4042, 617, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4042, 613, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4042, 620, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4043, 611, 7, 87.95, 8.57, 'No Stock', '2016-06-18') + , (4043, 619, 3, 87.95, 8.57, 'No Stock', '2016-06-18') + , (4043, 620, 1, 87.95, 8.57, 'No Stock', '2016-06-18') + , (4044, 602, 8, 47.3, 3.26, 'On Order', '2016-11-05') + , (4044, 612, 3, 79.42, 6.56, 'On Order', '2017-02-11') + , (4045, 603, 3, 31.01, 7.2, 'No Stock', '2016-11-11') + , (4045, 604, 10, 43.54, 6.8, 'Allocated', '2016-11-13') + , (4045, 608, 7, 15.2, 3.58, 'Allocated', '2017-01-18') + , (4046, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4047, 619, 2, 81.11, 8.77, 'No Stock', '2016-06-17') + , (4047, 620, 8, 1.54, 6.85, 'No Stock', '2016-05-05') + , (4048, 605, 7, 13.52, 2.44, 'On Order', '2016-07-06') + , (4049, 603, 7, 40.99, 5.77, 'Allocated', '2017-02-22') + , (4049, 609, 10, 90.45, 2.75, 'Allocated', '2017-01-26') + , (4049, 612, 10, 24.28, 9.85, 'No Stock', '2016-10-01') + , (4050, 606, 4, 27.84, 1.49, 'No Stock', '2016-12-18') + , (4050, 607, 2, 72.72, 3.08, 'On Order', '2016-04-24') + , (4050, 612, 2, 76.85, 5.15, 'No Stock', '2017-02-25') + , (4051, 603, 1, 57.6, 1.77, 'Allocated', '2016-07-02') + , (4052, 605, 9, 50.74, 6.47, 'No Stock', '2016-05-22') + , (4053, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4054, 601, 10, 55.48, 9.19, 'On Order', '2016-07-12') + , (4055, 606, 10, 57.17, 3.06, 'No Stock', '2016-11-20') + , (4056, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4057, 609, 1, 79.3, 9.42, 'On Order', '2016-10-01') + , (4057, 610, 5, 41.21, 5.55, 'No Stock', '2016-07-20') + , (4057, 618, 3, 68.99, 6.42, 'On Order', '2016-08-19') + , (4058, 604, 6, 36.78, 6.96, 'Allocated', '2016-05-20') + , (4058, 619, 6, 79.01, 4.3, 'Allocated', '2016-06-19') + , (4059, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4060, 603, 10, 40.38, 2.1, 'On Order', '2017-02-05') + , (4060, 604, 9, 41.98, 1.46, 'Allocated', '2017-01-17') + , (4061, 605, 1, 41.12, 2.51, 'On Order', '2016-09-05') + , (4061, 602, 1, 41.12, 2.51, 'On Order', '2016-09-05') + , (4061, 603, 1, 41.12, 2.51, 'On Order', '2016-09-05') + , (4062, 604, 1, 71.77, 4.91, 'No Stock', '2016-11-20') + , (4062, 605, 2, 41.12, 2.51, 'On Order', '2016-09-05') + , (4062, 607, 1, 41.12, 2.51, 'On Order', '2016-09-05') + , (4063, 608, 1, 62.85, 4.62, 'Allocated', '2016-03-25') + , (4063, 605, 4, 41.12, 2.51, 'On Order', '2016-09-05') + , (4063, 607, 1, 41.12, 2.51, 'On Order', '2016-09-05') + , (4064, 615, 1, 68.27, 6.79, 'No Stock', '2016-07-06') + , (4064, 602, 2, 41.12, 2.51, 'On Order', '2016-09-05') + , (4064, 603, 5, 41.12, 2.51, 'On Order', '2016-09-05') + , (4064, 605, 1, 41.12, 2.51, 'On Order', '2016-09-05') + , (4065, 610, 5, 99.76, 1.78, 'Allocated', '2016-09-23') + , (4066, 605, 1, 41.12, 2.51, 'On Order', '2016-09-05') + , (4066, 604, 9, 2.63, 7.42, 'Allocated', '2016-08-12') + , (4066, 615, 7, 25.14, 7.22, 'No Stock', '2016-03-27') + , (4067, 618, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4068, 602, 4, 12.67, 5.17, 'Allocated', '2016-08-30') + , (4068, 603, 1, 87.81, 1.02, 'On Order', '2016-10-12') + , (4069, 620, 7, 89.85, 3.49, 'Allocated', '2017-02-22') + , (4070, 615, 5, 94.08, 4.09, 'On Order', '2017-01-31') + , (4071, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4072, 601, 3, 89.95, 9.61, 'No Stock', '2016-11-25') + , (4072, 612, 5, 34.51, 5.99, 'No Stock', '2016-05-25') + , (4073, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4074, 606, 10, 98.2, 3.63, 'On Order', '2016-04-30') + , (4075, 605, 8, 69.36, 9.16, 'On Order', '2016-07-19') + , (4075, 606, 1, 3.95, 8.66, 'On Order', '2016-04-09') + , (4076, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4077, 602, 10, 90.58, 5.92, 'No Stock', '2016-06-23') + , (4077, 609, 1, 8.25, 3.74, 'No Stock', '2016-12-07') + , (4077, 615, 9, 86.2, 4.5, 'Allocated', '2017-03-10') + , (4078, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4078, 612, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4078, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4079, 615, 7, 1.95, 1.76, 'On Order', '2017-03-04') + , (4079, 613, 2, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4079, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4080, 608, 5, 26.84, 9.03, 'On Order', '2016-11-13') + , (4080, 609, 3, 41.76, 4.08, 'Allocated', '2016-09-10') + , (4081, 604, 9, 5.49, 8.45, 'On Order', '2016-10-21') + , (4082, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4083, 602, 1, 44.85, 5.16, 'No Stock', '2016-09-16') + , (4084, 604, 4, 58.27, 4.09, 'Allocated', '2016-08-12') + , (4085, 605, 8, 93.54, 7.49, 'On Order', '2016-11-24') + , (4086, 615, 2, 94.02, 1.63, 'No Stock', '2016-09-01') + , (4087, 601, 2, 79.39, 3.86, 'No Stock', '2016-07-13') + , (4088, 615, 3, 14.03, 3.74, 'Allocated', '2016-11-15') + , (4089, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4090, 611, 4, 46.11, 1.53, 'No Stock', '2016-07-25') + , (4091, 613, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4092, 602, 5, 42.68, 7.92, 'On Order', '2016-09-09') + , (4093, 615, 8, 75.27, 5.92, 'No Stock', '2016-07-09') + , (4094, 605, 7, 91.05, 4.52, 'On Order', '2017-02-21') + , (4095, 602, 6, 58.5, 9.62, 'On Order', '2017-02-26') + , (4095, 604, 3, 80.13, 4.11, 'No Stock', '2016-12-01') + , (4095, 608, 1, 23.96, 5.54, 'No Stock', '2016-03-27') + , (4096, 601, 4, 9.84, 5.33, 'No Stock', '2016-04-18') + , (4097, 605, 4, 45.03, 5.61, 'On Order', '2016-05-13') + , (4097, 606, 3, 41.39, 3.59, 'On Order', '2016-11-29') + , (4098, 607, 8, 11.86, 2.74, 'No Stock', '2016-11-23') + , (4099, 606, 2, 54.09, 5.84, 'On Order', '2016-10-08') + , (4100, 608, 3, 6.62, 1.25, 'Allocated', '2016-11-16') + , (4101, 617, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4102, 608, 1, 2.54, 9.62, 'On Order', '2016-10-01') + , (4102, 609, 9, 92.56, 5.98, 'On Order', '2016-10-14') + , (4102, 610, 10, 26.81, 5.9, 'On Order', '2016-08-20') + , (4103, 606, 6, 71.32, 9.88, 'No Stock', '2016-09-10') + , (4103, 608, 1, 73.91, 9.79, 'No Stock', '2016-12-26') + , (4104, 603, 9, 33.85, 4.08, 'Allocated', '2017-03-02') + , (4105, 601, 5, 49.17, 1.99, 'On Order', '2016-11-11') + , (4105, 606, 9, 93.8, 4.48, 'Allocated', '2017-01-06') + , (4106, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4107, 603, 2, 24.95, 3.71, 'On Order', '2016-07-20') + , (4107, 604, 5, 43.75, 1.39, 'No Stock', '2017-01-03') + , (4107, 608, 1, 49.09, 8.72, 'Allocated', '2016-12-19') + , (4107, 616, 8, 26.78, 1.21, 'On Order', '2016-09-23') + , (4108, 604, 8, 36.89, 3.04, 'On Order', '2017-01-01') + , (4108, 619, 1, 6.43, 6.66, 'Allocated', '2016-05-03') + , (4109, 604, 9, 89.19, 9.43, 'No Stock', '2016-10-21') + , (4109, 609, 2, 3.71, 9.12, 'No Stock', '2016-10-23') + , (4110, 605, 3, 61.65, 7.86, 'On Order', '2016-08-05') + , (4110, 606, 2, 63.62, 7.4, 'Allocated', '2016-06-07') + , (4111, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4111, 612, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4111, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4112, 607, 5, 63.7, 9.44, 'On Order', '2017-01-01') + , (4112, 610, 1, 22.54, 8.3, 'On Order', '2016-04-09') + , (4113, 604, 6, 86.01, 4.4, 'Allocated', '2017-01-05') + , (4113, 611, 5, 39.64, 4.58, 'Allocated', '2017-02-26') + , (4113, 615, 3, 22.49, 3.61, 'Allocated', '2016-08-24') + , (4113, 619, 6, 7.6, 6.63, 'On Order', '2016-05-01') + , (4114, 610, 6, 3.77, 4.79, 'Allocated', '2017-01-18') + , (4114, 608, 2, 3.77, 4.79, 'Allocated', '2017-01-18') + , (4114, 609, 3, 3.77, 4.79, 'Allocated', '2017-01-18') + , (4115, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4115, 620, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4116, 610, 5, 54.21, 9.53, 'On Order', '2016-05-11') + , (4116, 620, 3, 54.21, 9.53, 'On Order', '2016-05-11') + , (4116, 615, 1, 54.21, 9.53, 'On Order', '2016-05-11') + , (4117, 603, 7, 91.81, 4.35, 'On Order', '2016-04-18') + , (4117, 610, 9, 79.15, 6.8, 'Allocated', '2017-02-09') + , (4118, 611, 8, 1.55, 8.73, 'On Order', '2016-08-18') + , (4118, 615, 3, 1.55, 8.73, 'On Order', '2016-08-18') + , (4118, 612, 1, 1.55, 8.73, 'On Order', '2016-08-18') + , (4119, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4119, 615, 8, 1.55, 8.73, 'On Order', '2016-08-18') + , (4119, 612, 4, 1.55, 8.73, 'On Order', '2016-08-18') + , (4120, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4120, 612, 2, 1.55, 8.73, 'On Order', '2016-08-18') + , (4120, 611, 8, 1.55, 8.73, 'On Order', '2016-08-18') + , (4121, 602, 3, 7.09, 6.48, 'No Stock', '2016-06-03') + , (4121, 612, 2, 1.55, 8.73, 'On Order', '2016-08-18') + , (4121, 611, 1, 1.55, 8.73, 'On Order', '2016-08-18') + , (4122, 606, 5, 44.99, 1.66, 'No Stock', '2016-05-08') + , (4122, 611, 2, 1.55, 8.73, 'On Order', '2016-08-18') + , (4122, 612, 6, 1.55, 8.73, 'On Order', '2016-08-18') + , (4123, 607, 10, 4.78, 1.32, 'Allocated', '2016-12-28') + , (4124, 604, 1, 18.79, 6.75, 'On Order', '2017-01-05') + , (4125, 605, 9, 59.37, 1.61, 'On Order', '2016-07-24') + , (4125, 608, 1, 72.49, 2.72, 'On Order', '2016-08-22') + , (4126, 610, 10, 13.83, 1.15, 'On Order', '2016-09-29') + , (4126, 615, 10, 71.77, 9.08, 'No Stock', '2017-02-24') + , (4127, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4128, 605, 6, 94.61, 7.16, 'No Stock', '2017-02-09') + , (4128, 616, 3, 4.67, 2.72, 'On Order', '2016-04-06') + , (4129, 610, 5, 73.89, 8.17, 'On Order', '2016-04-30') + , (4130, 608, 6, 47.42, 8.39, 'No Stock', '2017-02-27') + , (4131, 602, 5, 28.62, 6.07, 'No Stock', '2016-03-21') + , (4132, 602, 7, 38.86, 3.58, 'Allocated', '2016-06-21') + , (4132, 604, 4, 89.39, 2.36, 'No Stock', '2016-12-20') + , (4132, 605, 5, 29.97, 9.78, 'No Stock', '2016-08-03') + , (4133, 611, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4133, 613, 2, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4133, 615, 4, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4134, 606, 1, 73.57, 3.21, 'Allocated', '2016-04-07') + , (4134, 608, 1, 65.61, 8.68, 'On Order', '2017-01-14') + , (4135, 603, 2, 7.24, 2.61, 'Allocated', '2017-01-02') + , (4135, 607, 6, 15.99, 6.23, 'No Stock', '2016-12-16') + , (4135, 609, 6, 26.55, 2.9, 'On Order', '2016-11-25') + , (4135, 612, 8, 17.99, 9.59, 'No Stock', '2016-03-25') + , (4136, 606, 10, 16.82, 8.15, 'On Order', '2016-06-22') + , (4137, 605, 2, 39.96, 6.08, 'On Order', '2016-05-22') + , (4138, 620, 6, 4.6, 3.68, 'Allocated', '2016-09-17') + , (4139, 601, 4, 87.74, 7.37, 'No Stock', '2016-11-25') + , (4140, 603, 10, 90.31, 6.8, 'On Order', '2016-05-23') + , (4140, 615, 8, 82.86, 2.49, 'On Order', '2016-12-24') + , (4141, 609, 7, 20.28, 1.51, 'Allocated', '2017-02-10') + , (4142, 608, 7, 55.47, 8.32, 'No Stock', '2016-07-07') + , (4142, 619, 5, 75.63, 1.64, 'Allocated', '2016-08-02') + , (4143, 606, 3, 99.61, 4.9, 'No Stock', '2016-10-25') + , (4144, 604, 6, 80.75, 3.9, 'Allocated', '2016-09-09') + , (4145, 603, 3, 57.97, 8.04, 'On Order', '2016-06-17') + , (4146, 611, 8, 69.7, 6.14, 'On Order', '2016-04-15') + , (4147, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4148, 602, 4, 67.89, 1.73, 'Allocated', '2016-03-26') + , (4149, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4150, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4151, 617, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4151, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4152, 608, 10, 97.82, 9.97, 'No Stock', '2016-07-11') + , (4152, 620, 10, 97.82, 9.97, 'No Stock', '2016-07-11') + , (4153, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4153, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4153, 601, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4153, 613, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4154, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4154, 604, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4155, 606, 7, 42.62, 2.57, 'No Stock', '2017-02-11') + , (4155, 607, 2, 83.04, 5.25, 'On Order', '2016-09-01') + , (4155, 610, 6, 90.56, 6.31, 'On Order', '2016-10-18') + , (4156, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4156, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4156, 601, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4157, 603, 9, 93.09, 5.35, 'Allocated', '2016-08-03') + , (4157, 607, 6, 40.05, 3.9, 'On Order', '2017-01-13') + , (4158, 612, 1, 17.5, 6.29, 'Allocated', '2016-04-14') + , (4158, 611, 1, 17.5, 6.29, 'Allocated', '2016-04-14') + , (4159, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4159, 612, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4160, 610, 8, 42.67, 5.88, 'No Stock', '2017-01-04') + , (4160, 620, 10, 87.78, 4.28, 'Allocated', '2016-11-20') + , (4161, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4161, 611, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4162, 613, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4162, 620, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4163, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4163, 612, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4163, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4164, 607, 6, 80.56, 4.32, 'On Order', '2016-08-17') + , (4164, 608, 6, 80.56, 4.32, 'On Order', '2016-08-17') + , (4164, 617, 6, 80.56, 4.32, 'On Order', '2016-08-17') + , (4165, 604, 8, 72.67, 7.56, 'On Order', '2016-08-09') + , (4165, 603, 8, 72.67, 7.56, 'On Order', '2016-08-09') + , (4165, 614, 8, 72.67, 7.56, 'On Order', '2016-08-09') + , (4166, 601, 3, 34.36, 9.92, 'No Stock', '2016-09-01') + , (4166, 602, 10, 33.99, 5.76, 'Allocated', '2016-05-26') + , (4167, 603, 5, 58.2, 1.14, 'Allocated', '2016-06-20') + , (4167, 608, 1, 20.01, 6.24, 'No Stock', '2017-01-05') + , (4168, 601, 1, 59.45, 7.44, 'On Order', '2016-09-06') + , (4168, 605, 1, 59.45, 7.44, 'On Order', '2016-09-06') + , (4169, 604, 2, 93.43, 2.26, 'No Stock', '2017-01-16') + , (4169, 609, 2, 93.43, 2.26, 'No Stock', '2017-01-16') + , (4169, 607, 2, 93.43, 2.26, 'No Stock', '2017-01-16') + , (4170, 607, 10, 68.27, 9.02, 'No Stock', '2017-02-11') + , (4170, 620, 10, 68.27, 9.02, 'No Stock', '2017-02-11') + , (4171, 610, 10, 49.38, 3.71, 'Allocated', '2016-04-25') + , (4171, 601, 10, 49.38, 3.71, 'Allocated', '2016-04-25') + , (4171, 611, 10, 49.38, 3.71, 'Allocated', '2016-04-25') + , (4171, 613, 10, 49.38, 3.71, 'Allocated', '2016-04-25') + , (4171, 615, 10, 49.38, 3.71, 'Allocated', '2016-04-25') + , (4172, 606, 6, 88.26, 2.95, 'No Stock', '2016-04-11') + , (4172, 609, 7, 60.97, 1.12, 'Allocated', '2016-10-14') + , (4173, 601, 10, 11.22, 9.03, 'On Order', '2017-01-26') + , (4173, 603, 10, 11.22, 9.03, 'On Order', '2017-01-26') + , (4173, 605, 10, 11.22, 9.03, 'On Order', '2017-01-26') + , (4174, 607, 8, 53.95, 6.31, 'No Stock', '2016-04-30') + , (4174, 612, 2, 13.56, 7.15, 'No Stock', '2016-07-08') + , (4175, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4175, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4175, 620, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4176, 615, 2, 70.24, 1.09, 'Allocated', '2017-01-21') + , (4176, 616, 2, 70.24, 1.09, 'Allocated', '2017-01-21') + , (4177, 601, 2, 17.86, 2.99, 'Allocated', '2016-05-07') + , (4177, 604, 8, 18.39, 6.73, 'On Order', '2016-04-05') + , (4178, 605, 9, 23.59, 8.82, 'Allocated', '2016-09-11') + , (4178, 607, 9, 62.59, 7.88, 'No Stock', '2016-04-18') + , (4179, 614, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4180, 602, 7, 48.19, 6.05, 'Allocated', '2016-11-30') + , (4180, 603, 1, 48.19, 6.05, 'Allocated', '2016-11-30') + , (4181, 602, 2, 64.2, 4.74, 'Allocated', '2016-08-16') + , (4181, 603, 3, 41.45, 2.49, 'Allocated', '2016-04-18') + , (4181, 604, 5, 86.42, 6.42, 'No Stock', '2016-05-03') + , (4182, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4183, 615, 1, 68.34, 8.16, 'On Order', '2016-12-22') + , (4184, 601, 2, 95.18, 2.74, 'Allocated', '2016-09-16') + , (4184, 603, 9, 99.41, 9.44, 'No Stock', '2016-07-01') + , (4184, 604, 1, 29.52, 3.48, 'Allocated', '2016-04-02') + , (4185, 602, 2, 22.84, 5.5, 'On Order', '2016-10-20') + , (4185, 611, 10, 34.57, 4.27, 'Allocated', '2017-02-05') + , (4185, 612, 4, 85.32, 5.03, 'Allocated', '2017-03-14') + , (4185, 619, 9, 64.97, 1.57, 'No Stock', '2016-10-19') + , (4186, 605, 2, 80.08, 7.63, 'On Order', '2017-01-31') + , (4187, 602, 9, 87.92, 7.74, 'On Order', '2016-11-13') + , (4187, 616, 3, 73.39, 6.52, 'On Order', '2016-09-15') + , (4188, 604, 8, 30.36, 1.97, 'No Stock', '2016-06-05') + , (4188, 605, 5, 70.95, 6.11, 'On Order', '2016-03-31') + , (4188, 611, 3, 23.18, 8.76, 'On Order', '2016-03-30') + , (4189, 608, 4, 52.23, 3.08, 'No Stock', '2016-04-12') + , (4190, 602, 10, 17.3, 4.18, 'No Stock', '2016-03-29') + , (4190, 615, 6, 34.29, 9.45, 'Allocated', '2016-11-01') + , (4191, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4192, 602, 4, 90.29, 5.09, 'Allocated', '2017-02-14') + , (4192, 605, 8, 1.03, 1.28, 'On Order', '2017-02-14') + , (4192, 615, 1, 11.61, 7.49, 'No Stock', '2016-08-11') + , (4193, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4194, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4195, 617, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4196, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4197, 608, 10, 60.36, 3.99, 'On Order', '2016-10-30') + , (4198, 606, 1, 58.71, 2.32, 'No Stock', '2016-06-26') + , (4199, 602, 8, 12.59, 9.45, 'Allocated', '2016-04-16') + , (4199, 603, 7, 5.5, 2.26, 'No Stock', '2016-11-28') + , (4200, 605, 10, 92.81, 1.0, 'No Stock', '2017-03-07') + , (4201, 606, 3, 46.48, 5.94, 'Allocated', '2016-12-15') + , (4201, 608, 2, 97.29, 5.87, 'No Stock', '2016-09-12') + , (4202, 609, 4, 56.7, 2.07, 'No Stock', '2017-03-11') + , (4202, 608, 4, 56.7, 2.07, 'No Stock', '2017-03-11') + , (4203, 610, 2, 29.12, 6.46, 'No Stock', '2016-10-27') + , (4203, 609, 4, 56.7, 2.07, 'No Stock', '2017-03-11') + , (4204, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4204, 609, 4, 56.7, 2.07, 'No Stock', '2017-03-11') + , (4205, 610, 4, 78.23, 5.95, 'No Stock', '2016-06-21') + , (4205, 609, 4, 56.7, 2.07, 'No Stock', '2017-03-11') + , (4206, 603, 2, 40.49, 6.94, 'On Order', '2017-02-23') + , (4206, 619, 6, 80.19, 3.28, 'No Stock', '2017-01-21') + , (4207, 604, 9, 84.48, 7.01, 'No Stock', '2016-08-17') + , (4207, 605, 9, 41.79, 1.55, 'On Order', '2016-06-27') + , (4207, 610, 5, 12.3, 9.51, 'On Order', '2016-05-17') + , (4208, 603, 7, 37.26, 3.68, 'Allocated', '2016-03-30') + , (4208, 605, 5, 82.65, 2.76, 'On Order', '2016-12-11') + , (4208, 607, 1, 84.88, 8.67, 'No Stock', '2016-04-28') + , (4208, 609, 1, 88.01, 1.98, 'Allocated', '2016-10-04') + , (4208, 610, 6, 88.85, 4.2, 'No Stock', '2016-04-19') + , (4209, 606, 6, 46.31, 8.98, 'Allocated', '2016-04-20') + , (4210, 603, 2, 92.12, 8.78, 'No Stock', '2016-12-11') + , (4210, 609, 7, 70.37, 6.89, 'Allocated', '2016-06-23') + , (4211, 614, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4212, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4213, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4214, 608, 3, 37.43, 5.18, 'Allocated', '2016-05-15') + , (4214, 610, 9, 35.48, 7.16, 'On Order', '2017-02-13') + , (4214, 611, 7, 84.99, 8.17, 'No Stock', '2016-07-08') + , (4215, 610, 5, 4.35, 2.65, 'Allocated', '2016-07-24') + , (4216, 606, 3, 79.91, 8.92, 'Allocated', '2016-05-02') + , (4216, 608, 8, 45.75, 3.7, 'Allocated', '2017-02-24') + , (4216, 615, 1, 55.11, 8.94, 'No Stock', '2016-05-06') + , (4217, 605, 5, 40.67, 3.31, 'On Order', '2016-11-09') + , (4217, 610, 5, 20.0, 8.58, 'On Order', '2016-07-27') + , (4218, 615, 7, 34.14, 8.03, 'Allocated', '2016-11-12') + , (4218, 619, 9, 62.61, 5.74, 'On Order', '2016-11-08') + , (4219, 604, 9, 46.24, 2.42, 'No Stock', '2016-10-31') + , (4219, 613, 7, 26.63, 3.9, 'No Stock', '2016-12-04') + , (4219, 619, 1, 98.58, 7.38, 'No Stock', '2016-08-06') + , (4220, 604, 5, 66.78, 9.28, 'No Stock', '2016-10-09') + , (4220, 609, 6, 62.82, 9.71, 'No Stock', '2016-04-06') + , (4221, 602, 8, 8.44, 1.85, 'Allocated', '2016-11-25') + , (4222, 601, 10, 84.14, 2.59, 'No Stock', '2016-06-25') + , (4222, 604, 9, 39.15, 8.12, 'No Stock', '2016-09-27') + , (4223, 602, 2, 74.35, 9.94, 'Allocated', '2016-04-18') + , (4223, 611, 4, 58.85, 6.75, 'No Stock', '2017-03-04') + , (4224, 618, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4225, 605, 7, 88.08, 8.69, 'On Order', '2016-11-13') + , (4226, 606, 1, 84.22, 3.54, 'On Order', '2017-01-19') + , (4226, 608, 4, 97.1, 4.73, 'On Order', '2016-04-25') + , (4227, 606, 9, 74.37, 1.85, 'On Order', '2016-12-19') + , (4227, 607, 9, 74.37, 1.85, 'On Order', '2016-12-19') + , (4228, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4228, 618, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4228, 610, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4229, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4229, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4230, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4230, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4230, 619, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4231, 611, 6, 36.05, 2.56, 'On Order', '2017-02-12') + , (4231, 618, 6, 36.05, 2.56, 'On Order', '2017-02-12') + , (4232, 615, 8, 16.99, 7.26, 'No Stock', '2016-11-28') + , (4232, 618, 8, 16.99, 7.26, 'No Stock', '2016-11-28') + , (4233, 608, 6, 70.71, 1.75, 'Allocated', '2016-09-29') + , (4233, 610, 6, 70.71, 1.75, 'Allocated', '2016-09-29') + , (4233, 618, 6, 70.71, 1.75, 'Allocated', '2016-09-29') + , (4234, 604, 5, 15.26, 9.54, 'No Stock', '2016-04-06') + , (4234, 619, 5, 15.26, 9.54, 'No Stock', '2016-04-06') + , (4235, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4235, 619, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4236, 607, 8, 46.97, 4.9, 'Allocated', '2017-02-16') + , (4236, 617, 8, 46.97, 4.9, 'Allocated', '2017-02-16') + , (4236, 620, 8, 46.97, 4.9, 'Allocated', '2017-02-16') + , (4237, 602, 1, 27.79, 8.84, 'No Stock', '2016-11-07') + , (4237, 620, 1, 27.79, 8.84, 'No Stock', '2016-11-07') + , (4238, 602, 3, 32.5, 2.63, 'No Stock', '2016-04-09') + , (4238, 608, 8, 88.3, 7.59, 'On Order', '2016-08-18') + , (4239, 606, 7, 99.65, 2.31, 'Allocated', '2017-03-04') + , (4239, 616, 7, 99.65, 2.31, 'Allocated', '2017-03-04') + , (4240, 606, 10, 43.66, 2.48, 'No Stock', '2017-02-05') + , (4240, 609, 2, 56.95, 2.11, 'No Stock', '2016-11-15') + , (4241, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4241, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4241, 620, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4242, 605, 6, 52.37, 8.56, 'No Stock', '2016-06-10') + , (4242, 606, 6, 52.37, 8.56, 'No Stock', '2016-06-10') + , (4242, 607, 6, 52.37, 8.56, 'No Stock', '2016-06-10') + , (4243, 604, 2, 6.33, 1.16, 'No Stock', '2016-04-09') + , (4243, 614, 2, 6.33, 1.16, 'No Stock', '2016-04-09') + , (4243, 610, 2, 6.33, 1.16, 'No Stock', '2016-04-09') + , (4244, 609, 4, 67.62, 7.49, 'On Order', '2016-09-03') + , (4244, 619, 4, 67.62, 7.49, 'On Order', '2016-09-03') + , (4244, 620, 4, 67.62, 7.49, 'On Order', '2016-09-03') + , (4245, 608, 1, 32.47, 9.9, 'Allocated', '2017-03-14') + , (4245, 618, 1, 32.47, 9.9, 'Allocated', '2017-03-14') + , (4245, 620, 1, 32.47, 9.9, 'Allocated', '2017-03-14') + , (4246, 603, 10, 53.94, 3.85, 'No Stock', '2016-06-04') + , (4246, 606, 7, 6.16, 9.37, 'No Stock', '2016-07-05') + , (4246, 607, 3, 27.34, 1.97, 'Allocated', '2016-11-15') + , (4246, 611, 4, 73.06, 1.26, 'No Stock', '2017-02-28') + , (4247, 601, 4, 66.41, 4.54, 'On Order', '2017-02-26') + , (4247, 605, 2, 61.24, 5.9, 'Allocated', '2016-12-15') + , (4248, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4248, 620, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4249, 615, 2, 74.52, 3.88, 'On Order', '2016-06-09') + , (4249, 620, 2, 74.52, 3.88, 'On Order', '2016-06-09') + , (4249, 609, 2, 74.52, 3.88, 'On Order', '2016-06-09') + , (4250, 606, 7, 63.89, 3.39, 'On Order', '2016-12-31') + , (4250, 612, 8, 75.06, 4.19, 'Allocated', '2016-06-26') + , (4251, 602, 1, 1.75, 1.73, 'No Stock', '2016-12-07') + , (4251, 604, 8, 43.98, 1.58, 'Allocated', '2016-07-28') + , (4252, 606, 4, 94.24, 1.31, 'No Stock', '2017-03-14') + , (4252, 619, 10, 41.46, 4.18, 'No Stock', '2017-03-03') + , (4252, 620, 3, 29.91, 4.91, 'On Order', '2016-12-28') + , (4253, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4253, 610, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4254, 610, 3, 5.01, 9.93, 'On Order', '2017-02-03') + , (4254, 620, 2, 5.01, 9.93, 'On Order', '2017-02-03') + , (4254, 612, 3, 5.01, 9.93, 'On Order', '2017-02-03') + , (4255, 610, 7, 45.49, 8.0, 'Allocated', '2016-08-01') + , (4255, 611, 7, 45.49, 8.0, 'Allocated', '2016-08-01') + , (4256, 604, 9, 6.74, 1.84, 'No Stock', '2016-06-13') + , (4256, 612, 4, 42.02, 2.86, 'Allocated', '2016-09-19') + , (4256, 620, 2, 31.71, 4.97, 'Allocated', '2016-10-02') + , (4257, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4257, 610, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4257, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4258, 605, 7, 22.45, 8.41, 'On Order', '2016-06-02') + , (4258, 615, 3, 69.12, 3.65, 'Allocated', '2017-02-27') + , (4258, 619, 4, 62.32, 2.23, 'Allocated', '2017-02-20') + , (4259, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4260, 603, 1, 27.68, 1.99, 'Allocated', '2016-09-20') + , (4260, 604, 3, 59.65, 3.05, 'No Stock', '2016-12-31') + , (4261, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4262, 602, 4, 51.73, 3.06, 'Allocated', '2017-01-17') + , (4263, 612, 4, 18.46, 7.86, 'Allocated', '2016-08-12') + , (4263, 615, 4, 18.46, 7.86, 'Allocated', '2016-08-12') + , (4263, 616, 4, 18.46, 7.86, 'Allocated', '2016-08-12') + , (4264, 604, 8, 82.02, 9.19, 'Allocated', '2016-11-28') + , (4264, 614, 8, 82.02, 9.19, 'Allocated', '2016-11-28') + , (4265, 618, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4265, 620, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4266, 601, 2, 66.57, 6.27, 'Allocated', '2016-09-19') + , (4266, 602, 2, 66.57, 6.27, 'Allocated', '2016-09-19') + , (4267, 601, 4, 44.78, 6.86, 'No Stock', '2016-09-27') + , (4267, 610, 4, 19.08, 6.41, 'No Stock', '2016-12-24') + , (4268, 611, 1, 24.72, 8.14, 'Allocated', '2016-06-08') + , (4268, 612, 1, 24.72, 8.14, 'Allocated', '2016-06-08') + , (4269, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4269, 617, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4269, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4270, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4270, 612, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4270, 620, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4271, 603, 2, 80.47, 4.81, 'Allocated', '2016-05-25') + , (4271, 604, 8, 38.65, 4.02, 'No Stock', '2016-05-09') + , (4272, 610, 7, 66.28, 2.85, 'No Stock', '2016-09-17') + , (4273, 612, 10, 85.38, 8.44, 'No Stock', '2016-12-19') + , (4274, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4275, 610, 8, 1.12, 8.65, 'Allocated', '2016-10-28') + , (4275, 615, 1, 24.01, 5.55, 'No Stock', '2016-12-30') + , (4276, 603, 3, 44.76, 7.28, 'No Stock', '2016-12-28') + , (4277, 610, 9, 40.01, 8.62, 'No Stock', '2016-11-10') + , (4278, 603, 6, 32.0, 1.23, 'Allocated', '2016-12-23') + , (4278, 608, 4, 38.01, 9.45, 'Allocated', '2016-10-05') + , (4278, 609, 5, 31.99, 5.41, 'No Stock', '2016-10-23') + , (4279, 613, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4280, 606, 5, 7.52, 2.76, 'Allocated', '2016-05-27') + , (4280, 609, 4, 37.09, 4.44, 'On Order', '2016-08-10') + , (4281, 610, 9, 37.07, 8.7, 'On Order', '2016-12-28') + , (4281, 611, 2, 37.07, 8.7, 'On Order', '2016-12-28') + , (4281, 612, 1, 37.07, 8.7, 'On Order', '2016-12-28') + , (4282, 601, 1, 19.14, 3.98, 'On Order', '2016-11-09') + , (4282, 606, 3, 88.94, 6.79, 'On Order', '2016-09-29') + , (4282, 609, 6, 25.35, 5.22, 'Allocated', '2016-10-05') + , (4283, 601, 1, 14.78, 3.31, 'On Order', '2016-10-07') + , (4284, 606, 5, 32.57, 7.22, 'On Order', '2016-08-24') + , (4285, 604, 5, 47.88, 3.77, 'No Stock', '2016-12-09') + , (4285, 615, 8, 9.28, 2.13, 'Allocated', '2016-03-27') + , (4286, 620, 5, 63.24, 7.62, 'Allocated', '2016-12-06') + , (4287, 602, 6, 2.9, 9.5, 'On Order', '2016-10-06') + , (4287, 605, 5, 7.63, 2.78, 'Allocated', '2016-08-22') + , (4287, 611, 1, 8.98, 3.39, 'Allocated', '2016-07-18') + , (4287, 614, 3, 34.4, 7.12, 'On Order', '2017-03-04') + , (4288, 604, 6, 57.67, 3.25, 'Allocated', '2016-05-18') + , (4289, 601, 7, 19.32, 7.31, 'On Order', '2017-01-21') + , (4289, 615, 10, 89.16, 2.08, 'No Stock', '2016-06-03') + , (4290, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4291, 601, 1, 68.5, 2.58, 'Allocated', '2016-11-05') + , (4291, 603, 5, 11.27, 5.56, 'Allocated', '2016-06-10') + , (4291, 606, 1, 76.82, 3.31, 'Allocated', '2016-09-27') + , (4292, 608, 10, 27.45, 4.8, 'On Order', '2016-05-12') + , (4292, 610, 9, 16.78, 5.96, 'No Stock', '2016-05-05') + , (4293, 612, 4, 69.21, 2.07, 'Allocated', '2016-08-23') + , (4294, 619, 4, 81.5, 9.13, 'Allocated', '2017-01-20') + , (4295, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4296, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4297, 604, 4, 19.21, 1.7, 'Allocated', '2016-08-20') + , (4297, 606, 4, 71.24, 5.74, 'No Stock', '2016-10-11') + , (4298, 613, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4299, 603, 8, 81.7, 5.69, 'Allocated', '2016-07-06') + , (4300, 601, 5, 35.51, 8.38, 'On Order', '2016-12-23') + , (4300, 607, 5, 46.94, 6.82, 'No Stock', '2016-07-29') + , (4301, 605, 6, 99.32, 1.22, 'Allocated', '2016-09-02') + , (4301, 620, 7, 96.67, 6.9, 'Allocated', '2016-11-24') + , (4302, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4303, 605, 8, 31.92, 5.62, 'On Order', '2016-04-09') + , (4304, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4305, 606, 1, 2.53, 1.15, 'On Order', '2016-12-03') + , (4305, 609, 6, 76.41, 7.87, 'Allocated', '2016-07-05') + , (4305, 612, 3, 31.58, 5.53, 'On Order', '2016-10-01') + , (4306, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4307, 601, 7, 36.63, 3.9, 'On Order', '2016-09-16') + , (4307, 606, 10, 56.47, 8.96, 'No Stock', '2017-02-25') + , (4308, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4309, 606, 6, 84.25, 2.28, 'On Order', '2016-04-07') + , (4310, 605, 7, 15.88, 2.48, 'Allocated', '2017-02-17') + , (4311, 603, 2, 67.26, 6.18, 'No Stock', '2016-05-06') + , (4312, 619, 4, 87.5, 6.57, 'Allocated', '2017-03-14') + , (4313, 602, 3, 87.01, 4.45, 'On Order', '2016-08-30') + , (4313, 610, 7, 54.92, 8.87, 'No Stock', '2017-01-20') + , (4314, 602, 9, 49.19, 2.67, 'Allocated', '2016-07-24') + , (4314, 607, 10, 32.19, 8.12, 'On Order', '2016-11-23') + , (4315, 602, 7, 9.25, 3.78, 'On Order', '2017-01-04') + , (4316, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4317, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4318, 609, 5, 29.17, 3.35, 'No Stock', '2016-11-28') + , (4318, 610, 4, 41.75, 3.7, 'On Order', '2016-09-09') + , (4318, 620, 5, 81.63, 1.49, 'On Order', '2016-04-16') + , (4319, 614, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4320, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4321, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4322, 603, 2, 21.09, 9.37, 'No Stock', '2016-11-29') + , (4323, 608, 8, 24.05, 9.49, 'On Order', '2016-08-12') + , (4324, 607, 7, 83.23, 1.48, 'On Order', '2016-07-10') + , (4325, 608, 10, 35.28, 1.8, 'Allocated', '2016-09-01') + , (4326, 602, 8, 69.18, 4.43, 'No Stock', '2016-07-31') + , (4326, 610, 2, 24.44, 8.1, 'No Stock', '2016-03-29') + , (4327, 608, 3, 22.57, 4.64, 'Allocated', '2016-03-23') + , (4328, 604, 1, 55.53, 3.16, 'On Order', '2016-12-14') + , (4328, 605, 2, 38.78, 6.97, 'Allocated', '2017-03-04') + , (4328, 607, 5, 28.94, 3.59, 'Allocated', '2016-08-01') + , (4329, 603, 6, 65.93, 2.86, 'On Order', '2016-10-25') + , (4330, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4331, 602, 5, 37.37, 6.39, 'No Stock', '2016-03-19') + , (4332, 606, 5, 93.96, 3.31, 'No Stock', '2016-08-09') + , (4332, 610, 5, 3.77, 6.74, 'Allocated', '2016-06-23') + , (4333, 608, 7, 14.29, 3.95, 'On Order', '2016-06-16') + , (4334, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4335, 609, 6, 63.15, 9.3, 'Allocated', '2016-08-31') + , (4336, 613, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4337, 610, 1, 52.98, 5.68, 'Allocated', '2016-03-19') + , (4338, 610, 1, 83.94, 3.56, 'Allocated', '2016-11-03') + , (4339, 604, 10, 78.06, 5.32, 'No Stock', '2016-11-19') + , (4340, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4341, 609, 6, 52.04, 7.63, 'No Stock', '2016-11-25') + , (4341, 615, 1, 9.44, 8.66, 'No Stock', '2016-09-06') + , (4342, 615, 6, 67.41, 8.5, 'Allocated', '2016-08-28') + , (4343, 615, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4344, 610, 10, 61.53, 5.36, 'On Order', '2016-04-30') + , (4345, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4346, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4347, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4348, 608, 1, 96.42, 4.57, 'On Order', '2016-05-14') + , (4348, 610, 3, 38.0, 5.74, 'On Order', '2016-05-30') + , (4348, 611, 6, 38.59, 6.7, 'On Order', '2016-08-16') + , (4349, 613, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4350, 602, 8, 81.72, 7.57, 'Allocated', '2016-08-18') + , (4350, 604, 6, 95.31, 9.43, 'On Order', '2016-12-29') + , (4350, 608, 9, 43.57, 6.54, 'No Stock', '2016-08-24') + , (4351, 602, 1, 37.63, 3.31, 'No Stock', '2016-08-26') + , (4351, 607, 9, 83.22, 2.44, 'No Stock', '2016-04-11') + , (4352, 602, 3, 13.09, 3.98, 'No Stock', '2016-10-03') + , (4352, 603, 9, 88.58, 4.87, 'On Order', '2017-03-05') + , (4352, 614, 4, 47.62, 5.05, 'Allocated', '2016-05-30') + , (4353, 612, 9, 28.8, 1.77, 'Allocated', '2016-03-28') + , (4354, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4355, 607, 4, 20.25, 3.18, 'No Stock', '2016-04-27') + , (4355, 608, 9, 73.3, 5.95, 'Allocated', '2016-12-08') + , (4355, 609, 7, 26.16, 6.88, 'Allocated', '2016-12-09') + , (4356, 614, 8, 93.97, 2.88, 'No Stock', '2016-06-14') + , (4357, 605, 6, 24.39, 5.53, 'No Stock', '2016-07-31') + , (4357, 612, 4, 71.28, 1.94, 'No Stock', '2016-07-08') + , (4358, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4359, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4360, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4361, 601, 6, 45.27, 1.05, 'Allocated', '2016-03-29') + , (4361, 609, 10, 39.75, 1.28, 'On Order', '2016-07-15') + , (4362, 603, 4, 42.92, 5.17, 'No Stock', '2016-09-24') + , (4363, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4364, 602, 8, 90.01, 4.2, 'On Order', '2017-02-09') + , (4365, 601, 2, 92.96, 3.73, 'Allocated', '2016-06-10') + , (4365, 603, 7, 86.67, 9.6, 'On Order', '2016-07-31') + , (4366, 604, 6, 52.01, 2.02, 'No Stock', '2016-09-23') + , (4366, 605, 9, 88.21, 3.68, 'On Order', '2016-08-10') + , (4366, 609, 8, 80.78, 3.99, 'No Stock', '2016-05-07') + , (4367, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4368, 604, 4, 53.46, 4.56, 'No Stock', '2016-09-07') + , (4369, 612, 2, 8.5, 3.86, 'Allocated', '2017-01-20') + , (4370, 603, 9, 46.22, 8.2, 'On Order', '2016-09-02') + , (4370, 604, 10, 10.38, 2.29, 'Allocated', '2016-06-03') + , (4371, 610, 10, 23.33, 4.07, 'On Order', '2016-08-25') + , (4372, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4373, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4374, 604, 3, 29.51, 2.34, 'No Stock', '2017-03-07') + , (4375, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4376, 608, 10, 5.55, 3.21, 'No Stock', '2016-09-14') + , (4377, 602, 9, 91.62, 8.57, 'On Order', '2016-08-26') + , (4378, 603, 8, 74.83, 5.38, 'On Order', '2016-04-11') + , (4379, 605, 9, 53.7, 5.65, 'On Order', '2016-10-29') + , (4380, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4381, 619, 1, 35.54, 3.78, 'Allocated', '2016-07-27') + , (4382, 602, 8, 33.64, 7.95, 'Allocated', '2016-11-05') + , (4382, 606, 4, 68.17, 6.06, 'On Order', '2017-01-22') + , (4383, 613, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4384, 615, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4385, 609, 1, 18.13, 8.94, 'On Order', '2016-03-25') + , (4386, 613, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4387, 602, 8, 86.06, 9.74, 'Allocated', '2016-12-01') + , (4387, 606, 8, 87.31, 7.53, 'No Stock', '2016-06-12') + , (4387, 610, 3, 47.55, 5.2, 'Allocated', '2016-10-06') + , (4388, 602, 4, 5.86, 3.52, 'On Order', '2016-05-09') + , (4388, 603, 8, 24.25, 6.18, 'Allocated', '2016-09-22') + , (4388, 606, 6, 29.46, 2.93, 'Allocated', '2016-09-11') + , (4388, 619, 1, 36.76, 7.37, 'No Stock', '2016-12-29') + , (4389, 602, 1, 94.23, 9.35, 'Allocated', '2016-06-13') + , (4389, 603, 2, 40.15, 8.39, 'No Stock', '2016-08-09') + , (4390, 609, 4, 7.02, 5.61, 'On Order', '2016-11-29') + , (4391, 607, 1, 48.41, 8.97, 'On Order', '2016-07-10') + , (4392, 603, 8, 74.91, 8.23, 'No Stock', '2016-04-07') + , (4393, 611, 4, 55.83, 4.56, 'Allocated', '2016-04-13') + , (4394, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4395, 610, 7, 82.73, 5.09, 'No Stock', '2016-09-27') + , (4395, 617, 6, 26.05, 6.29, 'On Order', '2016-07-24') + , (4396, 605, 9, 66.19, 1.32, 'No Stock', '2017-02-05') + , (4396, 619, 4, 3.15, 1.04, 'On Order', '2016-07-08') + , (4397, 619, 9, 78.52, 7.64, 'No Stock', '2016-08-19') + , (4398, 618, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4399, 610, 7, 85.03, 4.71, 'No Stock', '2016-05-04') + , (4400, 612, 9, 36.85, 6.54, 'On Order', '2016-10-31') + , (4400, 620, 2, 15.9, 5.62, 'On Order', '2016-06-18') + , (4401, 602, 1, 91.01, 4.13, 'No Stock', '2016-09-27') + , (4401, 604, 10, 98.7, 5.27, 'Allocated', '2016-06-03') + , (4402, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4403, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4404, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4405, 604, 3, 46.99, 9.31, 'No Stock', '2016-09-08') + , (4405, 610, 10, 4.94, 1.68, 'On Order', '2016-11-15') + , (4406, 602, 7, 25.84, 7.67, 'On Order', '2016-10-28') + , (4406, 606, 2, 96.43, 5.64, 'No Stock', '2016-11-14') + , (4406, 607, 10, 14.91, 3.88, 'No Stock', '2016-06-18') + , (4407, 606, 9, 20.82, 6.82, 'No Stock', '2016-10-08') + , (4407, 608, 4, 29.19, 7.26, 'No Stock', '2016-12-15') + , (4408, 605, 4, 12.83, 9.29, 'No Stock', '2016-11-20') + , (4408, 615, 4, 89.77, 2.7, 'No Stock', '2017-03-07') + , (4408, 619, 3, 36.44, 8.86, 'No Stock', '2016-12-17') + , (4409, 602, 2, 36.96, 9.73, 'Allocated', '2016-08-19') + , (4409, 611, 7, 94.98, 4.11, 'On Order', '2016-05-17') + , (4410, 603, 7, 13.79, 5.05, 'No Stock', '2016-09-28') + , (4410, 604, 10, 70.24, 4.07, 'No Stock', '2016-10-27') + , (4410, 607, 6, 26.39, 7.8, 'No Stock', '2016-03-21') + , (4411, 602, 7, 3.47, 3.86, 'No Stock', '2017-03-14') + , (4411, 611, 3, 10.43, 3.67, 'On Order', '2016-12-27') + , (4412, 605, 10, 26.07, 6.78, 'Allocated', '2017-02-16') + , (4412, 607, 7, 76.81, 5.67, 'No Stock', '2016-11-26') + , (4412, 610, 3, 98.77, 3.34, 'On Order', '2016-09-29') + , (4413, 617, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4414, 606, 5, 26.01, 4.54, 'On Order', '2016-03-23') + , (4415, 605, 5, 74.86, 1.68, 'No Stock', '2016-09-18') + , (4416, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4417, 601, 6, 66.38, 5.22, 'No Stock', '2016-07-07') + , (4417, 604, 7, 96.99, 4.89, 'No Stock', '2016-09-30') + , (4418, 609, 8, 59.88, 5.52, 'Allocated', '2016-09-03') + , (4419, 604, 4, 54.04, 4.95, 'On Order', '2017-01-05') + , (4420, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4421, 605, 2, 96.34, 1.7, 'On Order', '2016-06-10') + , (4422, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4423, 602, 3, 25.88, 5.34, 'Allocated', '2016-04-19') + , (4423, 605, 5, 4.06, 2.22, 'On Order', '2016-06-21') + , (4423, 608, 9, 20.4, 4.26, 'On Order', '2016-08-17') + , (4424, 605, 8, 44.66, 4.23, 'Allocated', '2016-11-06') + , (4425, 607, 7, 18.91, 6.75, 'On Order', '2016-11-28') + , (4425, 608, 4, 60.11, 4.46, 'No Stock', '2017-02-15') + , (4426, 606, 8, 44.98, 6.5, 'On Order', '2016-11-13') + , (4426, 607, 4, 78.46, 2.91, 'Allocated', '2017-01-26') + , (4427, 604, 2, 61.91, 3.08, 'On Order', '2016-09-01') + , (4427, 607, 10, 53.82, 8.17, 'No Stock', '2016-11-09') + , (4428, 603, 2, 81.15, 5.94, 'Allocated', '2016-12-01') + , (4428, 605, 9, 48.38, 5.26, 'On Order', '2016-07-08') + , (4429, 606, 10, 28.8, 2.75, 'Allocated', '2017-03-03') + , (4430, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4431, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4432, 603, 9, 52.12, 4.42, 'No Stock', '2016-09-03') + , (4433, 601, 4, 34.09, 9.94, 'No Stock', '2016-04-18') + , (4433, 605, 1, 65.04, 7.32, 'On Order', '2016-04-04') + , (4434, 601, 2, 61.28, 1.15, 'On Order', '2016-03-18') + , (4434, 605, 2, 61.28, 1.15, 'On Order', '2016-03-18') + , (4434, 607, 2, 61.28, 1.15, 'On Order', '2016-03-18') + , (4435, 610, 10, 9.19, 7.18, 'On Order', '2016-12-08') + , (4435, 612, 10, 9.19, 7.18, 'On Order', '2016-12-08') + , (4435, 614, 10, 9.19, 7.18, 'On Order', '2016-12-08') + , (4436, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4436, 618, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4436, 620, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4437, 601, 7, 56.48, 9.07, 'Allocated', '2016-05-05') + , (4437, 602, 1, 98.71, 8.08, 'On Order', '2017-03-16') + , (4437, 609, 7, 12.69, 5.56, 'On Order', '2016-12-16') + , (4438, 604, 1, 97.24, 5.43, 'Allocated', '2016-10-22') + , (4438, 605, 1, 97.24, 5.43, 'Allocated', '2016-10-22') + , (4438, 606, 1, 97.24, 5.43, 'Allocated', '2016-10-22') + , (4439, 615, 5, 11.46, 3.07, 'Allocated', '2016-06-10') + , (4439, 618, 1, 97.24, 5.43, 'Allocated', '2016-10-22') + , (4439, 620, 1, 97.24, 5.43, 'Allocated', '2016-10-22') + , (4440, 603, 9, 66.05, 8.7, 'No Stock', '2016-11-08') + , (4440, 616, 1, 97.24, 5.43, 'Allocated', '2016-10-22') + , (4440, 620, 1, 97.24, 5.43, 'Allocated', '2016-10-22') + , (4441, 602, 4, 79.49, 2.54, 'Allocated', '2017-02-19') + , (4441, 609, 4, 88.86, 9.63, 'Allocated', '2016-06-06') + , (4442, 608, 1, 55.66, 2.52, 'Allocated', '2016-09-08') + , (4443, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4444, 602, 4, 52.6, 9.83, 'On Order', '2017-01-18') + , (4444, 605, 8, 81.63, 9.58, 'On Order', '2017-01-27') + , (4445, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4445, 601, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4445, 607, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4446, 602, 3, 76.28, 1.52, 'On Order', '2017-02-17') + , (4446, 606, 5, 18.52, 2.13, 'On Order', '2016-06-28') + , (4447, 609, 9, 54.61, 4.47, 'Allocated', '2016-07-08') + , (4447, 608, 9, 54.61, 4.47, 'Allocated', '2016-07-08') + , (4447, 607, 9, 54.61, 4.47, 'Allocated', '2016-07-08') + , (4448, 605, 2, 69.71, 2.05, 'No Stock', '2016-09-17') + , (4448, 606, 2, 69.71, 2.05, 'No Stock', '2016-09-17') + , (4448, 607, 2, 69.71, 2.05, 'No Stock', '2016-09-17') + , (4449, 618, 6, 35.62, 5.23, 'On Order', '2016-04-15') + , (4449, 619, 10, 86.97, 4.63, 'No Stock', '2016-09-29') + , (4450, 619, 8, 26.14, 4.87, 'On Order', '2016-12-09') + , (4450, 620, 8, 26.14, 4.87, 'On Order', '2016-12-09') + , (4450, 601, 8, 26.14, 4.87, 'On Order', '2016-12-09') + , (4451, 604, 3, 47.48, 1.4, 'Allocated', '2016-09-12') + , (4452, 615, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4453, 606, 2, 4.03, 8.07, 'On Order', '2016-12-10') + , (4454, 619, 7, 55.92, 9.0, 'On Order', '2016-10-07') + , (4455, 602, 10, 50.3, 9.33, 'On Order', '2017-01-11') + , (4455, 603, 1, 7.68, 7.77, 'Allocated', '2016-12-09') + , (4455, 605, 1, 98.23, 3.73, 'Allocated', '2016-07-07') + , (4456, 607, 8, 54.83, 9.57, 'No Stock', '2016-08-16') + , (4456, 612, 7, 97.34, 1.24, 'Allocated', '2016-05-13') + , (4457, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4458, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4459, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4460, 602, 8, 37.95, 8.36, 'No Stock', '2017-01-03') + , (4461, 620, 6, 73.77, 2.02, 'Allocated', '2016-03-27') + , (4462, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4463, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4464, 606, 1, 31.6, 1.18, 'On Order', '2016-09-05') + , (4465, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4466, 620, 10, 37.79, 1.76, 'Allocated', '2016-12-14') + , (4467, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4468, 610, 3, 80.77, 6.87, 'Allocated', '2016-12-30') + , (4469, 602, 3, 19.99, 5.21, 'No Stock', '2016-08-11') + , (4469, 612, 3, 73.21, 4.85, 'On Order', '2017-02-19') + , (4470, 607, 4, 7.7, 5.78, 'No Stock', '2016-04-22') + , (4471, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4472, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4473, 609, 2, 97.6, 1.84, 'Allocated', '2016-05-12') + , (4474, 611, 7, 12.5, 6.31, 'Allocated', '2016-04-18') + , (4475, 603, 2, 44.42, 7.21, 'No Stock', '2017-03-10') + , (4476, 603, 4, 43.47, 5.63, 'No Stock', '2016-09-17') + , (4477, 603, 4, 24.99, 4.46, 'No Stock', '2016-09-10') + , (4478, 606, 1, 29.13, 4.59, 'On Order', '2017-03-04') + , (4478, 619, 4, 58.05, 2.9, 'Allocated', '2017-01-26') + , (4479, 603, 10, 93.2, 7.79, 'On Order', '2016-03-21') + , (4479, 609, 4, 70.36, 9.01, 'Allocated', '2017-02-03') + , (4479, 610, 6, 49.48, 6.79, 'Allocated', '2017-03-01') + , (4480, 608, 9, 11.03, 6.26, 'On Order', '2016-12-10') + , (4481, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4482, 603, 10, 28.92, 8.1, 'No Stock', '2016-05-27') + , (4482, 607, 6, 90.11, 5.74, 'On Order', '2016-04-29') + , (4482, 610, 4, 7.12, 2.89, 'On Order', '2017-01-12') + , (4482, 611, 1, 12.48, 8.56, 'No Stock', '2016-08-16') + , (4482, 614, 10, 55.93, 1.63, 'On Order', '2016-07-09') + , (4482, 618, 1, 33.9, 2.46, 'Allocated', '2016-07-11') + , (4483, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4484, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4485, 605, 7, 99.92, 1.31, 'No Stock', '2016-05-11') + , (4486, 615, 7, 4.39, 3.61, 'Allocated', '2016-06-24') + , (4487, 602, 9, 69.78, 7.96, 'No Stock', '2016-12-29') + , (4487, 607, 5, 24.92, 8.97, 'On Order', '2016-08-15') + , (4487, 615, 4, 72.16, 8.97, 'On Order', '2016-07-28') + , (4488, 601, 9, 64.29, 1.52, 'On Order', '2016-03-30') + , (4488, 609, 10, 66.79, 5.3, 'On Order', '2016-07-11') + , (4489, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4490, 615, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4491, 602, 3, 16.8, 5.22, 'On Order', '2016-09-16') + , (4492, 607, 4, 99.59, 2.45, 'On Order', '2017-03-04') + , (4493, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4494, 615, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4495, 607, 7, 86.05, 5.4, 'Allocated', '2016-10-03') + , (4496, 603, 10, 55.12, 3.71, 'Allocated', '2016-07-06') + , (4497, 607, 7, 27.3, 4.26, 'Allocated', '2017-01-29') + , (4498, 604, 10, 89.58, 1.25, 'Allocated', '2016-03-19') + , (4498, 610, 10, 69.32, 2.48, 'No Stock', '2016-06-24') + , (4499, 601, 4, 56.58, 6.73, 'No Stock', '2017-02-21') + , (4499, 602, 4, 56.58, 6.73, 'No Stock', '2017-02-21') + , (4499, 603, 4, 56.58, 6.73, 'No Stock', '2017-02-21') + , (4500, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4500, 620, 10, 54.41, 7.02, 'No Stock', '2016-11-30') + , (4500, 619, 10, 54.41, 7.02, 'No Stock', '2016-11-30') + , (4501, 620, 10, 54.41, 7.02, 'No Stock', '2016-11-30') + , (4501, 619, 10, 54.41, 7.02, 'No Stock', '2016-11-30') + , (4501, 618, 10, 54.41, 7.02, 'No Stock', '2016-11-30') + , (4502, 603, 2, 27.21, 1.12, 'No Stock', '2016-07-27') + , (4502, 605, 9, 39.93, 3.2, 'On Order', '2016-11-21') + , (4503, 615, 6, 85.1, 8.26, 'No Stock', '2016-05-03') + , (4503, 611, 6, 85.1, 8.26, 'No Stock', '2016-05-03') + , (4503, 612, 6, 85.1, 8.26, 'No Stock', '2016-05-03') + , (4504, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4504, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4504, 619, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4505, 612, 3, 10.99, 1.62, 'Allocated', '2016-09-04') + , (4505, 609, 3, 10.99, 1.62, 'Allocated', '2016-09-04') + , (4505, 601, 3, 10.99, 1.62, 'Allocated', '2016-09-04') + , (4506, 602, 7, 88.03, 1.0, 'On Order', '2016-09-23') + , (4506, 603, 9, 66.78, 1.18, 'Allocated', '2017-02-03') + , (4506, 606, 10, 85.37, 2.21, 'Allocated', '2016-10-03') + , (4506, 609, 9, 84.3, 4.06, 'Allocated', '2016-12-08') + , (4507, 617, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4508, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4509, 611, 2, 99.24, 8.51, 'Allocated', '2016-08-12') + , (4509, 612, 8, 2.41, 3.81, 'On Order', '2016-08-30') + , (4510, 614, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4511, 610, 3, 73.48, 8.4, 'Allocated', '2016-12-06') + , (4511, 611, 4, 7.29, 6.91, 'Allocated', '2016-12-23') + , (4511, 616, 5, 26.16, 6.26, 'On Order', '2016-12-09') + , (4512, 614, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4513, 614, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4514, 605, 6, 86.17, 7.08, 'No Stock', '2017-01-25') + , (4514, 610, 6, 71.51, 6.3, 'No Stock', '2017-01-23') + , (4515, 617, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4516, 618, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4517, 604, 10, 55.76, 7.34, 'Allocated', '2016-10-23') + , (4517, 619, 2, 1.09, 7.07, 'Allocated', '2016-08-19') + , (4518, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4519, 609, 9, 61.39, 7.83, 'On Order', '2016-07-01') + , (4520, 619, 9, 72.61, 9.55, 'No Stock', '2016-10-08') + , (4521, 610, 10, 19.38, 3.54, 'Allocated', '2016-12-08') + , (4521, 615, 8, 54.35, 7.77, 'No Stock', '2017-01-31') + , (4522, 602, 9, 68.98, 6.79, 'No Stock', '2016-11-28') + , (4523, 606, 9, 79.86, 1.63, 'No Stock', '2016-05-25') + , (4524, 602, 9, 91.58, 3.46, 'On Order', '2017-03-12') + , (4525, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4526, 603, 9, 56.56, 7.64, 'On Order', '2016-10-14') + , (4526, 604, 4, 80.67, 2.83, 'No Stock', '2016-07-29') + , (4526, 610, 5, 88.8, 2.86, 'On Order', '2017-02-25') + , (4527, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4528, 605, 4, 73.64, 8.81, 'Allocated', '2017-01-26') + , (4528, 609, 4, 64.56, 4.09, 'On Order', '2016-10-03') + , (4529, 616, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4530, 602, 9, 70.97, 4.73, 'On Order', '2016-12-07') + , (4531, 606, 10, 26.53, 2.83, 'No Stock', '2016-03-25') + , (4531, 615, 5, 79.05, 6.82, 'Allocated', '2016-08-04') + , (4531, 619, 4, 36.14, 7.09, 'No Stock', '2016-03-26') + , (4532, 605, 5, 6.28, 9.94, 'No Stock', '2017-03-13') + , (4532, 610, 8, 17.25, 3.68, 'Allocated', '2016-05-28') + , (4533, 615, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4534, 606, 8, 60.95, 9.33, 'Allocated', '2016-07-15') + , (4534, 607, 10, 49.84, 8.32, 'No Stock', '2016-04-24') + , (4535, 610, 6, 17.67, 1.81, 'On Order', '2017-03-01') + , (4535, 619, 3, 88.0, 3.12, 'Allocated', '2016-07-11') + , (4536, 615, 5, 88.08, 4.93, 'Allocated', '2016-12-04') + , (4537, 611, 2, 14.77, 4.04, 'No Stock', '2016-03-25') + , (4538, 603, 6, 3.51, 4.54, 'Allocated', '2016-04-21') + , (4539, 603, 7, 6.58, 4.8, 'Allocated', '2016-05-14') + , (4540, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4540, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4540, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4541, 603, 5, 37.47, 2.89, 'On Order', '2016-04-07') + , (4541, 607, 4, 35.17, 5.44, 'No Stock', '2017-01-07') + , (4541, 615, 2, 83.62, 4.01, 'Allocated', '2016-11-22') + , (4542, 605, 10, 92.43, 3.27, 'On Order', '2017-01-23') + , (4542, 601, 10, 92.43, 3.27, 'On Order', '2017-01-23') + , (4542, 603, 10, 92.43, 3.27, 'On Order', '2017-01-23') + , (4543, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4543, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4543, 619, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4544, 611, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4544, 610, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4544, 609, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4545, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4545, 604, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4545, 606, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4546, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4546, 606, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4546, 608, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4547, 606, 4, 81.81, 9.44, 'No Stock', '2016-05-14') + , (4547, 602, 4, 81.81, 9.44, 'No Stock', '2016-05-14') + , (4547, 603, 4, 81.81, 9.44, 'No Stock', '2016-05-14') + , (4548, 614, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4548, 611, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4548, 615, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4549, 605, 9, 24.12, 7.26, 'No Stock', '2016-08-22') + , (4549, 606, 7, 6.19, 4.68, 'Allocated', '2016-09-02') + , (4550, 609, 8, 49.04, 7.62, 'On Order', '2016-06-10') + , (4550, 610, 10, 92.51, 4.84, 'No Stock', '2017-02-24') + , (4551, 601, 3, 85.1, 2.45, 'Allocated', '2016-07-08') + , (4551, 602, 3, 69.43, 1.31, 'No Stock', '2017-03-15') + , (4551, 610, 1, 19.38, 8.43, 'No Stock', '2016-11-09') + , (4552, 601, 2, 91.69, 8.12, 'On Order', '2016-06-03') + , (4552, 613, 3, 41.15, 6.38, 'No Stock', '2016-04-11') + , (4553, 603, 1, 5.22, 8.43, 'On Order', '2016-10-28') + , (4554, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4555, 607, 6, 77.16, 3.07, 'No Stock', '2016-04-29') + , (4555, 612, 9, 81.31, 9.81, 'On Order', '2017-01-24') + , (4556, 615, 10, 65.81, 7.25, 'Allocated', '2016-11-07') + , (4557, 603, 1, 5.01, 4.57, 'No Stock', '2016-09-05') + , (4557, 606, 3, 29.35, 8.67, 'On Order', '2016-09-14') + , (4558, 601, 3, 29.62, 7.16, 'No Stock', '2016-11-06') + , (4559, 620, 2, 87.83, 7.93, 'On Order', '2016-11-09') + , (4560, 610, 7, 9.51, 8.01, 'On Order', '2016-08-22') + , (4561, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4562, 610, 9, 15.1, 6.8, 'Allocated', '2016-08-27') + , (4562, 611, 3, 71.09, 1.26, 'No Stock', '2016-07-12') + , (4563, 618, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4564, 602, 2, 6.68, 6.29, 'Allocated', '2016-03-19') + , (4565, 603, 7, 81.01, 2.82, 'Allocated', '2017-03-06') + , (4565, 606, 8, 99.68, 6.28, 'No Stock', '2016-04-27') + , (4566, 614, 7, 57.79, 4.48, 'No Stock', '2016-11-02') + , (4567, 604, 7, 94.42, 5.46, 'No Stock', '2016-05-18') + , (4567, 605, 1, 61.75, 1.31, 'Allocated', '2016-04-14') + , (4567, 608, 10, 25.99, 4.85, 'On Order', '2016-05-01') + , (4567, 620, 9, 62.17, 4.66, 'Allocated', '2016-06-11') + , (4568, 606, 8, 66.92, 1.1, 'Allocated', '2016-10-02') + , (4568, 607, 10, 95.6, 9.17, 'On Order', '2016-05-04') + , (4568, 608, 6, 81.57, 6.24, 'No Stock', '2017-01-24') + , (4569, 601, 10, 96.56, 6.33, 'Allocated', '2016-07-22') + , (4570, 610, 6, 98.15, 2.57, 'No Stock', '2016-06-28') + , (4571, 604, 8, 5.15, 2.51, 'No Stock', '2016-07-11') + , (4572, 603, 2, 59.21, 2.46, 'Allocated', '2016-11-18') + , (4573, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4574, 615, 3, 14.81, 9.61, 'On Order', '2016-05-04') + , (4575, 608, 10, 79.25, 7.08, 'On Order', '2016-11-19') + , (4575, 611, 10, 79.25, 7.08, 'On Order', '2016-11-19') + , (4575, 615, 10, 79.25, 7.08, 'On Order', '2016-11-19') + , (4576, 607, 7, 31.78, 2.05, 'On Order', '2016-03-17') + , (4576, 608, 7, 31.78, 2.05, 'On Order', '2016-03-17') + , (4576, 610, 7, 31.78, 2.05, 'On Order', '2016-03-17') + , (4577, 604, 5, 92.54, 6.26, 'On Order', '2016-04-22') + , (4577, 603, 5, 92.54, 6.26, 'On Order', '2016-04-22') + , (4577, 601, 5, 92.54, 6.26, 'On Order', '2016-04-22') + , (4578, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4578, 602, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4578, 603, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4579, 615, 10, 70.19, 5.85, 'No Stock', '2016-09-11') + , (4579, 616, 10, 70.19, 5.85, 'No Stock', '2016-09-11') + , (4579, 620, 10, 70.19, 5.85, 'No Stock', '2016-09-11') + , (4580, 601, 1, 15.44, 3.76, 'No Stock', '2016-04-08') + , (4580, 603, 1, 15.44, 3.76, 'No Stock', '2016-04-08') + , (4580, 605, 1, 15.44, 3.76, 'No Stock', '2016-04-08') + , (4580, 609, 1, 15.44, 3.76, 'No Stock', '2016-04-08') + , (4581, 607, 8, 42.4, 9.73, 'On Order', '2016-06-04') + , (4581, 610, 9, 79.73, 3.87, 'On Order', '2016-04-20') + , (4581, 611, 5, 78.01, 3.65, 'On Order', '2016-03-17') + , (4581, 616, 5, 50.56, 5.24, 'No Stock', '2016-07-06') + , (4582, 609, 7, 65.99, 9.4, 'No Stock', '2016-05-22') + , (4582, 607, 7, 65.99, 9.4, 'No Stock', '2016-05-22') + , (4582, 606, 7, 65.99, 9.4, 'No Stock', '2016-05-22') + , (4583, 604, 9, 19.92, 6.51, 'Allocated', '2016-04-13') + , (4583, 610, 1, 19.4, 8.3, 'On Order', '2016-12-08') + , (4584, 617, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4584, 620, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4584, 613, 1, 10.00, 1.00, 'No Stock', '2016-12-14') + , (4585, 602, 2, 90.57, 2.52, 'Allocated', '2016-05-22') + , (4585, 610, 10, 44.26, 3.84, 'On Order', '2016-12-27') + , (4586, 604, 2, 56.61, 9.64, 'Allocated', '2017-02-23') + , (4586, 612, 7, 24.24, 7.68, 'On Order', '2016-04-04') + , (4587, 615, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4587, 611, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4587, 612, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4588, 616, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4588, 601, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4588, 602, 1, 10.00, 1.00, 'Allocated', '2016-12-14') + , (4589, 601, 5, 52.25, 4.47, 'Allocated', '2016-07-02') + , (4589, 603, 9, 72.27, 4.97, 'On Order', '2016-04-03') + , (4590, 610, 3, 46.2, 6.71, 'Allocated', '2016-12-16') + , (4590, 615, 5, 52.0, 5.26, 'On Order', '2016-06-01') + , (4591, 601, 1, 96.52, 2.39, 'No Stock', '2017-01-16') + , (4591, 605, 8, 19.56, 9.68, 'On Order', '2016-09-15') + , (4592, 609, 10, 30.76, 3.2, 'No Stock', '2016-05-02') + , (4592, 619, 1, 48.47, 6.13, 'On Order', '2016-07-19') + , (4593, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4593, 619, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4593, 620, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4594, 616, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4594, 617, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4594, 618, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4594, 620, 1, 10.00, 1.00, 'On Order', '2016-12-14') + , (4595, 605, 1, 50.28, 8.15, 'Allocated', '2017-02-19') + , (4595, 601, 1, 50.28, 8.15, 'Allocated', '2017-02-19') + , (4595, 602, 1, 50.28, 8.15, 'Allocated', '2017-02-19') + , (4596, 605, 6, 95.17, 7.53, 'On Order', '2016-09-11') + , (4596, 609, 10, 82.11, 4.38, 'No Stock', '2016-11-17') + , (4597, 608, 9, 96.25, 4.8, 'No Stock', '2016-07-02') + , (4597, 605, 9, 96.25, 4.8, 'No Stock', '2016-07-02') + , (4597, 601, 9, 96.25, 4.8, 'No Stock', '2016-07-02') + , (4598, 603, 5, 69.02, 6.1, 'No Stock', '2016-12-23') + , (4598, 608, 5, 69.02, 6.1, 'No Stock', '2016-12-23') + , (4598, 610, 5, 69.02, 6.1, 'No Stock', '2016-12-23') + , (4599, 603, 9, 40.91, 6.68, 'On Order', '2016-12-27') + , (4599, 607, 9, 40.91, 6.68, 'On Order', '2016-12-27') + , (4599, 609, 9, 40.91, 6.68, 'On Order', '2016-12-27') + , (4600, 611, 5, 22.93, 8.87, 'Allocated', '2016-06-16') + , (4600, 615, 5, 22.93, 8.87, 'Allocated', '2016-06-16') + , (4600, 612, 5, 22.93, 8.87, 'Allocated', '2016-06-16'); + +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(9999,'AppName','String','Url',1,'EnesApp'); +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10000,'TimeOut','Integer','61',1,'EnesApp'); +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10001,'Count','Double','100000',1,'SampleApp'); +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10002,'IsChanged','Boolean','false',1,'EnesApp'); diff --git a/SpringBootCrudApi/src/main/resources/db-init/configuration/configuration-h2.sql b/SpringBootCrudApi/src/main/resources/db-init/configuration/configuration-h2.sql index 8d799a2..6d5a34e 100644 --- a/SpringBootCrudApi/src/main/resources/db-init/configuration/configuration-h2.sql +++ b/SpringBootCrudApi/src/main/resources/db-init/configuration/configuration-h2.sql @@ -1,4 +1,4 @@ -insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(9999,'AppName','String','Url',1,'EnesApp'); -insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10000,'TimeOut','Integer','61',1,'EnesApp'); -insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10001,'Count','Double','100000',1,'SampleApp'); -insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10002,'IsChanged','Boolean','false',1,'EnesApp'); +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(9999,'AppName','String','Url',1,'EnesApp'); +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10000,'TimeOut','Integer','61',1,'EnesApp'); +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10001,'Count','Double','100000',1,'SampleApp'); +insert into configuration(ID,NAME,TYPE_,VALUE_,ISACTIVE,APPLICATION_NAME) values(10002,'IsChanged','Boolean','false',1,'EnesApp'); diff --git a/SpringBootCrudApi/src/main/resources/i18n/messages_en.properties b/SpringBootCrudApi/src/main/resources/i18n/messages_en.properties index cab3c77..58ce985 100644 --- a/SpringBootCrudApi/src/main/resources/i18n/messages_en.properties +++ b/SpringBootCrudApi/src/main/resources/i18n/messages_en.properties @@ -1,2 +1,2 @@ -entity.notFound = 1;Specified entity does not exist +entity.notFound = 1;Specified entity does not exist missing.field = 2;Mandatory fields can not be empty \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/resources/i18n/messages_tr.properties b/SpringBootCrudApi/src/main/resources/i18n/messages_tr.properties index 36f8b57..10c446e 100644 --- a/SpringBootCrudApi/src/main/resources/i18n/messages_tr.properties +++ b/SpringBootCrudApi/src/main/resources/i18n/messages_tr.properties @@ -1,2 +1,2 @@ -entity.notFound = 1;Belirtilen nesne sistemde bulunmuyor +entity.notFound = 1;Belirtilen nesne sistemde bulunmuyor missing.field = 2;Zorunlu alanlar bos gecilemez \ No newline at end of file diff --git a/SpringBootCrudApi/src/main/resources/schema.sql b/SpringBootCrudApi/src/main/resources/schema.sql new file mode 100644 index 0000000..ffc3e5a --- /dev/null +++ b/SpringBootCrudApi/src/main/resources/schema.sql @@ -0,0 +1,251 @@ +DROP SCHEMA IF EXISTS A_TEAM; + +CREATE SCHEMA A_TEAM; +USE A_TEAM; + +/* Table: user (Application Users) */ +CREATE TABLE user +( + user_id NVARCHAR(20) NOT NULL, + password NVARCHAR(20) NOT NULL, + first_name NVARCHAR(50), + last_name NVARCHAR(50), + email NVARCHAR(70), + security_provider_id INT, + default_customer_id INT, + company NVARCHAR(50), + phone NVARCHAR(20), + address1 NVARCHAR(100), + address2 NVARCHAR(100), + country NVARCHAR(20), + postal NVARCHAR(20), + role NVARCHAR(20), + other_roles NVARCHAR(80), + is_active INT, + is_blocked INT, + secret_question NVARCHAR(100), + secret_answer NVARCHAR(100), + enable_beta_testing INT, + enable_renewal INT, + CONSTRAINT user_id PRIMARY KEY (user_id) +); + +/* Table: customers */ +CREATE TABLE customers +( + id INT NOT NULL, + last_name VARCHAR(50), + first_name VARCHAR(50), + email VARCHAR(50), + company VARCHAR(50), + phone VARCHAR(25), + address1 VARCHAR(150), + address2 VARCHAR(150), + city VARCHAR(50), + state VARCHAR(50), + postal_code VARCHAR(15), + country VARCHAR(50), + PRIMARY KEY (id) +); + +/* Table: employees */ +CREATE TABLE employees +( + id INT NOT NULL, + last_name VARCHAR(50), + first_name VARCHAR(50), + email VARCHAR(50), + avatar VARCHAR(250), + job_title VARCHAR(50), + department VARCHAR(50), + manager_id INT, + phone VARCHAR(25), + address1 VARCHAR(150), + address2 VARCHAR(150), + city VARCHAR(50), + state VARCHAR(50), + postal_code VARCHAR(15), + country VARCHAR(50), + PRIMARY KEY (id) +); + +/* Table: orders */ +CREATE TABLE orders +( + id INT NOT NULL, + employee_id INT, + customer_id INT, + order_date DATETIME, + shipped_date DATETIME, + ship_name VARCHAR(50), + ship_address1 VARCHAR(150), + ship_address2 VARCHAR(150), + ship_city VARCHAR(50), + ship_state VARCHAR(50), + ship_postal_code VARCHAR(50), + ship_country VARCHAR(50), + shipping_fee DECIMAL(19, 4) NULL DEFAULT '0.0000', + payment_type VARCHAR(50), + paid_date DATETIME, + order_status VARCHAR(25), + PRIMARY KEY (id) +); + +/* Table: order_details */ +CREATE TABLE order_items +( + order_id INT NOT NULL, + book_id INT, + quantity DECIMAL(18, 4) NOT NULL DEFAULT '0.0000', + unit_price DECIMAL(19, 4) NULL DEFAULT '0.0000', + discount DECIMAL(19, 4) NULL DEFAULT '0.0000', + order_item_status VARCHAR(25), + date_allocated DATETIME, + PRIMARY KEY (order_id, book_id) +); + +/* Table: books */ +CREATE TABLE books +( + id INT NOT NULL, + book_code VARCHAR(25), + book_name VARCHAR(50), + description VARCHAR(250), + standard_cost DECIMAL(19, 4) NULL DEFAULT '0.0000', + list_price DECIMAL(19, 4) NOT NULL DEFAULT '0.0000', + target_level INT, + reorder_level INT, + minimum_reorder_quantity INT, + quantity_per_unit VARCHAR(50), + discontinued INT NOT NULL DEFAULT '0', + category VARCHAR(50), + PRIMARY KEY (id) +); + + +/* Foreign Key: orders */ +ALTER TABLE orders + ADD CONSTRAINT fk_orders__customers FOREIGN KEY (customer_id) REFERENCES customers (id) ON DELETE CASCADE ; +ALTER TABLE orders + ADD CONSTRAINT fk_orders__employees FOREIGN KEY (employee_id) REFERENCES employees (id) ON DELETE CASCADE ; +/* Foreign Key: order_items */ +ALTER TABLE order_items + ADD CONSTRAINT fk_order_items__orders FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE ; +ALTER TABLE order_items + ADD CONSTRAINT fk_order_items__books FOREIGN KEY (book_id) REFERENCES books (id) ON DELETE CASCADE ; + +/* Views */ +CREATE OR REPLACE VIEW order_info AS +select o.id as order_id + , o.order_date + , o.order_status + , o.paid_date + , o.payment_type + , o.shipped_date + , o.shipping_fee + , o.ship_name + , o.ship_address1 + , o.ship_address2 + , o.ship_city + , o.ship_state + , o.ship_postal_code + , o.ship_country + , o.customer_id + , o.employee_id + , concat(c.first_name, ' ', c.last_name) as customer_name + , c.phone customer_phone + , c.email customer_email + , c.company as customer_company + , concat(e.first_name, ' ', e.last_name) as employee_name + , e.department employee_department + , e.job_title employee_job_title +From orders o + , employees e + , customers c +where o.employee_id = e.id + and o.customer_id = c.id; + +CREATE OR REPLACE VIEW order_details AS +select oi.order_id + , oi.book_id + , oi.quantity + , oi.unit_price + , oi.discount + , oi.date_allocated + , oi.order_item_status + , o.order_date + , o.order_status + , o.paid_date + , o.payment_type + , o.shipped_date + , o.shipping_fee + , o.ship_name + , o.ship_address1 + , o.ship_address2 + , o.ship_city + , o.ship_state + , o.ship_postal_code + , o.ship_country + , p.book_code + , p.book_name + , p.category + , p.description + , p.list_price + , o.customer_id + , concat(c.first_name, ' ', c.last_name) as customer_name + , c.phone as customer_phone + , c.email as customer_email + , c.company as customer_company + , o.employee_id + , concat(e.first_name, ' ', e.last_name) as employee_name + , e.department as employee_department + , e.job_title as employee_job_title +From orders o + , books p + , order_items oi + , employees e + , customers c +where oi.order_id = o.id + and oi.book_id = p.id + and o.employee_id = e.id + and o.customer_id = c.id; + +CREATE OR REPLACE VIEW customer_orders AS +select o.order_date + , o.order_status + , o.paid_date + , o.payment_type + , o.shipping_fee + , o.customer_id + , c.first_name customer_first_name + , c.last_name customer_last_name + , c.phone customer_phone + , c.email customer_email + , c.company +from orders o, + customers c +where o.customer_id = c.id; + +CREATE OR REPLACE VIEW employee_orders AS +select o.order_date + , o.order_status + , o.paid_date + , o.payment_type + , o.shipping_fee + , o.employee_id + , e.first_name employee_first_name + , e.last_name employee_last_name + , e.email employee_email + , e.department +from orders o, + employees e +where o.customer_id = e.id; + +CREATE TABLE configuration ( + ID LONG, + NAME VARCHAR(25), + TYPE_ VARCHAR(25), + VALUE_ VARCHAR(25), + ISACTIVE INT, + APPLICATION_NAME VARCHAR(25) +); \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseIT.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseIT.java index 02a677b..06ce2f9 100644 --- a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseIT.java +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseIT.java @@ -1,13 +1,13 @@ -package com.cengenes.configuration.api.conf; - -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) -public abstract class BaseIT { -} +package com.cengenes.configuration.api.conf; + +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) +public abstract class BaseIT { +} diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseMockitoTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseMockitoTest.java index 73d3453..12eef38 100644 --- a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseMockitoTest.java +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/conf/BaseMockitoTest.java @@ -1,8 +1,8 @@ -package com.cengenes.configuration.api.conf; - -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public abstract class BaseMockitoTest { -} +package com.cengenes.configuration.api.conf; + +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public abstract class BaseMockitoTest { +} diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/AbstractTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/AbstractTest.java new file mode 100644 index 0000000..d74c71c --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/AbstractTest.java @@ -0,0 +1,43 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.DynamicConfigurationServiceApplication; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import java.io.IOException; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = DynamicConfigurationServiceApplication.class) +@WebAppConfiguration(value = "") +public abstract class AbstractTest { + protected MockMvc mvc; + + @Autowired + WebApplicationContext webApplicationContext; + + protected void setUp(){ + mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); + } + + protected String mapToJson(Object obj) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.writeValueAsString(obj); + } + + protected T mapFromJson(String json, Class clazz) + throws JsonParseException, JsonMappingException, IOException { + + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(json, clazz); + } +} diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/BookControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/BookControllerTest.java new file mode 100644 index 0000000..579608c --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/BookControllerTest.java @@ -0,0 +1,195 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.book.Book; +import com.cengenes.configuration.api.entity.book.BookResponse; +import com.cengenes.configuration.api.entity.customer.Customer; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.junit.Assert.*; + +public class BookControllerTest extends AbstractTest { + private String uri = "/api/books"; + + @Override + @Before + public void setUp() { + super.setUp(); + } + + @Test + public void getProductsByPage_WithoutAuthorizationHeader_shouldReturnHTTP400() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void getProductsByPage_WithoutRequestParams_shouldReturnANonEmptyListOfProducts() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode listNode = jsonNode.get("items"); + Book[] books = super.mapFromJson(listNode.toString(), Book[].class); + assertTrue(books.length > 0); + } + + @Test + public void getProductsByPage_withPageRequestParam_shouldReturnCorrectPage() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("page", "2") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode pageNode = jsonNode.get("currentPageNumber"); + assertEquals("2", pageNode.toString()); + } + + @Test + public void getProductsByPage_withSizeRequestParam_shouldReturnCorrectSize() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("size", "30") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode sizeNode = jsonNode.get("pageSize"); + assertEquals("30", sizeNode.toString()); + } + + @Test + public void getProductsByPage_withRequestParams_shouldReturnANonEmptyListOfProducts() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode listNode = jsonNode.get("items"); + Book[] books = super.mapFromJson(listNode.toString(), Book[].class); + assertTrue(books.length > 0); + } + + @Test + public void addNewProduct_withCorrectAuthorizationHeaderAndExistingProduct_shouldReturnErrorOperationResponse() throws Exception{ + Book book = new Book(); + book.setId(602); + book.setBookName("asd"); + book.setListPrice(6.5); + book.setDiscontinued(0); + String inputJson = super.mapToJson(book); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("ERROR", operationResponse.getOperationStatus().toString()); + } + + @Test + public void addNewProduct_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + Book book = new Book(); + book.setId(1); + book.setBookName("asd"); + book.setListPrice(6.5); + book.setDiscontinued(0); + String inputJson = super.mapToJson(book); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void addNewProduct_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception{ + Book book = new Book(); + book.setId(1); + book.setBookName("asd"); + book.setListPrice(6.5); + book.setDiscontinued(0); + String inputJson = super.mapToJson(book); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .header("Authorization", "asd:asd") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void addNewProduct_withCorrectAuthorizationHeaderAndNonExistingProduct_shouldReturnSuccessOperationResponse() throws Exception{ + Book book = new Book(); + book.setId(1); + book.setBookName("asd"); + book.setListPrice(6.5); + book.setDiscontinued(0); + String inputJson = super.mapToJson(book); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("SUCCESS", operationResponse.getOperationStatus().toString()); + } + + @Test + public void deleteProduct_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/601")).andReturn(); + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void deleteProduct_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/601").header("Authorization", "asd:asd")).andReturn(); + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void deleteProduct_withCorrectAuthorizationHeader_shouldReturnSuccessOperationResponse() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/601").header("Authorization", "demo:demo")).andReturn(); + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("SUCCESS", operationResponse.getOperationStatus().toString()); + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/BookStatsControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/BookStatsControllerTest.java new file mode 100644 index 0000000..59ddb83 --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/BookStatsControllerTest.java @@ -0,0 +1,54 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.book.BookResponse; +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.junit.Assert.*; + +public class BookStatsControllerTest extends AbstractTest{ + + @Override + @Before + public void setUp() { + super.setUp(); + } + + @Test + public void getProductStatsByQuantity_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + String uri = "/api/book-stats-by-quantity"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void getProductStatsByQuantity_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception{ + String uri = "/api/book-stats-by-quantity"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "asd:asd") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void getProductStatsByQuantity_withCorrectAuthorizationHeader_shouldNotReturnEmptyList() throws Exception{ + String uri = "/api/book-stats-by-quantity"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + BookResponse bookResponse = super.mapFromJson(content, BookResponse.class); + assertFalse(bookResponse.getItems().isEmpty()); + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ConfigurationAngularControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ConfigurationAngularControllerTest.java new file mode 100644 index 0000000..de28a7c --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ConfigurationAngularControllerTest.java @@ -0,0 +1,32 @@ +package com.cengenes.configuration.api.controller; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class ConfigurationAngularControllerTest { + + @Test + public void getConfigurationById() { + } + + @Test + public void saveConfiguration() { + } + + @Test + public void findAllConfigurations() { + } + + @Test + public void getAllActiveConfigurationsByApplicationName() { + } + + @Test + public void updateConfiguration() { + } + + @Test + public void delete() { + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ConfigurationControllerIT.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ConfigurationControllerIT.java index ca90e21..0d0ff7c 100644 --- a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ConfigurationControllerIT.java +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ConfigurationControllerIT.java @@ -1,114 +1,114 @@ -package com.cengenes.configuration.api.controller; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.MatcherAssert.assertThat; - -import java.util.List; - -import org.hamcrest.MatcherAssert; -import org.hamcrest.Matchers; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import com.cengenes.configuration.api.conf.BaseIT; -import com.cengenes.configuration.api.dto.ConfigurationDto; -import com.cengenes.configuration.api.dto.Response; -import com.cengenes.configuration.api.entity.Configuration; -import com.cengenes.configuration.api.repository.ConfigurationRepository; -import com.cengenes.configuration.api.types.RequestStatus; - -public class ConfigurationControllerIT extends BaseIT { - - @Autowired - TestRestTemplate testRestTemplate; - - @Autowired - ConfigurationRepository confgurationRepository; - - @Test - public void should_create_configuration() throws Exception { - // Given - ConfigurationDto request = this.createSampleConfigurationLoginformation(); - - // When - ResponseEntity responseEntity = testRestTemplate.postForEntity("/api/ang/configuration/", - request, Configuration.class); - - // Then - assertThat(responseEntity).isNotNull(); - assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.CREATED); - - Configuration configurationResponse = responseEntity.getBody(); - assertThat(configurationResponse).isNotNull(); - assertThat(configurationResponse.getId()).isNotNull(); - } - - @Test - public void should_return_all_configurations() { - - confgurationRepository.save(new Configuration()); - confgurationRepository.save(new Configuration()); - confgurationRepository.save(new Configuration()); - - ResponseEntity entityList = testRestTemplate.getForEntity("/api/ang/configurations", List.class); - - assertThat(entityList).isNotNull(); - assertThat(entityList.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entityList.getBody().size()).isGreaterThan(2); - } - - @Test - public void should_post_return_406_for_missing_fields() throws Exception { - - // given - ConfigurationDto request = new ConfigurationDto(); - - // when - ResponseEntity responseEntity = testRestTemplate.postForEntity("/api/ang/configuration", request, - Response.class); - - // then - assertThat(responseEntity.getBody().getStatus(), equalTo(RequestStatus.FAILURE)); - assertThat(responseEntity.getBody().getErrorCode(), equalTo("2")); - assertThat(responseEntity.getBody().getErrorMessage(), equalTo("Zorunlu alanlar bos gecilemez")); - assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.NOT_ACCEPTABLE); - MatcherAssert.assertThat(responseEntity.getStatusCode(), Matchers.equalTo(HttpStatus.NOT_ACCEPTABLE)); - - } - - @Test - public void should_get_return_404_for_invalid_application_name() throws Exception { - - // given - final String WRONG_APP_NAME = "Invalid App"; - - // when - ResponseEntity responseEntity = testRestTemplate - .getForEntity("/api/ang/configuration/appname/" + WRONG_APP_NAME, Response.class); - - // then - assertThat(responseEntity.getBody().getStatus(), equalTo(RequestStatus.FAILURE)); - assertThat(responseEntity.getBody().getErrorCode(), equalTo("1")); - assertThat(responseEntity.getBody().getErrorMessage(), equalTo("Belirtilen nesne sistemde bulunmuyor")); - assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); - MatcherAssert.assertThat(responseEntity.getStatusCode(), Matchers.equalTo(HttpStatus.NOT_FOUND)); - - } - - private final ConfigurationDto createSampleConfigurationLoginformation() { - - ConfigurationDto request = new ConfigurationDto(); - request.setApplicationName("Trendyol"); - request.setName("Time Out"); - request.setType("Integer"); - request.setValue("6161"); - request.setIsActive(false); - - return request; - } - -} +package com.cengenes.configuration.api.controller; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import java.util.List; + +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import com.cengenes.configuration.api.conf.BaseIT; +import com.cengenes.configuration.api.dto.ConfigurationDto; +import com.cengenes.configuration.api.dto.Response; +import com.cengenes.configuration.api.entity.Configuration; +import com.cengenes.configuration.api.repository.ConfigurationRepository; +import com.cengenes.configuration.api.types.RequestStatus; + +public class ConfigurationControllerIT extends BaseIT { + + @Autowired + TestRestTemplate testRestTemplate; + + @Autowired + ConfigurationRepository confgurationRepository; + + @Test + public void should_create_configuration() throws Exception { + // Given + ConfigurationDto request = this.createSampleConfigurationLoginformation(); + + // When + ResponseEntity responseEntity = testRestTemplate.postForEntity("/api/ang/configuration/", + request, Configuration.class); + + // Then + assertThat(responseEntity).isNotNull(); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.CREATED); + + Configuration configurationResponse = responseEntity.getBody(); + assertThat(configurationResponse).isNotNull(); + assertThat(configurationResponse.getId()).isNotNull(); + } + + @Test + public void should_return_all_configurations() { + + confgurationRepository.save(new Configuration()); + confgurationRepository.save(new Configuration()); + confgurationRepository.save(new Configuration()); + + ResponseEntity entityList = testRestTemplate.getForEntity("/api/ang/configurations", List.class); + + assertThat(entityList).isNotNull(); + assertThat(entityList.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(entityList.getBody().size()).isGreaterThan(2); + } + + @Test + public void should_post_return_406_for_missing_fields() throws Exception { + + // given + ConfigurationDto request = new ConfigurationDto(); + + // when + ResponseEntity responseEntity = testRestTemplate.postForEntity("/api/ang/configuration", request, + Response.class); + + // then + assertThat(responseEntity.getBody().getStatus(), equalTo(RequestStatus.FAILURE)); + assertThat(responseEntity.getBody().getErrorCode(), equalTo("2")); + assertThat(responseEntity.getBody().getErrorMessage(), equalTo("Zorunlu alanlar bos gecilemez")); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.NOT_ACCEPTABLE); + MatcherAssert.assertThat(responseEntity.getStatusCode(), Matchers.equalTo(HttpStatus.NOT_ACCEPTABLE)); + + } + + @Test + public void should_get_return_404_for_invalid_application_name() throws Exception { + + // given + final String WRONG_APP_NAME = "Invalid App"; + + // when + ResponseEntity responseEntity = testRestTemplate + .getForEntity("/api/ang/configuration/appname/" + WRONG_APP_NAME, Response.class); + + // then + assertThat(responseEntity.getBody().getStatus(), equalTo(RequestStatus.FAILURE)); + assertThat(responseEntity.getBody().getErrorCode(), equalTo("1")); + assertThat(responseEntity.getBody().getErrorMessage(), equalTo("Belirtilen nesne sistemde bulunmuyor")); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); + MatcherAssert.assertThat(responseEntity.getStatusCode(), Matchers.equalTo(HttpStatus.NOT_FOUND)); + + } + + private final ConfigurationDto createSampleConfigurationLoginformation() { + + ConfigurationDto request = new ConfigurationDto(); + request.setApplicationName("Trendyol"); + request.setName("Time Out"); + request.setType("Integer"); + request.setValue("6161"); + request.setIsActive(false); + + return request; + } + +} diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ControllerExceptionHandlerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ControllerExceptionHandlerTest.java new file mode 100644 index 0000000..8208316 --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/ControllerExceptionHandlerTest.java @@ -0,0 +1,16 @@ +package com.cengenes.configuration.api.controller; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class ControllerExceptionHandlerTest { + + @Test + public void handleNotFoundException() { + } + + @Test + public void handleMissingFieldException() { + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/CustomerControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/CustomerControllerTest.java new file mode 100644 index 0000000..74c55d9 --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/CustomerControllerTest.java @@ -0,0 +1,185 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.customer.Customer; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + + +import static org.junit.Assert.*; + +public class CustomerControllerTest extends AbstractTest{ + private String uri = "/api/customers"; + + @Override + @Before + public void setUp() { + super.setUp(); + } + + @Test + public void getCustomersByPage_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void getCustomersByPage_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(this.uri).header("Authorization", "asd:asd")).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void getCustomersByPage_withCorrectAuthorizationHeader_shouldNotReturnAnEmptyListOfCustomers() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode listNode = jsonNode.get("items"); + Customer[] customers = super.mapFromJson(listNode.toString(), Customer[].class); + assertTrue(customers.length > 0); + } + + @Test + public void getCustomersByPage_withPageRequestParam_shouldReturnCorrectPage() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("page", "2") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode pageNode = jsonNode.get("currentPageNumber"); + assertEquals("2", pageNode.toString()); + } + + @Test + public void getCustomersByPage_withSizeRequestParam_shouldReturnCorrectSize() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("size", "30") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode sizeNode = jsonNode.get("pageSize"); + assertEquals("30", sizeNode.toString()); + } + + @Test + public void addNewCustomer_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void addNewCustomer_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(this.uri).header("Authorization", "asd:asd")).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void addNewCustomer_withCorrectAuthorizationHeader_shouldNotSucceed() throws Exception { + Customer customer = new Customer(); + customer.setId(1); + customer.setFirstName("test"); + String inputJson = super.mapToJson(customer); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("ERROR", operationResponse.getOperationStatus().toString()); + } + + @Test + public void addNewCustomer_withCorrectAuthorizationHeader_shouldSucceed() throws Exception { + Customer customer = new Customer(); + customer.setId(0); + customer.setFirstName("test"); + String inputJson = super.mapToJson(customer); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("SUCCESS", operationResponse.getOperationStatus().toString()); + } + + @Test + public void deleteCustomer_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/1") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void deleteCustomer_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(this.uri).header("Authorization", "asd:asd")).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void deleteCustomer_withCorrectAuthorizationHeader_shouldNotSucceed() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/0") + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("ERROR", operationResponse.getOperationStatus().toString()); + } + + @Test + public void deleteCustomer_withCorrectAuthorizationHeader_shouldSucceed() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/1") + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("SUCCESS", operationResponse.getOperationStatus().toString()); + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/EmployeeControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/EmployeeControllerTest.java new file mode 100644 index 0000000..d398be5 --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/EmployeeControllerTest.java @@ -0,0 +1,190 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.employee.Employee; +import com.cengenes.configuration.api.entity.response.OperationResponse; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.junit.Assert.*; + +public class EmployeeControllerTest extends AbstractTest{ + private String uri = "/api/employees"; + + @Override + @Before + public void setUp() { + super.setUp(); + } + + @Test + public void getEmployeesByPage_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void getEmployeesByPage_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(this.uri).header("Authorization", "asd:asd")).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void getEmployeesByPage_withCorrectAuthorizationHeader_shouldNotReturnAnEmptyListOfCustomers() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode listNode = jsonNode.get("items"); + Employee[] employees = super.mapFromJson(listNode.toString(), Employee[].class); + assertTrue(employees.length > 0); + } + + @Test + public void getEmployeesByPage_withPageRequestParam_shouldReturnCorrectPage() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("page", "2") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode pageNode = jsonNode.get("currentPageNumber"); + assertEquals("2", pageNode.toString()); + } + + @Test + public void getEmployeesByPage_withSizeRequestParam_shouldReturnCorrectSize() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("size", "30") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode sizeNode = jsonNode.get("pageSize"); + assertEquals("30", sizeNode.toString()); + } + + @Test + public void addNewEmployee_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void addNewEmployee_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception { + Employee employee = new Employee(); + employee.setId(200); + String inputJson = mapToJson(employee); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(this.uri) + .header("Authorization", "asd:asd") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void addNewEmployee_withCorrectAuthorizationHeader_shouldNotSucceed() throws Exception { + Employee employee = new Employee(); + employee.setId(201); + employee.setFirstName("test"); + String inputJson = super.mapToJson(employee); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("SUCCESS", operationResponse.getOperationStatus().toString()); + } + + @Test + public void addNewEmployee_withCorrectAuthorizationHeader_shouldSucceed() throws Exception { + Employee employee = new Employee(); + employee.setId(200); + employee.setFirstName("test"); + String inputJson = super.mapToJson(employee); + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(uri) + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .content(inputJson)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("SUCCESS", operationResponse.getOperationStatus().toString()); + } + + @Test + public void deleteEmployee_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/200") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void deleteEmployee_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(this.uri+"/201").header("Authorization", "asd:asd")).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void deleteEmployee_withCorrectAuthorizationHeader_shouldNotSucceed() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/200") + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("ERROR", operationResponse.getOperationStatus().toString()); + } + + @Test + public void deleteEmployee_withCorrectAuthorizationHeader_shouldSucceed() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.delete(uri+"/201") + .header("Authorization", "demo:demo") + .contentType(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OperationResponse operationResponse = super.mapFromJson(content, OperationResponse.class); + assertEquals("SUCCESS", operationResponse.getOperationStatus().toString()); + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/OrderControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/OrderControllerTest.java new file mode 100644 index 0000000..0d5bf5c --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/OrderControllerTest.java @@ -0,0 +1,130 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.order.OrderDetailResponse; +import com.cengenes.configuration.api.entity.order.OrderInfo; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.junit.Assert.*; + +public class OrderControllerTest extends AbstractTest{ + + @Override + @Before + public void setUp() { + super.setUp(); + } + + @Test + public void getOrdersByPage_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + String uri = "/api/orders"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void getOrdersByPage_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception{ + String uri = "/api/orders"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "asd:asd") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void getOrdersByPage_withCorrectAuthorizationHeader_shouldNotReturnAnEmptyListOfOrders() throws Exception{ + String uri = "/api/orders"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode listNode = jsonNode.get("items"); + OrderInfo[] orders = super.mapFromJson(listNode.toString(), OrderInfo[].class); + assertTrue(orders.length > 0); + } + + @Test + public void getOrdersByPage_withPageRequestParam_shouldReturnCorrectPage() throws Exception { + String uri = "/api/orders"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("page", "2") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode pageNode = jsonNode.get("currentPageNumber"); + assertEquals("2", pageNode.toString()); + } + + @Test + public void getOrdersByPage_withSizeRequestParam_shouldReturnCorrectSize() throws Exception { + String uri = "/api/orders"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .param("size", "30") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(content); + JsonNode sizeNode = jsonNode.get("pageSize"); + assertEquals("30", sizeNode.toString()); + } + + + @Test + public void getOrderDetail_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + String uri = "/api/orders"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void getOrderDetail_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception{ + String uri = "/api/orders"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "asd:asd") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void getOrderDetail_withCorrectAuthorizationHeader_shouldNotReturnAnEmptyListOfOrders() throws Exception{ + String uri = "/api/order-details"; + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + OrderDetailResponse orderDetailResponse = super.mapFromJson(content, OrderDetailResponse.class); + assertFalse(orderDetailResponse.getItems().isEmpty()); + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/OrderStatsControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/OrderStatsControllerTest.java new file mode 100644 index 0000000..bf2528a --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/OrderStatsControllerTest.java @@ -0,0 +1,52 @@ +package com.cengenes.configuration.api.controller; + +import com.cengenes.configuration.api.entity.response.SingleDataSeriesResponse; +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.junit.Assert.*; + +public class OrderStatsControllerTest extends AbstractTest{ + private String uri = "/api/order-stats"; + + @Override + @Before + public void setUp() { + super.setUp(); + } + + @Test + public void getOrderStats_withoutAuthorizationHeader_shouldReturnHTTP400() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void getOrderStats_withIncorrectAuthorizationHeader_shouldReturnHTTP401() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri+"?type=status") + .header("Authorization", "asd:asd") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void getOrderStats_withCorrectAuthorizationHeader_shouldReturnANotEmptyListOfOrder() throws Exception{ + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri+"?type=status") + .header("Authorization", "demo:demo") + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + SingleDataSeriesResponse singleDataSeriesResponse = super.mapFromJson(content, SingleDataSeriesResponse.class); + assertFalse(singleDataSeriesResponse.getItems().isEmpty()); + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/UserControllerTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/UserControllerTest.java new file mode 100644 index 0000000..71ebf1b --- /dev/null +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/controller/UserControllerTest.java @@ -0,0 +1,44 @@ +package com.cengenes.configuration.api.controller; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.junit.Assert.*; + +public class UserControllerTest extends AbstractTest { + private String uri = "/api/user/checkLogin"; + + @Override + @Before + public void setUp() { + super.setUp(); + } + + @Test + public void authorizationHeaderIsMissing() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(this.uri) + .accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(400, status); + } + + @Test + public void incorrectAuthorizationHeader() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(this.uri).header("Authorization", "asd:asd")).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(401, status); + } + + @Test + public void correctAuthorizationHeader() throws Exception { + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(this.uri).header("Authorization", "demo:demo")).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + } +} \ No newline at end of file diff --git a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/service/ConfigurationServiceTest.java b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/service/ConfigurationServiceTest.java index da5b6c1..feb3ecf 100644 --- a/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/service/ConfigurationServiceTest.java +++ b/SpringBootCrudApi/src/test/java/com/cengenes/configuration/api/service/ConfigurationServiceTest.java @@ -1,154 +1,154 @@ -package com.cengenes.configuration.api.service; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.when; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import com.cengenes.configuration.api.conf.BaseMockitoTest; -import com.cengenes.configuration.api.converter.ConfigurationDtoToEntityConverter; -import com.cengenes.configuration.api.converter.ConfigurationEntityToDtoConverter; -import com.cengenes.configuration.api.dto.ConfigurationDto; -import com.cengenes.configuration.api.entity.Configuration; -import com.cengenes.configuration.api.repository.ConfigurationRepository; -import com.cengenes.configuration.api.service.imp.ConfigurationServiceImp; -import com.cengenes.configuration.api.validator.ConfigurationInfoValidator; - -public class ConfigurationServiceTest extends BaseMockitoTest { - - @InjectMocks - private ConfigurationServiceImp configurationService; - - @Mock - public ConfigurationRepository configurationRepository; - - @Mock - private ConfigurationEntityToDtoConverter entityToDtoConverter; - - @Mock - private ConfigurationDtoToEntityConverter dtoToEntityConverter; - - @Mock - private ConfigurationInfoValidator configurationInfoValidator; - - public Configuration entity; - - @Before - public void before() { - - entity = new Configuration(); - entity.setApplicationName("Trendyol"); - entity.setName("Time Out"); - entity.setType("Integer"); - entity.setValue("6161"); - entity.setIsActive(true); - } - - @Test - public void should_return_one_configuration() { - - when(configurationRepository.findOne(1L)).thenReturn(entity); - when(entityToDtoConverter.convert(entity)).thenReturn(createSampleConfigurationLoginformation()); - - ConfigurationDto foundedConfiguration = configurationService.findOne(1L); - - assertThat(foundedConfiguration).isNotNull(); - assertThat(foundedConfiguration.getApplicationName()).isEqualTo(entity.getApplicationName()); - assertThat(foundedConfiguration.getName()).isNotNull(); - assertThat(foundedConfiguration.getName()).isEqualTo(entity.getName()); - assertThat(foundedConfiguration.getType()).isEqualTo(entity.getType()); - assertThat(foundedConfiguration.getValue()).isEqualTo(entity.getValue()); - assertThat(foundedConfiguration.getIsActive()).isEqualTo(entity.getIsActive()); - } - - @Test - public void should_save_configuration() { - - when(configurationRepository.save(entity)).thenReturn(entity); - when(dtoToEntityConverter.convert(any(ConfigurationDto.class))).thenReturn(entity); - - Configuration foundedConfiguration = configurationService.save(createSampleConfigurationLoginformation()); - - assertThat(foundedConfiguration).isNotNull(); - assertThat(foundedConfiguration.getApplicationName()).isEqualTo(entity.getApplicationName()); - assertThat(foundedConfiguration.getName()).isNotNull(); - assertThat(foundedConfiguration.getName()).isEqualTo(entity.getName()); - assertThat(foundedConfiguration.getType()).isEqualTo(entity.getType()); - assertThat(foundedConfiguration.getValue()).isEqualTo(entity.getValue()); - assertThat(foundedConfiguration.getIsActive()).isEqualTo(entity.getIsActive()); - } - - @Test - public void should_find_active_application_configration() { - - final String APP_NAME = "Trendyol"; - - List mockEntityList = new ArrayList<>(); - mockEntityList.add(createSampleConfigurationEntity()); - - when(configurationRepository.findByApplicationNameAndIsActive(APP_NAME, Boolean.TRUE)).thenReturn(mockEntityList); - when(entityToDtoConverter.convert(any(Configuration.class))) - .thenReturn(createSampleConfigurationLoginformation()); - - List foundedConfigurationList = configurationService.findActiveApplicationsByName(APP_NAME); - - assertThat(foundedConfigurationList).isNotNull(); - assertThat(foundedConfigurationList.size()).isEqualTo(1); - assertThat(foundedConfigurationList.get(0).getName()).isEqualTo(entity.getName()); - assertThat(foundedConfigurationList.get(0).getType()).isEqualTo(entity.getType()); - assertThat(foundedConfigurationList.get(0).getValue()).isEqualTo(entity.getValue()); - assertThat(foundedConfigurationList.get(0).getIsActive()).isEqualTo(true); - } - - @Test - public void should_find_all_configurations() { - - Configuration entity_I = createSampleConfigurationEntity(); - entity_I.setApplicationName("X"); - - Configuration entity_II = createSampleConfigurationEntity(); - entity_II.setApplicationName("Y"); - - List configurationList = new ArrayList<>(); - configurationList.add(entity_I); - configurationList.add(entity_II); - - when(configurationRepository.findAll()).thenReturn(configurationList); - - List returnedList = configurationService.findAll(); - assertThat(returnedList).isNotNull(); - assertThat(returnedList.size()).isEqualTo(2); - - } - - private final ConfigurationDto createSampleConfigurationLoginformation() { - - ConfigurationDto request = new ConfigurationDto(); - request.setApplicationName("Trendyol"); - request.setName("Time Out"); - request.setType("Integer"); - request.setValue("6161"); - request.setIsActive(true); - - return request; - } - - private final Configuration createSampleConfigurationEntity() { - - Configuration entity = new Configuration(); - entity.setApplicationName("Trendyol"); - entity.setName("Time Out"); - entity.setType("Integer"); - entity.setValue("6161"); - entity.setIsActive(true); - - return entity; - } -} +package com.cengenes.configuration.api.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import com.cengenes.configuration.api.conf.BaseMockitoTest; +import com.cengenes.configuration.api.converter.ConfigurationDtoToEntityConverter; +import com.cengenes.configuration.api.converter.ConfigurationEntityToDtoConverter; +import com.cengenes.configuration.api.dto.ConfigurationDto; +import com.cengenes.configuration.api.entity.Configuration; +import com.cengenes.configuration.api.repository.ConfigurationRepository; +import com.cengenes.configuration.api.service.imp.ConfigurationServiceImp; +import com.cengenes.configuration.api.validator.ConfigurationInfoValidator; + +public class ConfigurationServiceTest extends BaseMockitoTest { + + @InjectMocks + private ConfigurationServiceImp configurationService; + + @Mock + public ConfigurationRepository configurationRepository; + + @Mock + private ConfigurationEntityToDtoConverter entityToDtoConverter; + + @Mock + private ConfigurationDtoToEntityConverter dtoToEntityConverter; + + @Mock + private ConfigurationInfoValidator configurationInfoValidator; + + public Configuration entity; + + @Before + public void before() { + + entity = new Configuration(); + entity.setApplicationName("Trendyol"); + entity.setName("Time Out"); + entity.setType("Integer"); + entity.setValue("6161"); + entity.setIsActive(true); + } + + @Test + public void should_return_one_configuration() { + + when(configurationRepository.getOne(1L)).thenReturn(entity); + when(entityToDtoConverter.convert(entity)).thenReturn(createSampleConfigurationLoginformation()); + + ConfigurationDto foundedConfiguration = configurationService.findOne(1L); + + assertThat(foundedConfiguration).isNotNull(); + assertThat(foundedConfiguration.getApplicationName()).isEqualTo(entity.getApplicationName()); + assertThat(foundedConfiguration.getName()).isNotNull(); + assertThat(foundedConfiguration.getName()).isEqualTo(entity.getName()); + assertThat(foundedConfiguration.getType()).isEqualTo(entity.getType()); + assertThat(foundedConfiguration.getValue()).isEqualTo(entity.getValue()); + assertThat(foundedConfiguration.getIsActive()).isEqualTo(entity.getIsActive()); + } + + @Test + public void should_save_configuration() { + + when(configurationRepository.save(entity)).thenReturn(entity); + when(dtoToEntityConverter.convert(any(ConfigurationDto.class))).thenReturn(entity); + + Configuration foundedConfiguration = configurationService.save(createSampleConfigurationLoginformation()); + + assertThat(foundedConfiguration).isNotNull(); + assertThat(foundedConfiguration.getApplicationName()).isEqualTo(entity.getApplicationName()); + assertThat(foundedConfiguration.getName()).isNotNull(); + assertThat(foundedConfiguration.getName()).isEqualTo(entity.getName()); + assertThat(foundedConfiguration.getType()).isEqualTo(entity.getType()); + assertThat(foundedConfiguration.getValue()).isEqualTo(entity.getValue()); + assertThat(foundedConfiguration.getIsActive()).isEqualTo(entity.getIsActive()); + } + + @Test + public void should_find_active_application_configration() { + + final String APP_NAME = "Trendyol"; + + List mockEntityList = new ArrayList<>(); + mockEntityList.add(createSampleConfigurationEntity()); + + when(configurationRepository.findByApplicationNameAndIsActive(APP_NAME, Boolean.TRUE)).thenReturn(mockEntityList); + when(entityToDtoConverter.convert(any(Configuration.class))) + .thenReturn(createSampleConfigurationLoginformation()); + + List foundedConfigurationList = configurationService.findActiveApplicationsByName(APP_NAME); + + assertThat(foundedConfigurationList).isNotNull(); + assertThat(foundedConfigurationList.size()).isEqualTo(1); + assertThat(foundedConfigurationList.get(0).getName()).isEqualTo(entity.getName()); + assertThat(foundedConfigurationList.get(0).getType()).isEqualTo(entity.getType()); + assertThat(foundedConfigurationList.get(0).getValue()).isEqualTo(entity.getValue()); + assertThat(foundedConfigurationList.get(0).getIsActive()).isEqualTo(true); + } + + @Test + public void should_find_all_configurations() { + + Configuration entity_I = createSampleConfigurationEntity(); + entity_I.setApplicationName("X"); + + Configuration entity_II = createSampleConfigurationEntity(); + entity_II.setApplicationName("Y"); + + List configurationList = new ArrayList<>(); + configurationList.add(entity_I); + configurationList.add(entity_II); + + when(configurationRepository.findAll()).thenReturn(configurationList); + + List returnedList = configurationService.findAll(); + assertThat(returnedList).isNotNull(); + assertThat(returnedList.size()).isEqualTo(2); + + } + + private final ConfigurationDto createSampleConfigurationLoginformation() { + + ConfigurationDto request = new ConfigurationDto(); + request.setApplicationName("Trendyol"); + request.setName("Time Out"); + request.setType("Integer"); + request.setValue("6161"); + request.setIsActive(true); + + return request; + } + + private final Configuration createSampleConfigurationEntity() { + + Configuration entity = new Configuration(); + entity.setApplicationName("Trendyol"); + entity.setName("Time Out"); + entity.setType("Integer"); + entity.setValue("6161"); + entity.setIsActive(true); + + return entity; + } +}