foreman_openscap 4.3.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/foreman_openscap/version.rb +1 -1
  3. data/package.json +48 -0
  4. data/webpack/components/EmptyState.js +67 -0
  5. data/webpack/components/IndexLayout.js +35 -0
  6. data/webpack/components/IndexLayout.scss +3 -0
  7. data/webpack/components/IndexTable/IndexTableHelper.js +9 -0
  8. data/webpack/components/IndexTable/index.js +66 -0
  9. data/webpack/components/RuleSeverity/RuleSeverity.scss +3 -0
  10. data/webpack/components/RuleSeverity/RuleSeverity.test.js +13 -0
  11. data/webpack/components/RuleSeverity/__snapshots__/RuleSeverity.test.js.snap +41 -0
  12. data/webpack/components/RuleSeverity/i_severity-critical.svg +61 -0
  13. data/webpack/components/RuleSeverity/i_severity-high.svg +61 -0
  14. data/webpack/components/RuleSeverity/i_severity-low.svg +62 -0
  15. data/webpack/components/RuleSeverity/i_severity-med.svg +62 -0
  16. data/webpack/components/RuleSeverity/i_unknown.svg +33 -0
  17. data/webpack/components/RuleSeverity/index.js +33 -0
  18. data/webpack/components/withLoading.js +68 -0
  19. data/webpack/global_index.js +5 -0
  20. data/webpack/graphql/queries/cves.gql +18 -0
  21. data/webpack/graphql/queries/ovalContents.gql +11 -0
  22. data/webpack/graphql/queries/ovalPolicies.gql +12 -0
  23. data/webpack/graphql/queries/ovalPolicy.gql +21 -0
  24. data/webpack/helpers/commonHelper.js +1 -0
  25. data/webpack/helpers/globalIdHelper.js +13 -0
  26. data/webpack/helpers/pageParamsHelper.js +31 -0
  27. data/webpack/helpers/pathsHelper.js +22 -0
  28. data/webpack/helpers/tableHelper.js +9 -0
  29. data/webpack/index.js +8 -0
  30. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsIndex.js +45 -0
  31. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js +38 -0
  32. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.fixtures.js +106 -0
  33. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.test.js +75 -0
  34. data/webpack/routes/OvalContents/OvalContentsIndex/index.js +7 -0
  35. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesIndex.js +46 -0
  36. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js +44 -0
  37. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.fixtures.js +61 -0
  38. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.test.js +78 -0
  39. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/index.js +7 -0
  40. data/webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTab.js +48 -0
  41. data/webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTable.js +63 -0
  42. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShow.js +79 -0
  43. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShowHelper.js +39 -0
  44. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.fixtures.js +78 -0
  45. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.test.js +112 -0
  46. data/webpack/routes/OvalPolicies/OvalPoliciesShow/index.js +35 -0
  47. data/webpack/routes/routes.js +28 -0
  48. data/webpack/testHelper.js +64 -0
  49. metadata +48 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0bc31c3bac07804311899dc01dd5dbe0c0500cc8981eefa1ec867316d0465fb8
4
- data.tar.gz: 4b00712959d937f44fa2da29de505704e153277043bf319c84fa0d4a44f8d5ac
3
+ metadata.gz: 279a2b2f763e2b1f7c333a66e812b359f02c67a91626577e6212b4d69f093e08
4
+ data.tar.gz: 4d2116542474424bb0c7918c7c877b626bf725420e3b704794d401a68688b73f
5
5
  SHA512:
6
- metadata.gz: 90f233717d65a7bf4d1793251a27d6f7268e81a93e4dd06b86258e8f6f5b108d0a886fe8ebe455766eccfe10a55076d9b61bd211165620f5d899cd94147d203c
7
- data.tar.gz: b77f05c002ef0fb3fdcc4050974bc5b4390d2af5322aac601ef912172391e0bfb3f391e4166ad94b7e701156e9b84f640dcda03d434323d5e2921e50974f6109
6
+ metadata.gz: ee9601dfb4fc7ea3a6f88ad3ec238824aa30e169e5d74e6177e4d926cf60f5e715fe17faea13c0d2119ae5a28b91ac9b8c4ccb3b6e52228fa66ffb7462b3d388
7
+ data.tar.gz: c04a455c484bd2bc6dfc631626f0f8dc3ef88c727695eaf0af2f8cde5c8c033bf6ce5094f5a14c140fdde006a1769b87095754f1fa9c3f40328161b926daafff
@@ -1,3 +1,3 @@
1
1
  module ForemanOpenscap
2
- VERSION = "4.3.0".freeze
2
+ VERSION = "4.3.1".freeze
3
3
  end
data/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "foreman_openscap",
3
+ "version": "0.1.0",
4
+ "description": "Foreman plug-in for managing security compliance reports",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "lint": "tfm-lint --plugin -d /webpack",
8
+ "test": "tfm-test --plugin --config jest.config.js",
9
+ "test:watch": "tfm-test --plugin --watchAll --config jest.config.js",
10
+ "test:current": "tfm-test --plugin --watch --config jest.config.js",
11
+ "publish-coverage": "tfm-publish-coverage",
12
+ "stories": "tfm-stories --plugin",
13
+ "stories:build": "tfm-build-stories --plugin",
14
+ "create-react-component": "yo react-domain"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/theforeman/foreman_openscap.git"
19
+ },
20
+ "bugs": {
21
+ "url": "https://projects.theforeman.org/projects/foreman_openscap/issues"
22
+ },
23
+ "peerDependencies": {
24
+ "@theforeman/vendor": ">= 4.13.2"
25
+ },
26
+ "devDependencies": {
27
+ "@apollo/react-testing": "^4.0.0",
28
+ "@babel/core": "^7.7.0",
29
+ "@testing-library/dom": "^7.30.4",
30
+ "@testing-library/jest-dom": "^5.11.9",
31
+ "@testing-library/react": "^11.2.5",
32
+ "@testing-library/user-event": "^13.1.2",
33
+ "@theforeman/builder": "^8.4.1",
34
+ "@theforeman/eslint-plugin-foreman": "8.4.1",
35
+ "@theforeman/find-foreman": "^8.4.1",
36
+ "@theforeman/stories": "^8.4.1",
37
+ "@theforeman/test": "^8.4.1",
38
+ "@theforeman/vendor-dev": "^8.4.1",
39
+ "babel-eslint": "^10.0.3",
40
+ "eslint": "^6.7.2",
41
+ "jed": "^1.1.1",
42
+ "jest-svg-transformer": "^1.0.0",
43
+ "jest-transform-graphql": "^2.1.0",
44
+ "prettier": "^1.13.5",
45
+ "stylelint": "^9.3.0",
46
+ "stylelint-config-standard": "^18.0.0"
47
+ }
48
+ }
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import {
3
+ EmptyState as PfEmptyState,
4
+ EmptyStateBody,
5
+ EmptyStateIcon as PfEmptyStateIcon,
6
+ EmptyStateVariant,
7
+ Bullseye,
8
+ Title,
9
+ } from '@patternfly/react-core';
10
+ import PropTypes from 'prop-types';
11
+ import {
12
+ CubeIcon,
13
+ ExclamationCircleIcon,
14
+ SearchIcon,
15
+ } from '@patternfly/react-icons';
16
+ import { global_danger_color_200 as dangerColor } from '@patternfly/react-tokens';
17
+
18
+ const EmptyStateIcon = ({ error, search }) => {
19
+ if (error)
20
+ return (
21
+ <PfEmptyStateIcon
22
+ icon={ExclamationCircleIcon}
23
+ color={dangerColor.value}
24
+ />
25
+ );
26
+ if (search) return <PfEmptyStateIcon icon={SearchIcon} />;
27
+ return <PfEmptyStateIcon icon={CubeIcon} />;
28
+ };
29
+
30
+ const EmptyState = ({ title, body, error, search }) => (
31
+ <Bullseye>
32
+ <PfEmptyState variant={EmptyStateVariant.small}>
33
+ <EmptyStateIcon error={!!error} search={search} />
34
+ <Title headingLevel="h2" size="lg">
35
+ {title}
36
+ </Title>
37
+ <EmptyStateBody>{body}</EmptyStateBody>
38
+ </PfEmptyState>
39
+ </Bullseye>
40
+ );
41
+
42
+ EmptyStateIcon.propTypes = {
43
+ error: PropTypes.bool,
44
+ search: PropTypes.bool,
45
+ };
46
+
47
+ EmptyStateIcon.defaultProps = {
48
+ error: false,
49
+ search: false,
50
+ };
51
+
52
+ EmptyState.propTypes = {
53
+ title: PropTypes.string,
54
+ body: PropTypes.string,
55
+ error: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.string]),
56
+ search: PropTypes.bool,
57
+ };
58
+
59
+ EmptyState.defaultProps = {
60
+ title: 'Unable to fetch data from server',
61
+ body:
62
+ 'There was an error retrieving data from the server. Check your connection and try again.',
63
+ error: undefined,
64
+ search: false,
65
+ };
66
+
67
+ export default EmptyState;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Helmet } from 'react-helmet';
4
+ import {
5
+ Grid,
6
+ GridItem,
7
+ TextContent,
8
+ Text,
9
+ TextVariants,
10
+ } from '@patternfly/react-core';
11
+
12
+ import './IndexLayout.scss';
13
+
14
+ const IndexLayout = ({ pageTitle, children }) => (
15
+ <React.Fragment>
16
+ <Helmet>
17
+ <title>{pageTitle}</title>
18
+ </Helmet>
19
+ <Grid className="scap-page-grid">
20
+ <GridItem span={12}>
21
+ <TextContent>
22
+ <Text component={TextVariants.h1}>{pageTitle}</Text>
23
+ </TextContent>
24
+ </GridItem>
25
+ <GridItem span={12}>{children}</GridItem>
26
+ </Grid>
27
+ </React.Fragment>
28
+ );
29
+
30
+ IndexLayout.propTypes = {
31
+ pageTitle: PropTypes.string.isRequired,
32
+ children: PropTypes.object.isRequired,
33
+ };
34
+
35
+ export default IndexLayout;
@@ -0,0 +1,3 @@
1
+ .scap-page-grid {
2
+ margin: 1.8rem 1rem;
3
+ }
@@ -0,0 +1,9 @@
1
+ import { addSearch } from '../../helpers/pageParamsHelper';
2
+
3
+ export const preparePerPageOptions = opts =>
4
+ opts.map(item => ({ title: item.toString(), value: item }));
5
+
6
+ export const refreshPage = (history, params = {}) => {
7
+ const url = addSearch(history.location.pathname, params);
8
+ history.push(url);
9
+ };
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Table, TableHeader, TableBody } from '@patternfly/react-table';
4
+ import { Pagination, Flex, FlexItem } from '@patternfly/react-core';
5
+ import '@patternfly/patternfly/patternfly-addons.scss';
6
+ import { usePaginationOptions } from 'foremanReact/components/Pagination/PaginationHooks';
7
+
8
+ import { preparePerPageOptions, refreshPage } from './IndexTableHelper';
9
+
10
+ const IndexTable = props => {
11
+ const handlePerPageSelected = (event, perPage) => {
12
+ refreshPage(props.history, { page: 1, perPage });
13
+ };
14
+
15
+ const handlePageSelected = (event, page) => {
16
+ refreshPage(props.history, { ...props.pagination, page });
17
+ };
18
+
19
+ const perPageOptions = preparePerPageOptions(usePaginationOptions());
20
+
21
+ return (
22
+ <React.Fragment>
23
+ <Flex className="pf-u-pt-md">
24
+ <FlexItem>{props.toolbarBtns}</FlexItem>
25
+ <FlexItem align={{ default: 'alignRight' }}>
26
+ <Pagination
27
+ itemCount={props.totalCount}
28
+ page={props.pagination.page}
29
+ perPage={props.pagination.perPage}
30
+ onSetPage={handlePageSelected}
31
+ onPerPageSelect={handlePerPageSelected}
32
+ perPageOptions={perPageOptions}
33
+ variant="top"
34
+ />
35
+ </FlexItem>
36
+ </Flex>
37
+ <Table
38
+ aria-label={props.ariaTableLabel}
39
+ cells={props.columns}
40
+ rows={props.rows}
41
+ actions={props.actions}
42
+ >
43
+ <TableHeader />
44
+ <TableBody />
45
+ </Table>
46
+ </React.Fragment>
47
+ );
48
+ };
49
+
50
+ IndexTable.propTypes = {
51
+ history: PropTypes.object.isRequired,
52
+ pagination: PropTypes.object.isRequired,
53
+ toolbarBtns: PropTypes.array,
54
+ totalCount: PropTypes.number.isRequired,
55
+ ariaTableLabel: PropTypes.string.isRequired,
56
+ columns: PropTypes.array.isRequired,
57
+ rows: PropTypes.array.isRequired,
58
+ actions: PropTypes.array,
59
+ };
60
+
61
+ IndexTable.defaultProps = {
62
+ toolbarBtns: [],
63
+ actions: [],
64
+ };
65
+
66
+ export default IndexTable;
@@ -0,0 +1,3 @@
1
+ img.severity-img {
2
+ max-height: 56px;
3
+ }
@@ -0,0 +1,13 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import RuleSeverity from './index';
4
+
5
+ const levels = ['Low', 'Medium', 'High', 'Critical', 'foo'];
6
+
7
+ const fixtures = levels.reduce((memo, level) => {
8
+ memo[`should render for ${level} severity`] = { severity: level };
9
+ return memo;
10
+ }, {});
11
+
12
+ describe('RuleSeverity', () =>
13
+ testComponentSnapshotsWithFixtures(RuleSeverity, fixtures));
@@ -0,0 +1,41 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`RuleSeverity should render for Critical severity 1`] = `
4
+ <img
5
+ alt="Unknown Serverity"
6
+ className="severity-img"
7
+ src={[Function]}
8
+ />
9
+ `;
10
+
11
+ exports[`RuleSeverity should render for High severity 1`] = `
12
+ <img
13
+ alt="Unknown Serverity"
14
+ className="severity-img"
15
+ src={[Function]}
16
+ />
17
+ `;
18
+
19
+ exports[`RuleSeverity should render for Low severity 1`] = `
20
+ <img
21
+ alt="Unknown Serverity"
22
+ className="severity-img"
23
+ src={[Function]}
24
+ />
25
+ `;
26
+
27
+ exports[`RuleSeverity should render for Medium severity 1`] = `
28
+ <img
29
+ alt="Unknown Serverity"
30
+ className="severity-img"
31
+ src={[Function]}
32
+ />
33
+ `;
34
+
35
+ exports[`RuleSeverity should render for foo severity 1`] = `
36
+ <img
37
+ alt="Unknown Serverity"
38
+ className="severity-img"
39
+ src={[Function]}
40
+ />
41
+ `;
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_critical.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata4612"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs4610" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview4608"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style4593">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#CC0000;}
48
+ </style><g
49
+ id="g4605"><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path4597" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path4599" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path4601" /><path
59
+ class="st1"
60
+ d="M114.6,44H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.7,13-10.7h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,39.2,121.8,44,114.6,44z"
61
+ id="path4603" /></g></svg>
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_high.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6016"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6014" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6012"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style5999">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#F39800;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path6003" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path6005" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path6007" /><path
59
+ class="st2"
60
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
61
+ id="path6009" /></svg>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_low.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6693"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6691" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6689"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style6674">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#94D400;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><g
50
+ id="g6678" /><path
51
+ class="st1"
52
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
53
+ id="path6680" /><path
54
+ class="st2"
55
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
56
+ id="path6682" /><path
57
+ class="st2"
58
+ d="M99.6,73.3H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,70.2,104.3,73.3,99.6,73.3z"
59
+ id="path6684" /><path
60
+ class="st2"
61
+ d="M99.6,106.4H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,103.3,104.3,106.4,99.6,106.4z"
62
+ id="path6686" /></svg>