diff --git a/package-lock.json b/package-lock.json
index cb6f20995cd7290456862eed47a271e5bc0d3b0b..57d9a12eb83fb77acfebf9919b0531024a38792b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,6 +4,239 @@
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
+    "@ant-design/colors": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz",
+      "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==",
+      "requires": {
+        "@ctrl/tinycolor": "^3.4.0"
+      }
+    },
+    "@ant-design/create-react-context": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmjs.org/@ant-design/create-react-context/-/create-react-context-0.2.5.tgz",
+      "integrity": "sha512-1rMAa4qgP2lfl/QBH9i78+Gjxtj9FTMpMyDGZsEBW5Kih72EuUo9958mV8PgpRkh4uwPSQ7vVZWXeyNZXVAFDg==",
+      "requires": {
+        "gud": "^1.0.0",
+        "warning": "^4.0.3"
+      }
+    },
+    "@ant-design/css-animation": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/@ant-design/css-animation/-/css-animation-1.7.3.tgz",
+      "integrity": "sha512-LrX0OGZtW+W6iLnTAqnTaoIsRelYeuLZWsrmBJFUXDALQphPsN8cE5DCsmoSlL0QYb94BQxINiuS70Ar/8BNgA=="
+    },
+    "@ant-design/icons": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.5.0.tgz",
+      "integrity": "sha512-ZAKJcmr4DBV3NWr8wm2dCxNKN4eFrX+qCaPsuFejP6FRsf+m5OKxvCVi9bSp1lmKWeOI5yECAx5s0uFm4QHuPw==",
+      "requires": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons-svg": "^4.0.0",
+        "@babel/runtime": "^7.11.2",
+        "classnames": "^2.2.6",
+        "insert-css": "^2.0.0",
+        "rc-util": "^5.0.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "@ant-design/icons-react": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@ant-design/icons-react/-/icons-react-2.0.1.tgz",
+      "integrity": "sha512-r1QfoltMuruJZqdiKcbPim3d8LNsVPB733U0gZEUSxBLuqilwsW28K2rCTWSMTjmFX7Mfpf+v/wdiFe/XCqThw==",
+      "requires": {
+        "@ant-design/colors": "^3.1.0",
+        "babel-runtime": "^6.26.0"
+      },
+      "dependencies": {
+        "@ant-design/colors": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-3.2.2.tgz",
+          "integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==",
+          "requires": {
+            "tinycolor2": "^1.4.1"
+          }
+        }
+      }
+    },
+    "@ant-design/icons-svg": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz",
+      "integrity": "sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ=="
+    },
+    "@ant-design/react-slick": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-0.28.2.tgz",
+      "integrity": "sha512-nkrvXsO29pLToFaBb3MlJY4McaUFR4UHtXTz6A5HBzYmxH4SwKerX54mWdGc/6tKpHvS3vUwjEOt2T5XqZEo8Q==",
+      "requires": {
+        "@babel/runtime": "^7.10.4",
+        "classnames": "^2.2.5",
+        "json2mq": "^0.2.0",
+        "lodash": "^4.17.15",
+        "resize-observer-polyfill": "^1.5.0"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "@babel/cli": {
+      "version": "7.13.10",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.10.tgz",
+      "integrity": "sha512-lYSBC7B4B9hJ7sv0Ojx1BrGhuzCoOIYfLjd+Xpd4rOzdS+a47yi8voV8vFkfjlZR1N5qZO7ixOCbobUdT304PQ==",
+      "requires": {
+        "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents",
+        "chokidar": "^3.4.0",
+        "commander": "^4.0.1",
+        "convert-source-map": "^1.1.0",
+        "fs-readdir-recursive": "^1.1.0",
+        "glob": "^7.0.0",
+        "lodash": "^4.17.19",
+        "make-dir": "^2.1.0",
+        "slash": "^2.0.0",
+        "source-map": "^0.5.0"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+          "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+          "optional": true,
+          "requires": {
+            "normalize-path": "^3.0.0",
+            "picomatch": "^2.0.4"
+          }
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+          "optional": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "chokidar": {
+          "version": "3.5.1",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+          "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+          "optional": true,
+          "requires": {
+            "anymatch": "~3.1.1",
+            "braces": "~3.0.2",
+            "fsevents": "~2.3.1",
+            "glob-parent": "~5.1.0",
+            "is-binary-path": "~2.1.0",
+            "is-glob": "~4.0.1",
+            "normalize-path": "~3.0.0",
+            "readdirp": "~3.5.0"
+          }
+        },
+        "commander": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+          "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+          "optional": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "fsevents": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+          "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+          "optional": true
+        },
+        "glob-parent": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+          "optional": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        },
+        "is-binary-path": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+          "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+          "optional": true,
+          "requires": {
+            "binary-extensions": "^2.0.0"
+          }
+        },
+        "is-extglob": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+          "optional": 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==",
+          "optional": true,
+          "requires": {
+            "is-extglob": "^2.1.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+          "optional": true
+        },
+        "normalize-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+          "optional": true
+        },
+        "readdirp": {
+          "version": "3.5.0",
+          "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+          "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+          "optional": true,
+          "requires": {
+            "picomatch": "^2.2.1"
+          }
+        },
+        "slash": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+          "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+          "optional": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
     "@babel/code-frame": {
       "version": "7.10.1",
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
@@ -1087,6 +1320,62 @@
       "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz",
       "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
     },
+    "@ctrl/tinycolor": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz",
+      "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ=="
+    },
+    "@emotion/babel-utils": {
+      "version": "0.6.10",
+      "resolved": "https://registry.npmjs.org/@emotion/babel-utils/-/babel-utils-0.6.10.tgz",
+      "integrity": "sha512-/fnkM/LTEp3jKe++T0KyTszVGWNKPNOUJfjNKLO17BzQ6QPxgbg3whayom1Qr2oLFH3V92tDymU+dT5q676uow==",
+      "requires": {
+        "@emotion/hash": "^0.6.6",
+        "@emotion/memoize": "^0.6.6",
+        "@emotion/serialize": "^0.9.1",
+        "convert-source-map": "^1.5.1",
+        "find-root": "^1.1.0",
+        "source-map": "^0.7.2"
+      },
+      "dependencies": {
+        "@emotion/hash": {
+          "version": "0.6.6",
+          "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz",
+          "integrity": "sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ=="
+        },
+        "@emotion/memoize": {
+          "version": "0.6.6",
+          "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz",
+          "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ=="
+        },
+        "@emotion/serialize": {
+          "version": "0.9.1",
+          "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.9.1.tgz",
+          "integrity": "sha512-zTuAFtyPvCctHBEL8KZ5lJuwBanGSutFEncqLn/m9T1a6a93smBStK+bZzcNPgj4QS8Rkw9VTwJGhRIUVO8zsQ==",
+          "requires": {
+            "@emotion/hash": "^0.6.6",
+            "@emotion/memoize": "^0.6.6",
+            "@emotion/unitless": "^0.6.7",
+            "@emotion/utils": "^0.8.2"
+          }
+        },
+        "@emotion/unitless": {
+          "version": "0.6.7",
+          "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.6.7.tgz",
+          "integrity": "sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg=="
+        },
+        "@emotion/utils": {
+          "version": "0.8.2",
+          "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz",
+          "integrity": "sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw=="
+        },
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
+        }
+      }
+    },
     "@emotion/cache": {
       "version": "10.0.29",
       "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz",
@@ -1196,6 +1485,35 @@
       "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
       "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
     },
+    "@fortawesome/fontawesome": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome/-/fontawesome-1.1.8.tgz",
+      "integrity": "sha512-c0/MtkPVT0fmiFcCyYoPjkG9PkMOvfrZw2+0BaJ+Rh6UEcK1AR/LaRgrHHjUkbAbs9LXxQJhFS8CJ4uSnK2+JA==",
+      "requires": {
+        "@fortawesome/fontawesome-common-types": "^0.1.7"
+      }
+    },
+    "@fortawesome/fontawesome-common-types": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.1.7.tgz",
+      "integrity": "sha512-ego8jRVSHfq/iq4KRZJKQeUAdi3ZjGNrqw4oPN3fNdvTBnLCSntwVCnc37bsAJP9UB8MhrTfPnZYxkv2vpS4pg=="
+    },
+    "@fortawesome/fontawesome-free-solid": {
+      "version": "5.0.13",
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free-solid/-/fontawesome-free-solid-5.0.13.tgz",
+      "integrity": "sha512-b+krVnqkdDt52Yfev0x0ZZgtxBQsLw00Zfa3uaVWIDzpNZVtrEXuxldUSUaN/ihgGhSNi8VpvDAdNPVgCKOSxw==",
+      "requires": {
+        "@fortawesome/fontawesome-common-types": "^0.1.7"
+      }
+    },
+    "@fortawesome/react-fontawesome": {
+      "version": "0.1.14",
+      "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz",
+      "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==",
+      "requires": {
+        "prop-types": "^15.7.2"
+      }
+    },
     "@material-ui/core": {
       "version": "4.11.2",
       "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.2.tgz",
@@ -1293,75 +1611,192 @@
         "glob-to-regexp": "^0.3.0"
       }
     },
-    "@nodelib/fs.stat": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
-      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
-    },
-    "@svgr/babel-plugin-add-jsx-attribute": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz",
-      "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig=="
-    },
-    "@svgr/babel-plugin-remove-jsx-attribute": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz",
-      "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ=="
-    },
-    "@svgr/babel-plugin-remove-jsx-empty-expression": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz",
-      "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w=="
-    },
-    "@svgr/babel-plugin-replace-jsx-attribute-value": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz",
-      "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w=="
-    },
-    "@svgr/babel-plugin-svg-dynamic-title": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz",
-      "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w=="
-    },
-    "@svgr/babel-plugin-svg-em-dimensions": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz",
-      "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w=="
-    },
-    "@svgr/babel-plugin-transform-react-native-svg": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz",
-      "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw=="
-    },
-    "@svgr/babel-plugin-transform-svg-component": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz",
-      "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw=="
-    },
-    "@svgr/babel-preset": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz",
-      "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==",
-      "requires": {
-        "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0",
-        "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0",
-        "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0",
-        "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0",
-        "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3",
-        "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0",
-        "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0",
-        "@svgr/babel-plugin-transform-svg-component": "^4.2.0"
-      }
-    },
-    "@svgr/core": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz",
-      "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==",
+    "@nicolo-ribaudo/chokidar-2": {
+      "version": "2.1.8-no-fsevents",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz",
+      "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==",
+      "optional": true,
       "requires": {
-        "@svgr/plugin-jsx": "^4.3.3",
-        "camelcase": "^5.3.1",
-        "cosmiconfig": "^5.2.1"
-      },
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.1",
+        "braces": "^2.3.2",
+        "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"
+      },
+      "dependencies": {
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+          "optional": true
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "optional": 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"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "optional": 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=",
+          "optional": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "optional": 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=",
+              "optional": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "is-extglob": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+          "optional": 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==",
+          "optional": 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=",
+          "optional": true,
+          "requires": {
+            "kind-of": "^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==",
+          "optional": true
+        }
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
+    },
+    "@svgr/babel-plugin-add-jsx-attribute": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz",
+      "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig=="
+    },
+    "@svgr/babel-plugin-remove-jsx-attribute": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz",
+      "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ=="
+    },
+    "@svgr/babel-plugin-remove-jsx-empty-expression": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz",
+      "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w=="
+    },
+    "@svgr/babel-plugin-replace-jsx-attribute-value": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz",
+      "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w=="
+    },
+    "@svgr/babel-plugin-svg-dynamic-title": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz",
+      "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w=="
+    },
+    "@svgr/babel-plugin-svg-em-dimensions": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz",
+      "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w=="
+    },
+    "@svgr/babel-plugin-transform-react-native-svg": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz",
+      "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw=="
+    },
+    "@svgr/babel-plugin-transform-svg-component": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz",
+      "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw=="
+    },
+    "@svgr/babel-preset": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz",
+      "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==",
+      "requires": {
+        "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0",
+        "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0",
+        "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0",
+        "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0",
+        "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3",
+        "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0",
+        "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0",
+        "@svgr/babel-plugin-transform-svg-component": "^4.2.0"
+      }
+    },
+    "@svgr/core": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz",
+      "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==",
+      "requires": {
+        "@svgr/plugin-jsx": "^4.3.3",
+        "camelcase": "^5.3.1",
+        "cosmiconfig": "^5.2.1"
+      },
       "dependencies": {
         "cosmiconfig": {
           "version": "5.2.1",
@@ -1648,6 +2083,14 @@
         }
       }
     },
+    "@types/react-slick": {
+      "version": "0.23.4",
+      "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.4.tgz",
+      "integrity": "sha512-vXoIy4GUfB7/YgqubR4H7RALo+pRdMYCeLgWwV3MPwl5pggTlEkFBTF19R7u+LJc85uMqC7RfsbkqPLMQ4ab+A==",
+      "requires": {
+        "@types/react": "*"
+      }
+    },
     "@types/react-transition-group": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz",
@@ -1830,6 +2273,11 @@
       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
       "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg=="
     },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+    },
     "accepts": {
       "version": "1.3.7",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@@ -1878,6 +2326,14 @@
       "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
       "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
     },
+    "add-dom-event-listener": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz",
+      "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==",
+      "requires": {
+        "object-assign": "4.x"
+      }
+    },
     "address": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz",
@@ -1946,6 +2402,65 @@
         "color-convert": "^1.9.0"
       }
     },
+    "antd": {
+      "version": "4.13.1",
+      "resolved": "https://registry.npmjs.org/antd/-/antd-4.13.1.tgz",
+      "integrity": "sha512-KaveTRGKOFrbas3FO0ktXaZrSMDpDWz3FpuLbafV7R973BNz2yo+IG8ia2KPEfpRtGYUvpnKlDUNQZWhotoYhQ==",
+      "requires": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons": "^4.5.0",
+        "@ant-design/react-slick": "~0.28.1",
+        "@babel/runtime": "^7.12.5",
+        "array-tree-filter": "^2.1.0",
+        "classnames": "^2.2.6",
+        "copy-to-clipboard": "^3.2.0",
+        "lodash": "^4.17.20",
+        "moment": "^2.25.3",
+        "rc-cascader": "~1.4.0",
+        "rc-checkbox": "~2.3.0",
+        "rc-collapse": "~3.1.0",
+        "rc-dialog": "~8.5.1",
+        "rc-drawer": "~4.3.0",
+        "rc-dropdown": "~3.2.0",
+        "rc-field-form": "~1.19.0",
+        "rc-image": "~5.2.3",
+        "rc-input-number": "~7.0.0-alpha.4",
+        "rc-mentions": "~1.5.0",
+        "rc-menu": "~8.10.0",
+        "rc-motion": "^2.4.0",
+        "rc-notification": "~4.5.2",
+        "rc-pagination": "~3.1.2",
+        "rc-picker": "~2.5.1",
+        "rc-progress": "~3.1.0",
+        "rc-rate": "~2.9.0",
+        "rc-resize-observer": "^1.0.0",
+        "rc-select": "~12.1.0",
+        "rc-slider": "~9.7.1",
+        "rc-steps": "~4.1.0",
+        "rc-switch": "~3.2.0",
+        "rc-table": "~7.13.0",
+        "rc-tabs": "~11.7.0",
+        "rc-textarea": "~0.3.0",
+        "rc-tooltip": "~5.1.0",
+        "rc-tree": "~4.1.0",
+        "rc-tree-select": "~4.3.0",
+        "rc-trigger": "^5.2.1",
+        "rc-upload": "~4.0.0-alpha.6",
+        "rc-util": "^5.8.1",
+        "scroll-into-view-if-needed": "^2.2.25",
+        "warning": "^4.0.3"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
     "anymatch": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
@@ -2291,6 +2806,11 @@
       "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
       "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
     },
+    "array-tree-filter": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
+      "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw=="
+    },
     "array-union": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -2473,6 +2993,11 @@
       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
       "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
     },
+    "async-validator": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.1.tgz",
+      "integrity": "sha512-DDmKA7sdSAJtTVeNZHrnr2yojfFaoeW8MfQN8CeuXg8DDQHTqKk9Fdv38dSvnesHoO8MUwMI2HphOeSyIF+wmQ=="
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -3330,6 +3855,11 @@
       "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
       "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
     },
+    "bootstrap": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz",
+      "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw=="
+    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -3679,64 +4209,206 @@
       "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz",
       "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg=="
     },
-    "chokidar": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
-      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-      "requires": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "fsevents": "^1.2.7",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
+    "cheerio": {
+      "version": "1.0.0-rc.5",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz",
+      "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==",
+      "requires": {
+        "cheerio-select-tmp": "^0.1.0",
+        "dom-serializer": "~1.2.0",
+        "domhandler": "^4.0.0",
+        "entities": "~2.1.0",
+        "htmlparser2": "^6.0.0",
+        "parse5": "^6.0.0",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0"
       },
       "dependencies": {
-        "array-unique": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
-        },
-        "braces": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+        "dom-serializer": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz",
+          "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
           "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"
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.0.0",
+            "entities": "^2.0.0"
           }
         },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+        "domelementtype": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
+          "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
+        },
+        "domhandler": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
+          "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
           "requires": {
-            "is-extendable": "^0.1.0"
+            "domelementtype": "^2.1.0"
           }
         },
-        "fill-range": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+        "domutils": {
+          "version": "2.4.4",
+          "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz",
+          "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
           "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
+            "dom-serializer": "^1.0.1",
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.0.0"
+          }
+        },
+        "entities": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+          "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
+        },
+        "htmlparser2": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz",
+          "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==",
+          "requires": {
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.0.0",
+            "domutils": "^2.4.4",
+            "entities": "^2.0.0"
+          }
+        },
+        "parse5": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+          "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
+        }
+      }
+    },
+    "cheerio-select-tmp": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz",
+      "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==",
+      "requires": {
+        "css-select": "^3.1.2",
+        "css-what": "^4.0.0",
+        "domelementtype": "^2.1.0",
+        "domhandler": "^4.0.0",
+        "domutils": "^2.4.4"
+      },
+      "dependencies": {
+        "css-select": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz",
+          "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==",
+          "requires": {
+            "boolbase": "^1.0.0",
+            "css-what": "^4.0.0",
+            "domhandler": "^4.0.0",
+            "domutils": "^2.4.3",
+            "nth-check": "^2.0.0"
+          }
+        },
+        "css-what": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz",
+          "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A=="
+        },
+        "dom-serializer": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz",
+          "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
+          "requires": {
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.0.0",
+            "entities": "^2.0.0"
+          }
+        },
+        "domelementtype": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
+          "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
+        },
+        "domhandler": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
+          "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
+          "requires": {
+            "domelementtype": "^2.1.0"
+          }
+        },
+        "domutils": {
+          "version": "2.4.4",
+          "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz",
+          "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
+          "requires": {
+            "dom-serializer": "^1.0.1",
+            "domelementtype": "^2.0.1",
+            "domhandler": "^4.0.0"
+          }
+        },
+        "nth-check": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
+          "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
+          "requires": {
+            "boolbase": "^1.0.0"
+          }
+        }
+      }
+    },
+    "chokidar": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+      "requires": {
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.1",
+        "braces": "^2.3.2",
+        "fsevents": "^1.2.7",
+        "glob-parent": "^3.1.0",
+        "inherits": "^2.0.3",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "normalize-path": "^3.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.2.1",
+        "upath": "^1.1.1"
+      },
+      "dependencies": {
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           }
         },
         "fsevents": {
@@ -3943,6 +4615,11 @@
       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
       "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
     },
+    "codemirror": {
+      "version": "5.59.4",
+      "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.59.4.tgz",
+      "integrity": "sha512-achw5JBgx8QPcACDDn+EUUXmCYzx/zxEtOGXyjvLEvYY8GleUrnfm5D+Zb+UjShHggXKDT9AXrbkBZX6a0YSQg=="
+    },
     "collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -4025,11 +4702,24 @@
       "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
       "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
     },
+    "component-classes": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz",
+      "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=",
+      "requires": {
+        "component-indexof": "0.0.3"
+      }
+    },
     "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=="
     },
+    "component-indexof": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz",
+      "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ="
+    },
     "compressible": {
       "version": "2.0.18",
       "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -4067,6 +4757,11 @@
         }
       }
     },
+    "compute-scroll-into-view": {
+      "version": "1.0.17",
+      "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz",
+      "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg=="
+    },
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -4122,6 +4817,23 @@
       "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
       "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="
     },
+    "connected-react-router": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-4.5.0.tgz",
+      "integrity": "sha512-SBBmAZrtmw4y7Rkl2PCct8lN/DuCftl7QSAFLgFyjjuYkeJKAzAvQjzNNNE4R3j2+6a4TUiv8qselxQ4+6H5eA==",
+      "requires": {
+        "immutable": "^3.8.1",
+        "redux-seamless-immutable": "^0.4.0",
+        "seamless-immutable": "^7.1.3"
+      },
+      "dependencies": {
+        "immutable": {
+          "version": "3.8.2",
+          "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+          "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM="
+        }
+      }
+    },
     "console-browserify": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
@@ -4200,6 +4912,14 @@
       "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
       "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
     },
+    "copy-to-clipboard": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
+      "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
+      "requires": {
+        "toggle-selection": "^1.0.6"
+      }
+    },
     "core-js": {
       "version": "3.8.0",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz",
@@ -4254,6 +4974,42 @@
         }
       }
     },
+    "create-emotion": {
+      "version": "9.2.12",
+      "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.2.12.tgz",
+      "integrity": "sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA==",
+      "requires": {
+        "@emotion/hash": "^0.6.2",
+        "@emotion/memoize": "^0.6.1",
+        "@emotion/stylis": "^0.7.0",
+        "@emotion/unitless": "^0.6.2",
+        "csstype": "^2.5.2",
+        "stylis": "^3.5.0",
+        "stylis-rule-sheet": "^0.0.10"
+      },
+      "dependencies": {
+        "@emotion/hash": {
+          "version": "0.6.6",
+          "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz",
+          "integrity": "sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ=="
+        },
+        "@emotion/memoize": {
+          "version": "0.6.6",
+          "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz",
+          "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ=="
+        },
+        "@emotion/stylis": {
+          "version": "0.7.1",
+          "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.7.1.tgz",
+          "integrity": "sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ=="
+        },
+        "@emotion/unitless": {
+          "version": "0.6.7",
+          "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.6.7.tgz",
+          "integrity": "sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg=="
+        }
+      }
+    },
     "create-hash": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
@@ -4279,6 +5035,15 @@
         "sha.js": "^2.4.8"
       }
     },
+    "create-react-class": {
+      "version": "15.7.0",
+      "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz",
+      "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==",
+      "requires": {
+        "loose-envify": "^1.3.1",
+        "object-assign": "^4.1.1"
+      }
+    },
     "cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -4309,6 +5074,15 @@
         "randomfill": "^1.0.3"
       }
     },
+    "css-animation": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz",
+      "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==",
+      "requires": {
+        "babel-runtime": "6.x",
+        "component-classes": "^1.2.5"
+      }
+    },
     "css-blank-pseudo": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz",
@@ -4844,6 +5618,11 @@
         }
       }
     },
+    "date-fns": {
+      "version": "2.19.0",
+      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz",
+      "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg=="
+    },
     "debug": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -5154,6 +5933,19 @@
         "esutils": "^2.0.2"
       }
     },
+    "dom-align": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
+      "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
+    },
+    "dom-closest": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/dom-closest/-/dom-closest-0.2.0.tgz",
+      "integrity": "sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=",
+      "requires": {
+        "dom-matches": ">=1.0.1"
+      }
+    },
     "dom-converter": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
@@ -5178,6 +5970,16 @@
         }
       }
     },
+    "dom-matches": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz",
+      "integrity": "sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw="
+    },
+    "dom-scroll-into-view": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz",
+      "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4="
+    },
     "dom-serializer": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
@@ -5247,6 +6049,16 @@
       "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
       "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU="
     },
+    "draft-js": {
+      "version": "0.10.5",
+      "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.10.5.tgz",
+      "integrity": "sha512-LE6jSCV9nkPhfVX2ggcRLA4FKs6zWq9ceuO/88BpXdNCS7mjRTgs0NsV6piUCJX9YxMsB9An33wnkMmU2sD2Zg==",
+      "requires": {
+        "fbjs": "^0.8.15",
+        "immutable": "~3.7.4",
+        "object-assign": "^4.1.0"
+      }
+    },
     "duplexer": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
@@ -5312,23 +6124,23 @@
       "integrity": "sha512-smevlzzMNz3vMz6OLeeCq5HRWEj2AcgccNPYnAx4Usx0IOciq9DU36RJcICcS09hXoY7t7deRfVYKD14IrGb9A=="
     },
     "elliptic": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
-      "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+      "version": "6.5.4",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
       "requires": {
-        "bn.js": "^4.4.0",
-        "brorand": "^1.0.1",
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
         "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"
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
       },
       "dependencies": {
         "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
         }
       }
     },
@@ -5342,6 +6154,51 @@
       "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
       "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
     },
+    "emotion": {
+      "version": "9.2.12",
+      "resolved": "https://registry.npmjs.org/emotion/-/emotion-9.2.12.tgz",
+      "integrity": "sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ==",
+      "requires": {
+        "babel-plugin-emotion": "^9.2.11",
+        "create-emotion": "^9.2.12"
+      },
+      "dependencies": {
+        "@emotion/hash": {
+          "version": "0.6.6",
+          "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz",
+          "integrity": "sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ=="
+        },
+        "@emotion/memoize": {
+          "version": "0.6.6",
+          "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz",
+          "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ=="
+        },
+        "@emotion/stylis": {
+          "version": "0.7.1",
+          "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.7.1.tgz",
+          "integrity": "sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ=="
+        },
+        "babel-plugin-emotion": {
+          "version": "9.2.11",
+          "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz",
+          "integrity": "sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ==",
+          "requires": {
+            "@babel/helper-module-imports": "^7.0.0",
+            "@emotion/babel-utils": "^0.6.4",
+            "@emotion/hash": "^0.6.2",
+            "@emotion/memoize": "^0.6.1",
+            "@emotion/stylis": "^0.7.0",
+            "babel-plugin-macros": "^2.0.0",
+            "babel-plugin-syntax-jsx": "^6.18.0",
+            "convert-source-map": "^1.5.0",
+            "find-root": "^1.1.0",
+            "mkdirp": "^0.5.1",
+            "source-map": "^0.5.7",
+            "touch": "^2.0.1"
+          }
+        }
+      }
+    },
     "enabled": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz",
@@ -5355,6 +6212,24 @@
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
       "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
     },
+    "encoding": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+      "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+      "requires": {
+        "iconv-lite": "^0.6.2"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.6.2",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
+          "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3.0.0"
+          }
+        }
+      }
+    },
     "end-of-stream": {
       "version": "1.4.4",
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -5411,6 +6286,11 @@
         }
       }
     },
+    "enquire.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz",
+      "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ="
+    },
     "entities": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
@@ -5910,6 +6790,11 @@
       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
       "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ=="
     },
+    "eventlistener": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/eventlistener/-/eventlistener-0.0.1.tgz",
+      "integrity": "sha1-7Suqu4UiJ68rz4iRUscsY8pTLrg="
+    },
     "events": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
@@ -5975,6 +6860,14 @@
         "fill-range": "^2.1.0"
       }
     },
+    "expand-tilde": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+      "requires": {
+        "homedir-polyfill": "^1.0.1"
+      }
+    },
     "expect": {
       "version": "23.6.0",
       "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz",
@@ -6452,6 +7345,35 @@
         "bser": "2.1.1"
       }
     },
+    "fbjs": {
+      "version": "0.8.17",
+      "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
+      "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
+      "requires": {
+        "core-js": "^1.0.0",
+        "isomorphic-fetch": "^2.1.1",
+        "loose-envify": "^1.0.0",
+        "object-assign": "^4.1.0",
+        "promise": "^7.1.1",
+        "setimmediate": "^1.0.5",
+        "ua-parser-js": "^0.7.18"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "1.2.7",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+        },
+        "promise": {
+          "version": "7.3.1",
+          "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+          "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+          "requires": {
+            "asap": "~2.0.3"
+          }
+        }
+      }
+    },
     "fecha": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
@@ -6675,6 +7597,11 @@
         "debug": "=3.1.0"
       }
     },
+    "font-awesome": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+      "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -7036,6 +7963,11 @@
         "universalify": "^0.1.0"
       }
     },
+    "fs-readdir-recursive": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+      "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
+    },
     "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",
@@ -7726,6 +8658,11 @@
       "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
       "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
     },
+    "gud": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz",
+      "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw=="
+    },
     "gzip-size": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz",
@@ -7742,6 +8679,59 @@
         }
       }
     },
+    "h2x-core": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/h2x-core/-/h2x-core-1.1.1.tgz",
+      "integrity": "sha512-LdXe4Irs731knLtHgLyFrnJCumfiqXXQwKN1IMUhi37li29PLfLbMDvfK7Rk4wmgHLKP+sIITT1mcJV4QsC3nw==",
+      "requires": {
+        "h2x-generate": "^1.1.0",
+        "h2x-parse": "^1.1.1",
+        "h2x-traverse": "^1.1.0"
+      }
+    },
+    "h2x-generate": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/h2x-generate/-/h2x-generate-1.1.0.tgz",
+      "integrity": "sha512-L7Hym0yb20QIjvqeULUPOeh/cyvScdOAyJ6oRlh5dF0+w92hf3OiTk1q15KBijde7jGEe+0R4aOmtW8gkPNIzg==",
+      "requires": {
+        "h2x-traverse": "^1.1.0"
+      }
+    },
+    "h2x-parse": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/h2x-parse/-/h2x-parse-1.1.1.tgz",
+      "integrity": "sha512-WRSmPF+tIWuUXVEZaYRhcZx/JGEJx8LjZpDDtrvMr5m/GTR0NerydCik5dRzcKXPWCtfXxuJRLR4v2P4HB2B1A==",
+      "requires": {
+        "h2x-types": "^1.1.0",
+        "jsdom": ">=11.0.0"
+      }
+    },
+    "h2x-plugin-jsx": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/h2x-plugin-jsx/-/h2x-plugin-jsx-1.2.0.tgz",
+      "integrity": "sha512-a7Vb3BHhJJq0dPDNdqguEyQirENkVsFtvM2YkiaT5h/fmGhmM1nDy3BLeJeSKi2tL2g9v4ykm2Z+GG9QrhDgPA==",
+      "requires": {
+        "h2x-types": "^1.1.0"
+      }
+    },
+    "h2x-traverse": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/h2x-traverse/-/h2x-traverse-1.1.0.tgz",
+      "integrity": "sha512-1ND8ZbISLSUgpLHYJRvhvElITvs0g44L7RxjeXViz5XP6rooa+FtXTFLByl2Yg01zj2txubifHIuU4pgvj8l+A==",
+      "requires": {
+        "h2x-types": "^1.1.0"
+      }
+    },
+    "h2x-types": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/h2x-types/-/h2x-types-1.1.0.tgz",
+      "integrity": "sha512-QdH5qfLcdF209UsCdM0ZNZ9Dwm2PHvMfeLZtivBrjX3Y/df4US2pwsUC4HBfWhye/mx/t6puODeC7Oacb/Ol8g=="
+    },
+    "hammerjs": {
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
+      "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
+    },
     "handle-thing": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
@@ -7941,6 +8931,14 @@
         "os-tmpdir": "^1.0.1"
       }
     },
+    "homedir-polyfill": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+      "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+      "requires": {
+        "parse-passwd": "^1.0.0"
+      }
+    },
     "hoopy": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -8499,6 +9497,11 @@
       "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz",
       "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg=="
     },
+    "immutable": {
+      "version": "3.7.6",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz",
+      "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks="
+    },
     "import-cwd": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -8627,6 +9630,16 @@
         }
       }
     },
+    "insert-css": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz",
+      "integrity": "sha1-610Ql7dUL0x56jBg067gfQU4gPQ="
+    },
+    "install": {
+      "version": "0.13.0",
+      "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz",
+      "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA=="
+    },
     "internal-ip": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz",
@@ -8839,6 +9852,11 @@
       "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
       "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
     },
+    "is-mobile": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-2.2.2.tgz",
+      "integrity": "sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg=="
+    },
     "is-negative-zero": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
@@ -8994,6 +10012,26 @@
       "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
     },
+    "isomorphic-fetch": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+      "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+      "requires": {
+        "node-fetch": "^1.0.1",
+        "whatwg-fetch": ">=0.10.0"
+      },
+      "dependencies": {
+        "node-fetch": {
+          "version": "1.7.3",
+          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+          "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+          "requires": {
+            "encoding": "^0.1.11",
+            "is-stream": "^1.0.1"
+          }
+        }
+      }
+    },
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -9626,6 +10664,11 @@
         "topo": "2.x.x"
       }
     },
+    "jquery": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
+      "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
+    },
     "js-levenshtein": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
@@ -9729,6 +10772,14 @@
       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
     },
+    "json2mq": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz",
+      "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=",
+      "requires": {
+        "string-convert": "^0.2.0"
+      }
+    },
     "json3": {
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
@@ -9872,6 +10923,11 @@
         "walker": "1.x"
       }
     },
+    "keycode": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz",
+      "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ="
+    },
     "killable": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
@@ -10069,9 +11125,24 @@
       "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
       "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
     },
-    "lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+    },
+    "lodash.isfunction": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+      "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw=="
+    },
+    "lodash.isobject": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
+      "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0="
+    },
+    "lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
       "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
     },
     "lodash.sortby": {
@@ -10101,6 +11172,16 @@
         "lodash._reinterpolate": "^3.0.0"
       }
     },
+    "lodash.throttle": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+      "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+    },
+    "lodash.tonumber": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz",
+      "integrity": "sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk="
+    },
     "lodash.uniq": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -10175,6 +11256,11 @@
         "tmpl": "1.0.x"
       }
     },
+    "mamacro": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+      "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA=="
+    },
     "map-age-cleaner": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
@@ -10201,6 +11287,42 @@
       "resolved": "https://registry.npmjs.org/material-design-icons/-/material-design-icons-3.0.1.tgz",
       "integrity": "sha1-mnHEh0chjrylHlGmbaaCA4zct78="
     },
+    "material-icons-react": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/material-icons-react/-/material-icons-react-1.0.4.tgz",
+      "integrity": "sha512-ZTCD0Nl+/hTyvONWz8N6gCrpLWfbkOF77NWbD9ThYdkBK8gtvFMc/ORS8nfU0qlmS1wNdVXf1oTaBRWLCiNkxw==",
+      "requires": {
+        "prop-types": "^15.6.1",
+        "react": "^15.0.0",
+        "react-dom": "^15.0.0",
+        "webfontloader": "^1.6.28"
+      },
+      "dependencies": {
+        "react": {
+          "version": "15.7.0",
+          "resolved": "https://registry.npmjs.org/react/-/react-15.7.0.tgz",
+          "integrity": "sha512-5/MMRYmpmM0sMTHGLossnJCrmXQIiJilD6y3YN3TzAwGFj6zdnMtFv6xmi65PHKRV+pehIHpT7oy67Sr6s9AHA==",
+          "requires": {
+            "create-react-class": "^15.6.0",
+            "fbjs": "^0.8.9",
+            "loose-envify": "^1.1.0",
+            "object-assign": "^4.1.0",
+            "prop-types": "^15.5.10"
+          }
+        },
+        "react-dom": {
+          "version": "15.7.0",
+          "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.7.0.tgz",
+          "integrity": "sha512-mpjXqC2t1FuYsILOLCj0kg6pbg460byZkVA/80VtDmKU/pYmoTdHOtaMcTRIDiyXLz4sIur0cQ04nOC6iGndJg==",
+          "requires": {
+            "fbjs": "^0.8.9",
+            "loose-envify": "^1.1.0",
+            "object-assign": "^4.1.0",
+            "prop-types": "^15.5.10"
+          }
+        }
+      }
+    },
     "math-random": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
@@ -10439,6 +11561,15 @@
         "webpack-sources": "^1.1.0"
       }
     },
+    "mini-store": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-3.0.6.tgz",
+      "integrity": "sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ==",
+      "requires": {
+        "hoist-non-react-statics": "^3.3.2",
+        "shallowequal": "^1.0.2"
+      }
+    },
     "minimalistic-assert": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -10564,6 +11695,11 @@
       "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
       "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
     },
+    "mutationobserver-shim": {
+      "version": "0.3.7",
+      "resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz",
+      "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ=="
+    },
     "mute-stream": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
@@ -10731,6 +11867,14 @@
       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz",
       "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg=="
     },
+    "nopt": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+      "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
+      "requires": {
+        "abbrev": "1"
+      }
+    },
     "normalize-package-data": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -10760,3599 +11904,8431 @@
       "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
       "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
     },
-    "npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-      "requires": {
-        "path-key": "^2.0.0"
-      }
-    },
-    "nth-check": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
-      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
-      "requires": {
-        "boolbase": "~1.0.0"
-      }
-    },
-    "num2fraction": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
-    },
-    "number-is-nan": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
-    },
-    "nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
-    },
-    "oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
-    },
-    "object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
-    },
-    "object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-      "requires": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
+    "npm": {
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/npm/-/npm-7.6.2.tgz",
+      "integrity": "sha512-XXlLw6+HNG5GXt/T+xOAK8QXQ3x3VhIOBmWtiTw6yavFeTelleN2uAf8zG7HwSv9pBxLA4FHx7vGmlMKxAkqDQ==",
+      "requires": {
+        "@npmcli/arborist": "^2.2.7",
+        "@npmcli/ci-detect": "^1.2.0",
+        "@npmcli/config": "^1.2.9",
+        "@npmcli/run-script": "^1.8.3",
+        "abbrev": "~1.1.1",
+        "ansicolors": "~0.3.2",
+        "ansistyles": "~0.1.3",
+        "archy": "~1.0.0",
+        "byte-size": "^7.0.1",
+        "cacache": "^15.0.5",
+        "chalk": "^4.1.0",
+        "chownr": "^2.0.0",
+        "cli-columns": "^3.1.2",
+        "cli-table3": "^0.6.0",
+        "columnify": "~1.5.4",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.6",
+        "hosted-git-info": "^3.0.8",
+        "ini": "^2.0.0",
+        "init-package-json": "^2.0.2",
+        "is-cidr": "^4.0.2",
+        "json-parse-even-better-errors": "^2.3.1",
+        "leven": "^3.1.0",
+        "libnpmaccess": "^4.0.1",
+        "libnpmdiff": "^2.0.4",
+        "libnpmfund": "^1.0.2",
+        "libnpmhook": "^6.0.1",
+        "libnpmorg": "^2.0.1",
+        "libnpmpack": "^2.0.1",
+        "libnpmpublish": "^4.0.0",
+        "libnpmsearch": "^3.1.0",
+        "libnpmteam": "^2.0.2",
+        "libnpmversion": "^1.0.11",
+        "make-fetch-happen": "^8.0.14",
+        "minipass": "^3.1.3",
+        "minipass-pipeline": "^1.2.4",
+        "mkdirp": "^1.0.4",
+        "mkdirp-infer-owner": "^2.0.0",
+        "ms": "^2.1.2",
+        "node-gyp": "^7.1.2",
+        "nopt": "^5.0.0",
+        "npm-audit-report": "^2.1.4",
+        "npm-package-arg": "^8.1.1",
+        "npm-pick-manifest": "^6.1.0",
+        "npm-profile": "^5.0.2",
+        "npm-registry-fetch": "^9.0.0",
+        "npm-user-validate": "^1.0.1",
+        "npmlog": "~4.1.2",
+        "opener": "^1.5.2",
+        "pacote": "^11.3.0",
+        "parse-conflict-json": "^1.1.1",
+        "qrcode-terminal": "^0.12.0",
+        "read": "~1.0.7",
+        "read-package-json": "^3.0.1",
+        "read-package-json-fast": "^2.0.2",
+        "readdir-scoped-modules": "^1.1.0",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.4",
+        "ssri": "^8.0.1",
+        "tar": "^6.1.0",
+        "text-table": "~0.2.0",
+        "tiny-relative-date": "^1.3.0",
+        "treeverse": "^1.0.4",
+        "validate-npm-package-name": "~3.0.0",
+        "which": "^2.0.2",
+        "write-file-atomic": "^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=",
+        "@npmcli/arborist": {
+          "version": "2.2.7",
+          "bundled": true,
           "requires": {
-            "is-descriptor": "^0.1.0"
+            "@npmcli/installed-package-contents": "^1.0.7",
+            "@npmcli/map-workspaces": "^1.0.2",
+            "@npmcli/metavuln-calculator": "^1.1.0",
+            "@npmcli/move-file": "^1.1.0",
+            "@npmcli/name-from-folder": "^1.0.1",
+            "@npmcli/node-gyp": "^1.0.1",
+            "@npmcli/run-script": "^1.8.2",
+            "bin-links": "^2.2.1",
+            "cacache": "^15.0.3",
+            "common-ancestor-path": "^1.0.1",
+            "json-parse-even-better-errors": "^2.3.1",
+            "json-stringify-nice": "^1.1.1",
+            "mkdirp-infer-owner": "^2.0.0",
+            "npm-install-checks": "^4.0.0",
+            "npm-package-arg": "^8.1.0",
+            "npm-pick-manifest": "^6.1.0",
+            "npm-registry-fetch": "^9.0.0",
+            "pacote": "^11.2.6",
+            "parse-conflict-json": "^1.1.1",
+            "promise-all-reject-late": "^1.0.0",
+            "promise-call-limit": "^1.0.1",
+            "read-package-json-fast": "^2.0.2",
+            "readdir-scoped-modules": "^1.1.0",
+            "semver": "^7.3.4",
+            "tar": "^6.1.0",
+            "treeverse": "^1.0.4",
+            "walk-up-path": "^1.0.0"
+          }
+        },
+        "@npmcli/ci-detect": {
+          "version": "1.3.0",
+          "bundled": true
+        },
+        "@npmcli/config": {
+          "version": "1.2.9",
+          "bundled": true,
+          "requires": {
+            "ini": "^2.0.0",
+            "mkdirp-infer-owner": "^2.0.0",
+            "nopt": "^5.0.0",
+            "semver": "^7.3.4",
+            "walk-up-path": "^1.0.0"
           }
-        }
-      }
-    },
-    "object-hash": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
-      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
-    },
-    "object-inspect": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
-      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
-    },
-    "object-is": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
-      "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      }
-    },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-    },
-    "object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-      "requires": {
-        "isobject": "^3.0.0"
-      }
-    },
-    "object.assign": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
-      "requires": {
-        "define-properties": "^1.1.2",
-        "function-bind": "^1.1.1",
-        "has-symbols": "^1.0.0",
-        "object-keys": "^1.0.11"
-      }
-    },
-    "object.entries": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz",
-      "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.18.0-next.1",
-        "has": "^1.0.3"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.18.0-next.1",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
-          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
-          "dev": true,
+        },
+        "@npmcli/disparity-colors": {
+          "version": "1.0.1",
+          "bundled": true,
           "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.2",
-            "is-negative-zero": "^2.0.0",
-            "is-regex": "^1.1.1",
-            "object-inspect": "^1.8.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.1",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
+            "ansi-styles": "^4.3.0"
           }
         },
-        "is-callable": {
-          "version": "1.2.2",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
-          "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
-          "dev": true
+        "@npmcli/git": {
+          "version": "2.0.6",
+          "bundled": true,
+          "requires": {
+            "@npmcli/promise-spawn": "^1.1.0",
+            "lru-cache": "^6.0.0",
+            "mkdirp": "^1.0.3",
+            "npm-pick-manifest": "^6.0.0",
+            "promise-inflight": "^1.0.1",
+            "promise-retry": "^2.0.1",
+            "semver": "^7.3.2",
+            "unique-filename": "^1.1.1",
+            "which": "^2.0.2"
+          }
         },
-        "is-regex": {
+        "@npmcli/installed-package-contents": {
+          "version": "1.0.7",
+          "bundled": true,
+          "requires": {
+            "npm-bundled": "^1.1.1",
+            "npm-normalize-package-bin": "^1.0.1"
+          }
+        },
+        "@npmcli/map-workspaces": {
+          "version": "1.0.3",
+          "bundled": true,
+          "requires": {
+            "@npmcli/name-from-folder": "^1.0.1",
+            "glob": "^7.1.6",
+            "minimatch": "^3.0.4",
+            "read-package-json-fast": "^2.0.1"
+          }
+        },
+        "@npmcli/metavuln-calculator": {
+          "version": "1.1.0",
+          "bundled": true,
+          "requires": {
+            "cacache": "^15.0.5",
+            "pacote": "^11.1.11",
+            "semver": "^7.3.2"
+          }
+        },
+        "@npmcli/move-file": {
+          "version": "1.1.2",
+          "bundled": true,
+          "requires": {
+            "mkdirp": "^1.0.4",
+            "rimraf": "^3.0.2"
+          }
+        },
+        "@npmcli/name-from-folder": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "@npmcli/node-gyp": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "@npmcli/promise-spawn": {
+          "version": "1.3.2",
+          "bundled": true,
+          "requires": {
+            "infer-owner": "^1.0.4"
+          }
+        },
+        "@npmcli/run-script": {
+          "version": "1.8.3",
+          "bundled": true,
+          "requires": {
+            "@npmcli/node-gyp": "^1.0.2",
+            "@npmcli/promise-spawn": "^1.3.2",
+            "infer-owner": "^1.0.4",
+            "node-gyp": "^7.1.0",
+            "puka": "^1.0.1",
+            "read-package-json-fast": "^2.0.1"
+          }
+        },
+        "@tootallnate/once": {
+          "version": "1.1.2",
+          "bundled": true
+        },
+        "abbrev": {
           "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
-          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
-          "dev": true,
+          "bundled": true
+        },
+        "agent-base": {
+          "version": "6.0.2",
+          "bundled": true,
           "requires": {
-            "has-symbols": "^1.0.1"
+            "debug": "4"
           }
         },
-        "object-inspect": {
-          "version": "1.9.0",
-          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
-          "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
-          "dev": true
+        "agentkeepalive": {
+          "version": "4.1.4",
+          "bundled": true,
+          "requires": {
+            "debug": "^4.1.0",
+            "depd": "^1.1.2",
+            "humanize-ms": "^1.2.1"
+          }
         },
-        "object.assign": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
-          "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
-          "dev": true,
+        "aggregate-error": {
+          "version": "3.1.0",
+          "bundled": true,
           "requires": {
-            "call-bind": "^1.0.0",
-            "define-properties": "^1.1.3",
-            "has-symbols": "^1.0.1",
-            "object-keys": "^1.1.1"
+            "clean-stack": "^2.0.0",
+            "indent-string": "^4.0.0"
           }
-        }
-      }
-    },
-    "object.fromentries": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
-      "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3"
-      }
-    },
-    "object.getownpropertydescriptors": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
-      "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      }
-    },
-    "object.omit": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
-      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
-      "requires": {
-        "for-own": "^0.1.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=",
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "object.values": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
-      "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3"
-      }
-    },
-    "obuf": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
-      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
-    },
-    "on-finished": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-      "requires": {
-        "ee-first": "1.1.1"
-      }
-    },
-    "on-headers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
-      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "one-time": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz",
-      "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4="
-    },
-    "onetime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
-      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
-      "requires": {
-        "mimic-fn": "^1.0.0"
-      }
-    },
-    "opn": {
-      "version": "5.4.0",
-      "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
-      "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
-      "requires": {
-        "is-wsl": "^1.1.0"
-      }
-    },
-    "optimize-css-assets-webpack-plugin": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz",
-      "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==",
-      "requires": {
-        "cssnano": "^4.1.0",
-        "last-call-webpack-plugin": "^3.0.0"
-      }
-    },
-    "optionator": {
-      "version": "0.8.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
-      "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.6",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "word-wrap": "~1.2.3"
-      }
-    },
-    "original": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
-      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
-      "requires": {
-        "url-parse": "^1.4.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="
-    },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
-    },
-    "os-locale": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
-      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
-      "requires": {
-        "execa": "^1.0.0",
-        "lcid": "^2.0.0",
-        "mem": "^4.0.0"
-      }
-    },
-    "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="
-    },
-    "p-defer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
-      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
-    },
-    "p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
-    },
-    "p-is-promise": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
-      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
-    },
-    "p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-      "requires": {
-        "p-try": "^1.0.0"
-      }
-    },
-    "p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-      "requires": {
-        "p-limit": "^1.1.0"
-      }
-    },
-    "p-map": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
-      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
-    },
-    "p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
-    },
-    "pako": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
-    },
-    "parallel-transform": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
-      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
-      "requires": {
-        "cyclist": "^1.0.1",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.1.5"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+        },
+        "ajv": {
+          "version": "6.12.6",
+          "bundled": 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"
+            "fast-deep-equal": "^3.1.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
           }
         },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true
         },
-        "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==",
+        "ansi-styles": {
+          "version": "4.3.0",
+          "bundled": true,
           "requires": {
-            "safe-buffer": "~5.1.0"
+            "color-convert": "^2.0.1"
           }
-        }
-      }
-    },
-    "param-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
-      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
-      "requires": {
-        "no-case": "^2.2.0"
-      }
-    },
-    "parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "requires": {
-        "callsites": "^3.0.0"
-      }
-    },
-    "parse-asn1": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
-      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
-      "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=",
-      "requires": {
-        "glob-base": "^0.3.0",
-        "is-dotfile": "^1.0.0",
-        "is-extglob": "^1.0.0",
-        "is-glob": "^2.0.0"
-      }
-    },
-    "parse-json": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
-      "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "error-ex": "^1.3.1",
-        "json-parse-better-errors": "^1.0.1",
-        "lines-and-columns": "^1.1.6"
-      }
-    },
-    "parse5": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
-      "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
-    },
-    "parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
-    },
-    "pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
-    },
-    "path-browserify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
-      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
-    },
-    "path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
-    },
-    "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-    },
-    "path-is-inside": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
-      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
-    },
-    "path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
-    },
-    "path-parse": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
-    },
-    "path-to-regexp": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
-      "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
-      "requires": {
-        "isarray": "0.0.1"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-        }
-      }
-    },
-    "path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
-    },
-    "pbkdf2": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
-      "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
-      "requires": {
-        "create-hash": "^1.1.2",
-        "create-hmac": "^1.1.4",
-        "ripemd160": "^2.0.1",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
-    },
-    "picomatch": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
-      "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
-      "optional": true
-    },
-    "pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
-    },
-    "pinkie": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
-    },
-    "pinkie-promise": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "requires": {
-        "pinkie": "^2.0.0"
-      }
-    },
-    "pkg-dir": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-      "requires": {
-        "find-up": "^3.0.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+        },
+        "ansicolors": {
+          "version": "0.3.2",
+          "bundled": true
+        },
+        "ansistyles": {
+          "version": "0.1.3",
+          "bundled": true
+        },
+        "aproba": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "archy": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
           "requires": {
-            "locate-path": "^3.0.0"
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
           }
         },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+        "asap": {
+          "version": "2.0.6",
+          "bundled": true
+        },
+        "asn1": {
+          "version": "0.2.4",
+          "bundled": true,
           "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
+            "safer-buffer": "~2.1.0"
           }
         },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+        "assert-plus": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "asynckit": {
+          "version": "0.4.0",
+          "bundled": true
+        },
+        "aws-sign2": {
+          "version": "0.7.0",
+          "bundled": true
+        },
+        "aws4": {
+          "version": "1.11.0",
+          "bundled": true
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "bcrypt-pbkdf": {
+          "version": "1.0.2",
+          "bundled": true,
           "requires": {
-            "p-try": "^2.0.0"
+            "tweetnacl": "^0.14.3"
           }
         },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+        "bin-links": {
+          "version": "2.2.1",
+          "bundled": true,
           "requires": {
-            "p-limit": "^2.0.0"
+            "cmd-shim": "^4.0.1",
+            "mkdirp": "^1.0.3",
+            "npm-normalize-package-bin": "^1.0.0",
+            "read-cmd-shim": "^2.0.0",
+            "rimraf": "^3.0.0",
+            "write-file-atomic": "^3.0.3"
           }
         },
-        "p-try": {
+        "binary-extensions": {
           "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
-        }
-      }
-    },
-    "pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
-      "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
-      "requires": {
-        "find-up": "^2.1.0"
-      }
-    },
-    "pluralize": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
-      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow=="
-    },
-    "pn": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
-    },
-    "pnp-webpack-plugin": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz",
-      "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==",
-      "requires": {
-        "ts-pnp": "^1.0.0"
-      }
-    },
-    "popper.js": {
-      "version": "1.16.1-lts",
-      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz",
-      "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA=="
-    },
-    "portfinder": {
-      "version": "1.0.26",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
-      "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
-      "requires": {
-        "async": "^2.6.2",
-        "debug": "^3.1.1",
-        "mkdirp": "^0.5.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "bundled": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
           "requires": {
-            "ms": "^2.1.1"
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
           }
         },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
-    },
-    "postcss": {
-      "version": "6.0.23",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
-      "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
-      "requires": {
-        "chalk": "^2.4.1",
-        "source-map": "^0.6.1",
-        "supports-color": "^5.4.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "postcss-attribute-case-insensitive": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz",
-      "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==",
-      "requires": {
-        "postcss": "^7.0.2",
-        "postcss-selector-parser": "^6.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "builtins": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "byte-size": {
+          "version": "7.0.1",
+          "bundled": true
+        },
+        "cacache": {
+          "version": "15.0.5",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "@npmcli/move-file": "^1.0.1",
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
+            "glob": "^7.1.4",
+            "infer-owner": "^1.0.4",
+            "lru-cache": "^6.0.0",
+            "minipass": "^3.1.1",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
+            "mkdirp": "^1.0.3",
+            "p-map": "^4.0.0",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^3.0.2",
+            "ssri": "^8.0.0",
+            "tar": "^6.0.2",
+            "unique-filename": "^1.1.1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "caseless": {
+          "version": "0.12.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "chalk": {
+          "version": "4.1.0",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
           }
-        }
-      }
-    },
-    "postcss-calc": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz",
-      "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==",
-      "requires": {
-        "postcss": "^7.0.27",
-        "postcss-selector-parser": "^6.0.2",
-        "postcss-value-parser": "^4.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "chownr": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "cidr-regex": {
+          "version": "3.1.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "ip-regex": "^4.1.0"
           }
         },
-        "postcss-value-parser": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-          "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "clean-stack": {
+          "version": "2.2.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "cli-columns": {
+          "version": "3.1.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "string-width": "^2.0.0",
+            "strip-ansi": "^3.0.1"
           }
-        }
-      }
-    },
-    "postcss-color-functional-notation": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
-      "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==",
-      "requires": {
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "cli-table3": {
+          "version": "0.6.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "colors": "^1.1.2",
+            "object-assign": "^4.1.0",
+            "string-width": "^4.2.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "5.0.0",
+              "bundled": true
+            },
+            "is-fullwidth-code-point": {
+              "version": "3.0.0",
+              "bundled": true
+            },
+            "string-width": {
+              "version": "4.2.0",
+              "bundled": true,
+              "requires": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.0"
+              }
+            },
+            "strip-ansi": {
+              "version": "6.0.0",
+              "bundled": true,
+              "requires": {
+                "ansi-regex": "^5.0.0"
+              }
+            }
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "clone": {
+          "version": "1.0.4",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "cmd-shim": {
+          "version": "4.1.0",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "mkdirp-infer-owner": "^2.0.0"
           }
-        }
-      }
-    },
-    "postcss-color-gray": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
-      "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==",
-      "requires": {
-        "@csstools/convert-colors": "^1.4.0",
-        "postcss": "^7.0.5",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "color-name": "~1.1.4"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "color-name": {
+          "version": "1.1.4",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "colors": {
+          "version": "1.4.0",
+          "bundled": true,
+          "optional": true
+        },
+        "columnify": {
+          "version": "1.5.4",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "strip-ansi": "^3.0.0",
+            "wcwidth": "^1.0.0"
           }
-        }
-      }
-    },
-    "postcss-color-hex-alpha": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
-      "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
-      "requires": {
-        "postcss": "^7.0.14",
-        "postcss-values-parser": "^2.0.1"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "combined-stream": {
+          "version": "1.0.8",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "delayed-stream": "~1.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "common-ancestor-path": {
+          "version": "1.0.1",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-color-mod-function": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
-      "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==",
-      "requires": {
-        "@csstools/convert-colors": "^1.4.0",
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "dashdash": {
+          "version": "1.14.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "assert-plus": "^1.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "debug": {
+          "version": "4.3.1",
+          "bundled": true,
+          "requires": {
+            "ms": "2.1.2"
+          },
+          "dependencies": {
+            "ms": {
+              "version": "2.1.2",
+              "bundled": true
+            }
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "debuglog": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "defaults": {
+          "version": "1.0.3",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "clone": "^1.0.2"
           }
-        }
-      }
-    },
-    "postcss-color-rebeccapurple": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
-      "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==",
-      "requires": {
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "delayed-stream": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "depd": {
+          "version": "1.1.2",
+          "bundled": true
+        },
+        "dezalgo": {
+          "version": "1.0.3",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "asap": "^2.0.0",
+            "wrappy": "1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "diff": {
+          "version": "5.0.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "ecc-jsbn": {
+          "version": "0.1.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "jsbn": "~0.1.0",
+            "safer-buffer": "^2.1.0"
           }
-        }
-      }
-    },
-    "postcss-colormin": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
-      "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
-      "requires": {
-        "browserslist": "^4.0.0",
-        "color": "^3.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "bundled": true
+        },
+        "encoding": {
+          "version": "0.1.13",
+          "bundled": true,
+          "optional": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "iconv-lite": "^0.6.2"
           }
         },
-        "source-map": {
+        "env-paths": {
+          "version": "2.2.0",
+          "bundled": true
+        },
+        "err-code": {
+          "version": "2.0.3",
+          "bundled": true
+        },
+        "extend": {
+          "version": "3.0.2",
+          "bundled": true
+        },
+        "extsprintf": {
+          "version": "1.3.0",
+          "bundled": true
+        },
+        "fast-deep-equal": {
+          "version": "3.1.3",
+          "bundled": true
+        },
+        "fast-json-stable-stringify": {
+          "version": "2.1.0",
+          "bundled": true
+        },
+        "forever-agent": {
           "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "form-data": {
+          "version": "2.3.3",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
           }
-        }
-      }
-    },
-    "postcss-convert-values": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
-      "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
-      "requires": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "fs-minipass": {
+          "version": "2.1.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "minipass": "^3.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "function-bind": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "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"
+          },
+          "dependencies": {
+            "aproba": {
+              "version": "1.2.0",
+              "bundled": true
+            },
+            "is-fullwidth-code-point": {
+              "version": "1.0.0",
+              "bundled": true,
+              "requires": {
+                "number-is-nan": "^1.0.0"
+              }
+            },
+            "string-width": {
+              "version": "1.0.2",
+              "bundled": true,
+              "requires": {
+                "code-point-at": "^1.0.0",
+                "is-fullwidth-code-point": "^1.0.0",
+                "strip-ansi": "^3.0.0"
+              }
+            }
           }
-        }
-      }
-    },
-    "postcss-custom-media": {
-      "version": "7.0.8",
-      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
-      "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
-      "requires": {
-        "postcss": "^7.0.14"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "getpass": {
+          "version": "0.1.7",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "assert-plus": "^1.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "glob": {
+          "version": "7.1.6",
+          "bundled": 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"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "graceful-fs": {
+          "version": "4.2.6",
+          "bundled": true
+        },
+        "har-schema": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "har-validator": {
+          "version": "5.1.5",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "ajv": "^6.12.3",
+            "har-schema": "^2.0.0"
           }
-        }
-      }
-    },
-    "postcss-custom-properties": {
-      "version": "8.0.11",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
-      "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==",
-      "requires": {
-        "postcss": "^7.0.17",
-        "postcss-values-parser": "^2.0.1"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "has": {
+          "version": "1.0.3",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "function-bind": "^1.1.1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "has-flag": {
+          "version": "4.0.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "hosted-git-info": {
+          "version": "3.0.8",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "lru-cache": "^6.0.0"
           }
-        }
-      }
-    },
-    "postcss-custom-selectors": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
-      "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==",
-      "requires": {
-        "postcss": "^7.0.2",
-        "postcss-selector-parser": "^5.0.0-rc.3"
-      },
-      "dependencies": {
-        "cssesc": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
-          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
         },
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "http-cache-semantics": {
+          "version": "4.1.0",
+          "bundled": true
+        },
+        "http-proxy-agent": {
+          "version": "4.0.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "@tootallnate/once": "1",
+            "agent-base": "6",
+            "debug": "4"
           }
         },
-        "postcss-selector-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+        "http-signature": {
+          "version": "1.2.0",
+          "bundled": true,
           "requires": {
-            "cssesc": "^2.0.0",
-            "indexes-of": "^1.0.1",
-            "uniq": "^1.0.1"
+            "assert-plus": "^1.0.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "https-proxy-agent": {
+          "version": "5.0.0",
+          "bundled": true,
+          "requires": {
+            "agent-base": "6",
+            "debug": "4"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "humanize-ms": {
+          "version": "1.2.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "ms": "^2.0.0"
           }
-        }
-      }
-    },
-    "postcss-dir-pseudo-class": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
-      "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==",
-      "requires": {
-        "postcss": "^7.0.2",
-        "postcss-selector-parser": "^5.0.0-rc.3"
-      },
-      "dependencies": {
-        "cssesc": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
-          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
         },
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "iconv-lite": {
+          "version": "0.6.2",
+          "bundled": true,
+          "optional": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "safer-buffer": ">= 2.1.2 < 3.0.0"
           }
         },
-        "postcss-selector-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+        "ignore-walk": {
+          "version": "3.0.3",
+          "bundled": true,
           "requires": {
-            "cssesc": "^2.0.0",
-            "indexes-of": "^1.0.1",
-            "uniq": "^1.0.1"
+            "minimatch": "^3.0.4"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "imurmurhash": {
+          "version": "0.1.4",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "indent-string": {
+          "version": "4.0.0",
+          "bundled": true
+        },
+        "infer-owner": {
+          "version": "1.0.4",
+          "bundled": true
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "once": "^1.3.0",
+            "wrappy": "1"
           }
-        }
-      }
-    },
-    "postcss-discard-comments": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
-      "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
-      "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "inherits": {
+          "version": "2.0.4",
+          "bundled": true
+        },
+        "ini": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "init-package-json": {
+          "version": "2.0.2",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "glob": "^7.1.1",
+            "npm-package-arg": "^8.1.0",
+            "promzard": "^0.3.0",
+            "read": "~1.0.1",
+            "read-package-json": "^3.0.0",
+            "semver": "^7.3.2",
+            "validate-npm-package-license": "^3.0.4",
+            "validate-npm-package-name": "^3.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "ip": {
+          "version": "1.1.5",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "ip-regex": {
+          "version": "4.3.0",
+          "bundled": true
+        },
+        "is-cidr": {
+          "version": "4.0.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "cidr-regex": "^3.1.1"
           }
-        }
-      }
-    },
-    "postcss-discard-duplicates": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
-      "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
-      "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "is-core-module": {
+          "version": "2.2.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "has": "^1.0.3"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "is-lambda": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "is-typedarray": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "isexe": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "isstream": {
+          "version": "0.1.2",
+          "bundled": true
+        },
+        "jsbn": {
+          "version": "0.1.1",
+          "bundled": true
+        },
+        "json-parse-even-better-errors": {
+          "version": "2.3.1",
+          "bundled": true
+        },
+        "json-schema": {
+          "version": "0.2.3",
+          "bundled": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "bundled": true
+        },
+        "json-stringify-nice": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "json-stringify-safe": {
+          "version": "5.0.1",
+          "bundled": true
+        },
+        "jsonparse": {
+          "version": "1.3.1",
+          "bundled": true
+        },
+        "jsprim": {
+          "version": "1.4.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "assert-plus": "1.0.0",
+            "extsprintf": "1.3.0",
+            "json-schema": "0.2.3",
+            "verror": "1.10.0"
           }
-        }
-      }
-    },
-    "postcss-discard-empty": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
-      "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
-      "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "just-diff": {
+          "version": "3.0.2",
+          "bundled": true
+        },
+        "just-diff-apply": {
+          "version": "3.0.0",
+          "bundled": true
+        },
+        "leven": {
+          "version": "3.1.0",
+          "bundled": true
+        },
+        "libnpmaccess": {
+          "version": "4.0.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "aproba": "^2.0.0",
+            "minipass": "^3.1.1",
+            "npm-package-arg": "^8.0.0",
+            "npm-registry-fetch": "^9.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "libnpmdiff": {
+          "version": "2.0.4",
+          "bundled": true,
+          "requires": {
+            "@npmcli/disparity-colors": "^1.0.1",
+            "@npmcli/installed-package-contents": "^1.0.7",
+            "binary-extensions": "^2.2.0",
+            "diff": "^5.0.0",
+            "minimatch": "^3.0.4",
+            "npm-package-arg": "^8.1.1",
+            "pacote": "^11.3.0",
+            "tar": "^6.1.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "libnpmfund": {
+          "version": "1.0.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "@npmcli/arborist": "^2.0.0"
           }
-        }
-      }
-    },
-    "postcss-discard-overridden": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
-      "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
-      "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "libnpmhook": {
+          "version": "6.0.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "aproba": "^2.0.0",
+            "npm-registry-fetch": "^9.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "libnpmorg": {
+          "version": "2.0.1",
+          "bundled": true,
+          "requires": {
+            "aproba": "^2.0.0",
+            "npm-registry-fetch": "^9.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "libnpmpack": {
+          "version": "2.0.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "@npmcli/run-script": "^1.8.3",
+            "npm-package-arg": "^8.1.0",
+            "pacote": "^11.2.6"
           }
-        }
-      }
-    },
-    "postcss-double-position-gradients": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
-      "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==",
-      "requires": {
-        "postcss": "^7.0.5",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "libnpmpublish": {
+          "version": "4.0.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "normalize-package-data": "^3.0.0",
+            "npm-package-arg": "^8.1.0",
+            "npm-registry-fetch": "^9.0.0",
+            "semver": "^7.1.3",
+            "ssri": "^8.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "libnpmsearch": {
+          "version": "3.1.0",
+          "bundled": true,
+          "requires": {
+            "npm-registry-fetch": "^9.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "libnpmteam": {
+          "version": "2.0.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "aproba": "^2.0.0",
+            "npm-registry-fetch": "^9.0.0"
           }
-        }
-      }
-    },
-    "postcss-env-function": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
-      "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==",
-      "requires": {
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "libnpmversion": {
+          "version": "1.0.11",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "@npmcli/git": "^2.0.6",
+            "@npmcli/run-script": "^1.8.3",
+            "read-package-json-fast": "^2.0.1",
+            "semver": "^7.3.4",
+            "stringify-package": "^1.0.1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "lru-cache": {
+          "version": "6.0.0",
+          "bundled": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "make-fetch-happen": {
+          "version": "8.0.14",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "agentkeepalive": "^4.1.3",
+            "cacache": "^15.0.5",
+            "http-cache-semantics": "^4.1.0",
+            "http-proxy-agent": "^4.0.1",
+            "https-proxy-agent": "^5.0.0",
+            "is-lambda": "^1.0.1",
+            "lru-cache": "^6.0.0",
+            "minipass": "^3.1.3",
+            "minipass-collect": "^1.0.2",
+            "minipass-fetch": "^1.3.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.4",
+            "promise-retry": "^2.0.1",
+            "socks-proxy-agent": "^5.0.0",
+            "ssri": "^8.0.0"
+          }
+        },
+        "mime-db": {
+          "version": "1.45.0",
+          "bundled": true
+        },
+        "mime-types": {
+          "version": "2.1.28",
+          "bundled": true,
+          "requires": {
+            "mime-db": "1.45.0"
           }
-        }
-      }
-    },
-    "postcss-flexbugs-fixes": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz",
-      "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==",
-      "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "brace-expansion": "^1.1.7"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "minipass": {
+          "version": "3.1.3",
+          "bundled": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "minipass-collect": {
+          "version": "1.0.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "minipass": "^3.0.0"
           }
-        }
-      }
-    },
-    "postcss-focus-visible": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
-      "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==",
-      "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "minipass-fetch": {
+          "version": "1.3.3",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "encoding": "^0.1.12",
+            "minipass": "^3.1.0",
+            "minipass-sized": "^1.0.3",
+            "minizlib": "^2.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "minipass-flush": {
+          "version": "1.0.5",
+          "bundled": true,
+          "requires": {
+            "minipass": "^3.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "minipass-json-stream": {
+          "version": "1.0.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "jsonparse": "^1.3.1",
+            "minipass": "^3.0.0"
           }
-        }
-      }
-    },
-    "postcss-focus-within": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
-      "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==",
-      "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "minipass-pipeline": {
+          "version": "1.2.4",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "minipass": "^3.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "minipass-sized": {
+          "version": "1.0.3",
+          "bundled": true,
+          "requires": {
+            "minipass": "^3.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "minizlib": {
+          "version": "2.1.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "minipass": "^3.0.0",
+            "yallist": "^4.0.0"
           }
-        }
-      }
-    },
-    "postcss-font-variant": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz",
-      "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==",
-      "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "mkdirp": {
+          "version": "1.0.4",
+          "bundled": true
+        },
+        "mkdirp-infer-owner": {
+          "version": "2.0.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "chownr": "^2.0.0",
+            "infer-owner": "^1.0.4",
+            "mkdirp": "^1.0.3"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "ms": {
+          "version": "2.1.3",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "mute-stream": {
+          "version": "0.0.8",
+          "bundled": true
+        },
+        "node-gyp": {
+          "version": "7.1.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "env-paths": "^2.2.0",
+            "glob": "^7.1.4",
+            "graceful-fs": "^4.2.3",
+            "nopt": "^5.0.0",
+            "npmlog": "^4.1.2",
+            "request": "^2.88.2",
+            "rimraf": "^3.0.2",
+            "semver": "^7.3.2",
+            "tar": "^6.0.2",
+            "which": "^2.0.2"
           }
-        }
-      }
-    },
-    "postcss-gap-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
-      "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==",
-      "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "nopt": {
+          "version": "5.0.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "abbrev": "1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "normalize-package-data": {
+          "version": "3.0.0",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "hosted-git-info": "^3.0.6",
+            "resolve": "^1.17.0",
+            "semver": "^7.3.2",
+            "validate-npm-package-license": "^3.0.1"
           }
-        }
-      }
-    },
-    "postcss-image-set-function": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
-      "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==",
-      "requires": {
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "npm-audit-report": {
+          "version": "2.1.4",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "chalk": "^4.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "npm-bundled": {
+          "version": "1.1.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "npm-normalize-package-bin": "^1.0.1"
           }
-        }
-      }
-    },
-    "postcss-initial": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz",
-      "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==",
-      "requires": {
-        "lodash.template": "^4.5.0",
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "npm-install-checks": {
+          "version": "4.0.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "semver": "^7.1.1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "npm-normalize-package-bin": {
+          "version": "1.0.1",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "npm-package-arg": {
+          "version": "8.1.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "hosted-git-info": "^3.0.6",
+            "semver": "^7.0.0",
+            "validate-npm-package-name": "^3.0.0"
           }
-        }
-      }
-    },
-    "postcss-lab-function": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
-      "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==",
-      "requires": {
-        "@csstools/convert-colors": "^1.4.0",
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "npm-packlist": {
+          "version": "2.1.4",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "glob": "^7.1.6",
+            "ignore-walk": "^3.0.3",
+            "npm-bundled": "^1.1.1",
+            "npm-normalize-package-bin": "^1.0.1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
+        "npm-pick-manifest": {
           "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "npm-install-checks": "^4.0.0",
+            "npm-package-arg": "^8.0.0",
+            "semver": "^7.0.0"
           }
-        }
-      }
-    },
-    "postcss-load-config": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
-      "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
-      "requires": {
-        "cosmiconfig": "^5.0.0",
-        "import-cwd": "^2.0.0"
-      },
-      "dependencies": {
-        "cosmiconfig": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
-          "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+        },
+        "npm-profile": {
+          "version": "5.0.2",
+          "bundled": true,
           "requires": {
-            "import-fresh": "^2.0.0",
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.13.1",
-            "parse-json": "^4.0.0"
+            "npm-registry-fetch": "^9.0.0"
           }
         },
-        "import-fresh": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
-          "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+        "npm-registry-fetch": {
+          "version": "9.0.0",
+          "bundled": true,
           "requires": {
-            "caller-path": "^2.0.0",
-            "resolve-from": "^3.0.0"
+            "@npmcli/ci-detect": "^1.0.0",
+            "lru-cache": "^6.0.0",
+            "make-fetch-happen": "^8.0.9",
+            "minipass": "^3.1.3",
+            "minipass-fetch": "^1.3.0",
+            "minipass-json-stream": "^1.0.1",
+            "minizlib": "^2.0.0",
+            "npm-package-arg": "^8.0.0"
           }
         },
-        "js-yaml": {
-          "version": "3.14.0",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
-          "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+        "npm-user-validate": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
           "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
           }
         },
-        "parse-json": {
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "oauth-sign": {
+          "version": "0.9.0",
+          "bundled": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "opener": {
+          "version": "1.5.2",
+          "bundled": true
+        },
+        "p-map": {
           "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "bundled": true,
           "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
+            "aggregate-error": "^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="
-        }
-      }
-    },
-    "postcss-loader": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
-      "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
-      "requires": {
-        "loader-utils": "^1.1.0",
-        "postcss": "^7.0.0",
-        "postcss-load-config": "^2.0.0",
-        "schema-utils": "^1.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "pacote": {
+          "version": "11.3.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "@npmcli/git": "^2.0.1",
+            "@npmcli/installed-package-contents": "^1.0.6",
+            "@npmcli/promise-spawn": "^1.2.0",
+            "@npmcli/run-script": "^1.8.2",
+            "cacache": "^15.0.5",
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.1.0",
+            "infer-owner": "^1.0.4",
+            "minipass": "^3.1.3",
+            "mkdirp": "^1.0.3",
+            "npm-package-arg": "^8.0.1",
+            "npm-packlist": "^2.1.4",
+            "npm-pick-manifest": "^6.0.0",
+            "npm-registry-fetch": "^9.0.0",
+            "promise-retry": "^2.0.1",
+            "read-package-json-fast": "^2.0.1",
+            "rimraf": "^3.0.2",
+            "ssri": "^8.0.1",
+            "tar": "^6.1.0"
+          }
+        },
+        "parse-conflict-json": {
+          "version": "1.1.1",
+          "bundled": true,
+          "requires": {
+            "json-parse-even-better-errors": "^2.3.0",
+            "just-diff": "^3.0.1",
+            "just-diff-apply": "^3.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "path-parse": {
+          "version": "1.0.6",
+          "bundled": true
+        },
+        "performance-now": {
+          "version": "2.1.0",
+          "bundled": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "promise-all-reject-late": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "promise-call-limit": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "promise-inflight": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "promise-retry": {
+          "version": "2.0.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "err-code": "^2.0.2",
+            "retry": "^0.12.0"
           }
-        }
-      }
-    },
-    "postcss-logical": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
-      "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==",
-      "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "promzard": {
+          "version": "0.3.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "read": "1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "psl": {
+          "version": "1.8.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "puka": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "punycode": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "qrcode-terminal": {
+          "version": "0.12.0",
+          "bundled": true
+        },
+        "qs": {
+          "version": "6.5.2",
+          "bundled": true
+        },
+        "read": {
+          "version": "1.0.7",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "mute-stream": "~0.0.4"
           }
-        }
-      }
-    },
-    "postcss-media-minmax": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
-      "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==",
-      "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "read-cmd-shim": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "read-package-json": {
+          "version": "3.0.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "glob": "^7.1.1",
+            "json-parse-even-better-errors": "^2.3.0",
+            "normalize-package-data": "^3.0.0",
+            "npm-normalize-package-bin": "^1.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "read-package-json-fast": {
+          "version": "2.0.2",
+          "bundled": true,
+          "requires": {
+            "json-parse-even-better-errors": "^2.3.0",
+            "npm-normalize-package-bin": "^1.0.1"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "readable-stream": {
+          "version": "2.3.7",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "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"
           }
-        }
-      }
-    },
-    "postcss-merge-longhand": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
-      "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
-      "requires": {
-        "css-color-names": "0.0.4",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0",
-        "stylehacks": "^4.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "readdir-scoped-modules": {
+          "version": "1.1.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "debuglog": "^1.0.1",
+            "dezalgo": "^1.0.0",
+            "graceful-fs": "^4.1.2",
+            "once": "^1.3.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "request": {
+          "version": "2.88.2",
+          "bundled": 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.3",
+            "http-signature": "~1.2.0",
+            "is-typedarray": "~1.0.0",
+            "isstream": "~0.1.2",
+            "json-stringify-safe": "~5.0.1",
+            "mime-types": "~2.1.19",
+            "oauth-sign": "~0.9.0",
+            "performance-now": "^2.1.0",
+            "qs": "~6.5.2",
+            "safe-buffer": "^5.1.2",
+            "tough-cookie": "~2.5.0",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.3.2"
+          },
+          "dependencies": {
+            "tough-cookie": {
+              "version": "2.5.0",
+              "bundled": true,
+              "requires": {
+                "psl": "^1.1.28",
+                "punycode": "^2.1.1"
+              }
+            }
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "resolve": {
+          "version": "1.20.0",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "is-core-module": "^2.2.0",
+            "path-parse": "^1.0.6"
           }
-        }
-      }
-    },
-    "postcss-merge-rules": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
-      "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
-      "requires": {
-        "browserslist": "^4.0.0",
-        "caniuse-api": "^3.0.0",
-        "cssnano-util-same-parent": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-selector-parser": "^3.0.0",
-        "vendors": "^1.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "retry": {
+          "version": "0.12.0",
+          "bundled": true
+        },
+        "rimraf": {
+          "version": "3.0.2",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "glob": "^7.1.3"
           }
         },
-        "postcss-selector-parser": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true
+        },
+        "semver": {
+          "version": "7.3.4",
+          "bundled": true,
           "requires": {
-            "dot-prop": "^5.2.0",
-            "indexes-of": "^1.0.1",
-            "uniq": "^1.0.1"
+            "lru-cache": "^6.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "signal-exit": {
+          "version": "3.0.3",
+          "bundled": true
+        },
+        "smart-buffer": {
+          "version": "4.1.0",
+          "bundled": true
+        },
+        "socks": {
+          "version": "2.5.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "ip": "^1.1.5",
+            "smart-buffer": "^4.1.0"
           }
-        }
-      }
-    },
-    "postcss-minify-font-values": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
-      "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
-      "requires": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "socks-proxy-agent": {
+          "version": "5.0.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "agent-base": "6",
+            "debug": "4",
+            "socks": "^2.3.3"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "spdx-correct": {
+          "version": "3.1.1",
+          "bundled": true,
+          "requires": {
+            "spdx-expression-parse": "^3.0.0",
+            "spdx-license-ids": "^3.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "spdx-exceptions": {
+          "version": "2.3.0",
+          "bundled": true
+        },
+        "spdx-expression-parse": {
+          "version": "3.0.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "spdx-exceptions": "^2.1.0",
+            "spdx-license-ids": "^3.0.0"
           }
-        }
-      }
-    },
-    "postcss-minify-gradients": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
-      "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
-      "requires": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "is-color-stop": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "spdx-license-ids": {
+          "version": "3.0.7",
+          "bundled": true
+        },
+        "sshpk": {
+          "version": "1.16.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "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"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "ssri": {
+          "version": "8.0.1",
+          "bundled": true,
+          "requires": {
+            "minipass": "^3.1.1"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "string-width": {
+          "version": "2.1.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "3.0.0",
+              "bundled": true
+            },
+            "strip-ansi": {
+              "version": "4.0.0",
+              "bundled": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
           }
-        }
-      }
-    },
-    "postcss-minify-params": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
-      "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
-      "requires": {
-        "alphanum-sort": "^1.0.0",
-        "browserslist": "^4.0.0",
-        "cssnano-util-get-arguments": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0",
-        "uniqs": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "safe-buffer": "~5.1.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "stringify-package": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
         },
         "supports-color": {
+          "version": "7.2.0",
+          "bundled": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "tar": {
           "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
+            "minipass": "^3.0.0",
+            "minizlib": "^2.1.1",
+            "mkdirp": "^1.0.3",
+            "yallist": "^4.0.0"
           }
-        }
-      }
-    },
-    "postcss-minify-selectors": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
-      "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
-      "requires": {
-        "alphanum-sort": "^1.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-selector-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "text-table": {
+          "version": "0.2.0",
+          "bundled": true
+        },
+        "tiny-relative-date": {
+          "version": "1.3.0",
+          "bundled": true
+        },
+        "treeverse": {
+          "version": "1.0.4",
+          "bundled": true
+        },
+        "tunnel-agent": {
+          "version": "0.6.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "safe-buffer": "^5.0.1"
           }
         },
-        "postcss-selector-parser": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+        "tweetnacl": {
+          "version": "0.14.5",
+          "bundled": true
+        },
+        "typedarray-to-buffer": {
+          "version": "3.1.5",
+          "bundled": true,
           "requires": {
-            "dot-prop": "^5.2.0",
-            "indexes-of": "^1.0.1",
-            "uniq": "^1.0.1"
+            "is-typedarray": "^1.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "unique-filename": {
+          "version": "1.1.1",
+          "bundled": true,
+          "requires": {
+            "unique-slug": "^2.0.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "unique-slug": {
+          "version": "2.0.2",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "imurmurhash": "^0.1.4"
           }
-        }
-      }
-    },
-    "postcss-modules-extract-imports": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
-      "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
-      "requires": {
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-modules-local-by-default": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
-      "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
-      "requires": {
-        "css-selector-tokenizer": "^0.7.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-modules-scope": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
-      "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
-      "requires": {
-        "css-selector-tokenizer": "^0.7.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-modules-values": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
-      "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
-      "requires": {
-        "icss-replace-symbols": "^1.1.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-nesting": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
-      "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==",
-      "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "uri-js": {
+          "version": "4.4.1",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "punycode": "^2.1.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "uuid": {
+          "version": "3.4.0",
+          "bundled": true
+        },
+        "validate-npm-package-license": {
+          "version": "3.0.4",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "spdx-correct": "^3.0.0",
+            "spdx-expression-parse": "^3.0.0"
           }
-        }
-      }
-    },
-    "postcss-normalize-charset": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
-      "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
-      "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "validate-npm-package-name": {
+          "version": "3.0.0",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "builtins": "^1.0.3"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "verror": {
+          "version": "1.10.0",
+          "bundled": true,
+          "requires": {
+            "assert-plus": "^1.0.0",
+            "core-util-is": "1.0.2",
+            "extsprintf": "^1.2.0"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "walk-up-path": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "wcwidth": {
+          "version": "1.0.1",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "defaults": "^1.0.3"
           }
-        }
-      }
-    },
-    "postcss-normalize-display-values": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
-      "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
-      "requires": {
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        },
+        "which": {
+          "version": "2.0.2",
+          "bundled": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "isexe": "^2.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "requires": {
+            "string-width": "^1.0.2 || 2"
+          }
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "write-file-atomic": {
+          "version": "3.0.3",
+          "bundled": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "imurmurhash": "^0.1.4",
+            "is-typedarray": "^1.0.0",
+            "signal-exit": "^3.0.2",
+            "typedarray-to-buffer": "^3.1.5"
           }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "bundled": true
         }
       }
     },
-    "postcss-normalize-positions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
-      "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
-      "requires": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "requires": {
+        "path-key": "^2.0.0"
       }
     },
-    "postcss-normalize-repeat-style": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
-      "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
       "requires": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
+        "boolbase": "~1.0.0"
+      }
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+    },
+    "nwsapi": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
       },
       "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "requires": {
-            "has-flag": "^3.0.0"
+            "is-descriptor": "^0.1.0"
           }
         }
       }
     },
-    "postcss-normalize-string": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
-      "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+    "object-hash": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
+    },
+    "object-inspect": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
+    },
+    "object-is": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+      "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
       "requires": {
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.5"
+      }
+    },
+    "object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.assign": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "function-bind": "^1.1.1",
+        "has-symbols": "^1.0.0",
+        "object-keys": "^1.0.11"
+      }
+    },
+    "object.entries": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz",
+      "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.1",
+        "has": "^1.0.3"
       },
       "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "dev": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "is-callable": {
+          "version": "1.2.2",
+          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+          "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
+          "dev": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-timing-functions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
-      "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
-      "requires": {
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "dev": true,
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "has-symbols": "^1.0.1"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "object-inspect": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
+          "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
+          "dev": true
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "object.assign": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+          "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+          "dev": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "call-bind": "^1.0.0",
+            "define-properties": "^1.1.3",
+            "has-symbols": "^1.0.1",
+            "object-keys": "^1.1.1"
           }
         }
       }
     },
-    "postcss-normalize-unicode": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
-      "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+    "object.fromentries": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
+      "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
       "requires": {
-        "browserslist": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.0-next.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
       }
     },
-    "postcss-normalize-url": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
-      "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+    "object.getownpropertydescriptors": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
+      "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
       "requires": {
-        "is-absolute-url": "^2.0.0",
-        "normalize-url": "^3.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.0-next.1"
       }
     },
-    "postcss-normalize-whitespace": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
-      "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
       "requires": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
       }
     },
-    "postcss-ordered-values": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
-      "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
       "requires": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "isobject": "^3.0.1"
       }
     },
-    "postcss-overflow-shorthand": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
-      "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==",
+    "object.values": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
+      "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
       "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.0-next.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
       }
     },
-    "postcss-page-break": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
-      "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==",
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
+    },
+    "omit.js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-1.0.2.tgz",
+      "integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==",
       "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "babel-runtime": "^6.23.0"
       }
     },
-    "postcss-place": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
-      "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==",
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
       "requires": {
-        "postcss": "^7.0.2",
-        "postcss-values-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "ee-first": "1.1.1"
       }
     },
-    "postcss-preset-env": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.5.0.tgz",
-      "integrity": "sha512-RdsIrYJd9p9AouQoJ8dFP5ksBJEIegA4q4WzJDih8nevz3cZyIP/q1Eaw3pTVpUAu3n7Y32YmvAW3X07mSRGkw==",
+    "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=="
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
       "requires": {
-        "autoprefixer": "^9.4.2",
-        "browserslist": "^4.3.5",
-        "caniuse-lite": "^1.0.30000918",
-        "css-blank-pseudo": "^0.1.4",
-        "css-has-pseudo": "^0.10.0",
-        "css-prefers-color-scheme": "^3.1.1",
-        "cssdb": "^4.3.0",
-        "postcss": "^7.0.6",
-        "postcss-attribute-case-insensitive": "^4.0.0",
-        "postcss-color-functional-notation": "^2.0.1",
-        "postcss-color-gray": "^5.0.0",
-        "postcss-color-hex-alpha": "^5.0.2",
-        "postcss-color-mod-function": "^3.0.3",
-        "postcss-color-rebeccapurple": "^4.0.1",
-        "postcss-custom-media": "^7.0.7",
-        "postcss-custom-properties": "^8.0.9",
-        "postcss-custom-selectors": "^5.1.2",
-        "postcss-dir-pseudo-class": "^5.0.0",
-        "postcss-double-position-gradients": "^1.0.0",
-        "postcss-env-function": "^2.0.2",
-        "postcss-focus-visible": "^4.0.0",
-        "postcss-focus-within": "^3.0.0",
-        "postcss-font-variant": "^4.0.0",
-        "postcss-gap-properties": "^2.0.0",
-        "postcss-image-set-function": "^3.0.1",
-        "postcss-initial": "^3.0.0",
-        "postcss-lab-function": "^2.0.1",
-        "postcss-logical": "^3.0.0",
-        "postcss-media-minmax": "^4.0.0",
-        "postcss-nesting": "^7.0.0",
-        "postcss-overflow-shorthand": "^2.0.0",
-        "postcss-page-break": "^2.0.0",
-        "postcss-place": "^4.0.1",
-        "postcss-pseudo-class-any-link": "^6.0.0",
-        "postcss-replace-overflow-wrap": "^3.0.0",
-        "postcss-selector-matches": "^4.0.0",
-        "postcss-selector-not": "^4.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "wrappy": "1"
       }
     },
-    "postcss-pseudo-class-any-link": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
-      "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==",
+    "one-time": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz",
+      "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4="
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
       "requires": {
-        "postcss": "^7.0.2",
-        "postcss-selector-parser": "^5.0.0-rc.3"
-      },
-      "dependencies": {
-        "cssesc": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
-          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
-        },
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "postcss-selector-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-          "requires": {
-            "cssesc": "^2.0.0",
-            "indexes-of": "^1.0.1",
-            "uniq": "^1.0.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "mimic-fn": "^1.0.0"
       }
     },
-    "postcss-reduce-initial": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
-      "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+    "opn": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+      "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
       "requires": {
-        "browserslist": "^4.0.0",
-        "caniuse-api": "^3.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "is-wsl": "^1.1.0"
       }
     },
-    "postcss-reduce-transforms": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
-      "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+    "optimize-css-assets-webpack-plugin": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz",
+      "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==",
       "requires": {
-        "cssnano-util-get-match": "^4.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "cssnano": "^4.1.0",
+        "last-call-webpack-plugin": "^3.0.0"
       }
     },
-    "postcss-replace-overflow-wrap": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
-      "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==",
+    "optionator": {
+      "version": "0.8.3",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
       "requires": {
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.6",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "word-wrap": "~1.2.3"
       }
     },
-    "postcss-safe-parser": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
-      "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
       "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "url-parse": "^1.4.3"
       }
     },
-    "postcss-selector-matches": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
-      "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==",
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+    },
+    "os-locale": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
       "requires": {
-        "balanced-match": "^1.0.0",
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "execa": "^1.0.0",
+        "lcid": "^2.0.0",
+        "mem": "^4.0.0"
       }
     },
-    "postcss-selector-not": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz",
-      "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==",
+    "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="
+    },
+    "p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+    },
+    "p-is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
+    },
+    "p-limit": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
       "requires": {
-        "balanced-match": "^1.0.0",
-        "postcss": "^7.0.2"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "p-try": "^1.0.0"
       }
     },
-    "postcss-selector-parser": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
-      "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+    "p-locate": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
       "requires": {
-        "cssesc": "^3.0.0",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
+        "p-limit": "^1.1.0"
       }
     },
-    "postcss-svgo": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
-      "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+    "p-map": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
+    },
+    "p-try": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+    },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
       "requires": {
-        "is-svg": "^3.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0",
-        "svgo": "^1.0.0"
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
       },
       "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
           "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
+            "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"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        "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=="
         },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "requires": {
-            "has-flag": "^3.0.0"
+            "safe-buffer": "~5.1.0"
           }
         }
       }
     },
-    "postcss-unique-selectors": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
-      "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+    "param-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
       "requires": {
-        "alphanum-sort": "^1.0.0",
-        "postcss": "^7.0.0",
-        "uniqs": "^2.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
+        "no-case": "^2.2.0"
       }
     },
-    "postcss-value-parser": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
-    },
-    "postcss-values-parser": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
-      "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
+    "parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "requires": {
-        "flatten": "^1.0.2",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
+        "callsites": "^3.0.0"
       }
     },
-    "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
-    },
-    "preserve": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
-      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
-    },
-    "prettier": {
-      "version": "1.18.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
-      "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
-      "dev": true
-    },
-    "prettier-linter-helpers": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
-      "dev": true,
+    "parse-asn1": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
+      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
       "requires": {
-        "fast-diff": "^1.1.2"
+        "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"
       }
     },
-    "pretty-bytes": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
-      "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk="
+    "parse-glob": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      }
     },
-    "pretty-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
-      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+    "parse-json": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+      "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
       "requires": {
-        "renderkid": "^2.0.1",
-        "utila": "~0.4"
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1",
+        "lines-and-columns": "^1.1.6"
       }
     },
-    "pretty-format": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
-      "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+    "parse-passwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+    },
+    "parse5": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+      "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
+    },
+    "parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+      "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
       "requires": {
-        "ansi-regex": "^3.0.0",
-        "ansi-styles": "^3.2.0"
+        "parse5": "^6.0.1"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        "parse5": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+          "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
         }
       }
     },
-    "private": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
     },
-    "process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
     },
-    "process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    "path-browserify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
     },
-    "progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
     },
-    "promise": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz",
-      "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==",
-      "requires": {
-        "asap": "~2.0.6"
-      }
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
     },
-    "promise-inflight": {
+    "path-is-absolute": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
-    },
-    "promised-io": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.6.tgz",
-      "integrity": "sha512-bNwZusuNIW4m0SPR8jooSyndD35ggirHlxVl/UhIaZD/F0OBv9ebfc6tNmbpZts3QXHggkjIBH8lvtnzhtcz0A=="
-    },
-    "prompts": {
-      "version": "0.1.14",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz",
-      "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==",
-      "requires": {
-        "kleur": "^2.0.1",
-        "sisteransi": "^0.1.1"
-      }
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
     },
-    "prop-types": {
-      "version": "15.7.2",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-      "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.8.1"
-      }
+    "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="
     },
-    "proxy-addr": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
-      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
-      "requires": {
-        "forwarded": "~0.1.2",
-        "ipaddr.js": "1.9.1"
-      }
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
     },
-    "prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+    "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=="
     },
-    "psl": {
+    "path-to-regexp": {
       "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
-    },
-    "public-encrypt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+      "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
       "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"
+        "isarray": "0.0.1"
       },
       "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
         }
       }
     },
-    "pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
+    "path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
     },
-    "pumpify": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+    "pbkdf2": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+      "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
       "requires": {
-        "duplexify": "^3.6.0",
-        "inherits": "^2.0.3",
-        "pump": "^2.0.0"
-      },
-      "dependencies": {
-        "pump": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
-          "requires": {
-            "end-of-stream": "^1.1.0",
-            "once": "^1.3.1"
-          }
-        }
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
-    "punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
-    },
-    "q": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
-    },
-    "qs": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
     },
-    "querystring": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+    "picomatch": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+      "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+      "optional": true
     },
-    "querystring-es3": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
     },
-    "querystringify": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
-      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
     },
-    "raf": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
-      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
       "requires": {
-        "performance-now": "^2.1.0"
+        "pinkie": "^2.0.0"
       }
     },
-    "randomatic": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
-      "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+    "pkg-dir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
       "requires": {
-        "is-number": "^4.0.0",
-        "kind-of": "^6.0.0",
-        "math-random": "^1.0.1"
+        "find-up": "^3.0.0"
       },
       "dependencies": {
-        "is-number": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
-          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
         },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
         }
       }
     },
-    "randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+    "pkg-up": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
+      "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
       "requires": {
-        "safe-buffer": "^5.1.0"
+        "find-up": "^2.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==",
+    "pluralize": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow=="
+    },
+    "pn": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
+    },
+    "pnp-webpack-plugin": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz",
+      "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==",
       "requires": {
-        "randombytes": "^2.0.5",
-        "safe-buffer": "^5.1.0"
+        "ts-pnp": "^1.0.0"
       }
     },
-    "range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+    "popper.js": {
+      "version": "1.16.1-lts",
+      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz",
+      "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA=="
     },
-    "raw-body": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
-      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+    "portfinder": {
+      "version": "1.0.26",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
+      "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
       "requires": {
-        "bytes": "3.1.0",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
+        "async": "^2.6.2",
+        "debug": "^3.1.1",
+        "mkdirp": "^0.5.1"
       },
       "dependencies": {
-        "bytes": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
-          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
         }
       }
     },
-    "react": {
-      "version": "16.14.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
-      "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2"
-      }
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
     },
-    "react-app-polyfill": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.2.2.tgz",
-      "integrity": "sha512-mAYn96B/nB6kWG87Ry70F4D4rsycU43VYTj3ZCbKP+SLJXwC0x6YCbwcICh3uW8/C9s1VgP197yx+w7SCWeDdQ==",
+    "postcss": {
+      "version": "6.0.23",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+      "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
       "requires": {
-        "core-js": "2.6.4",
-        "object-assign": "4.1.1",
-        "promise": "8.0.2",
-        "raf": "3.4.1",
-        "whatwg-fetch": "3.0.0"
+        "chalk": "^2.4.1",
+        "source-map": "^0.6.1",
+        "supports-color": "^5.4.0"
       },
       "dependencies": {
-        "core-js": {
-          "version": "2.6.4",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz",
-          "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A=="
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         }
       }
     },
-    "react-cookie": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-4.0.3.tgz",
-      "integrity": "sha512-cmi6IpdVgTSvjqssqIEvo779Gfqc4uPGHRrKMEdHcqkmGtPmxolGfsyKj95bhdLEKqMdbX8MLBCwezlnhkHK0g==",
+    "postcss-attribute-case-insensitive": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz",
+      "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==",
       "requires": {
-        "@types/hoist-non-react-statics": "^3.0.1",
-        "hoist-non-react-statics": "^3.0.0",
-        "universal-cookie": "^4.0.0"
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^6.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
       }
     },
-    "react-dev-utils": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-8.0.0.tgz",
-      "integrity": "sha512-TK8cj7eghvxfe7bfBluLGpI/upo4EXC+G74hYmPucAG8C2XcbT+vKnlWPwLnABb75Zk+mR6D556Da+yvDjljrw==",
-      "requires": {
-        "@babel/code-frame": "7.0.0",
-        "address": "1.0.3",
-        "browserslist": "4.4.1",
-        "chalk": "2.4.2",
-        "cross-spawn": "6.0.5",
-        "detect-port-alt": "1.1.6",
-        "escape-string-regexp": "1.0.5",
-        "filesize": "3.6.1",
-        "find-up": "3.0.0",
-        "fork-ts-checker-webpack-plugin": "1.0.0-alpha.6",
-        "global-modules": "2.0.0",
-        "globby": "8.0.2",
-        "gzip-size": "5.0.0",
-        "immer": "1.10.0",
-        "inquirer": "6.2.1",
-        "is-root": "2.0.0",
-        "loader-utils": "1.2.3",
-        "opn": "5.4.0",
-        "pkg-up": "2.0.0",
-        "react-error-overlay": "^5.1.4",
-        "recursive-readdir": "2.2.2",
-        "shell-quote": "1.6.1",
-        "sockjs-client": "1.3.0",
-        "strip-ansi": "5.0.0",
-        "text-table": "0.2.0"
+    "postcss-calc": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz",
+      "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==",
+      "requires": {
+        "postcss": "^7.0.27",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.0.2"
       },
       "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
-          "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "postcss-value-parser": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+          "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-color-functional-notation": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
+      "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-color-gray": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
+      "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==",
+      "requires": {
+        "@csstools/convert-colors": "^1.4.0",
+        "postcss": "^7.0.5",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-color-hex-alpha": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
+      "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
+      "requires": {
+        "postcss": "^7.0.14",
+        "postcss-values-parser": "^2.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-color-mod-function": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
+      "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==",
+      "requires": {
+        "@csstools/convert-colors": "^1.4.0",
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-color-rebeccapurple": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
+      "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-colormin": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+      "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "color": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-convert-values": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+      "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-custom-media": {
+      "version": "7.0.8",
+      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
+      "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
+      "requires": {
+        "postcss": "^7.0.14"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-custom-properties": {
+      "version": "8.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
+      "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==",
+      "requires": {
+        "postcss": "^7.0.17",
+        "postcss-values-parser": "^2.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-custom-selectors": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
+      "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^5.0.0-rc.3"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-dir-pseudo-class": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
+      "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^5.0.0-rc.3"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-discard-comments": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+      "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+      "requires": {
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-discard-duplicates": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+      "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+      "requires": {
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-discard-empty": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+      "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+      "requires": {
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-discard-overridden": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+      "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+      "requires": {
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-double-position-gradients": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
+      "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==",
+      "requires": {
+        "postcss": "^7.0.5",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-env-function": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
+      "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-flexbugs-fixes": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz",
+      "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==",
+      "requires": {
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-focus-visible": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
+      "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-focus-within": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
+      "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-font-variant": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz",
+      "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-gap-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
+      "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-image-set-function": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
+      "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-initial": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz",
+      "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==",
+      "requires": {
+        "lodash.template": "^4.5.0",
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-lab-function": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
+      "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==",
+      "requires": {
+        "@csstools/convert-colors": "^1.4.0",
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
+      "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
+      "requires": {
+        "cosmiconfig": "^5.0.0",
+        "import-cwd": "^2.0.0"
+      },
+      "dependencies": {
+        "cosmiconfig": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+          "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+          "requires": {
+            "import-fresh": "^2.0.0",
+            "is-directory": "^0.3.1",
+            "js-yaml": "^3.13.1",
+            "parse-json": "^4.0.0"
+          }
+        },
+        "import-fresh": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+          "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+          "requires": {
+            "caller-path": "^2.0.0",
+            "resolve-from": "^3.0.0"
+          }
+        },
+        "js-yaml": {
+          "version": "3.14.0",
+          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
+          "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+          "requires": {
+            "argparse": "^1.0.7",
+            "esprima": "^4.0.0"
+          }
+        },
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        },
+        "resolve-from": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+        }
+      }
+    },
+    "postcss-loader": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+      "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "postcss": "^7.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-logical": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
+      "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-media-minmax": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
+      "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-merge-longhand": {
+      "version": "4.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+      "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+      "requires": {
+        "css-color-names": "0.0.4",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "stylehacks": "^4.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-merge-rules": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+      "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "cssnano-util-same-parent": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0",
+        "vendors": "^1.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-minify-font-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+      "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-minify-gradients": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+      "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "is-color-stop": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-minify-params": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+      "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "browserslist": "^4.0.0",
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "uniqs": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-minify-selectors": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+      "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
+      "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
+      "requires": {
+        "postcss": "^6.0.1"
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+      "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+      "requires": {
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+      "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+      "requires": {
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
+      }
+    },
+    "postcss-modules-values": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+      "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+      "requires": {
+        "icss-replace-symbols": "^1.1.0",
+        "postcss": "^6.0.1"
+      }
+    },
+    "postcss-nesting": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
+      "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-charset": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+      "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+      "requires": {
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-display-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+      "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-positions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+      "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-repeat-style": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+      "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-string": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+      "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+      "requires": {
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-timing-functions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+      "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-unicode": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+      "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-url": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+      "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+      "requires": {
+        "is-absolute-url": "^2.0.0",
+        "normalize-url": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-normalize-whitespace": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+      "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-ordered-values": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+      "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-overflow-shorthand": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
+      "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-page-break": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
+      "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-place": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
+      "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-preset-env": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.5.0.tgz",
+      "integrity": "sha512-RdsIrYJd9p9AouQoJ8dFP5ksBJEIegA4q4WzJDih8nevz3cZyIP/q1Eaw3pTVpUAu3n7Y32YmvAW3X07mSRGkw==",
+      "requires": {
+        "autoprefixer": "^9.4.2",
+        "browserslist": "^4.3.5",
+        "caniuse-lite": "^1.0.30000918",
+        "css-blank-pseudo": "^0.1.4",
+        "css-has-pseudo": "^0.10.0",
+        "css-prefers-color-scheme": "^3.1.1",
+        "cssdb": "^4.3.0",
+        "postcss": "^7.0.6",
+        "postcss-attribute-case-insensitive": "^4.0.0",
+        "postcss-color-functional-notation": "^2.0.1",
+        "postcss-color-gray": "^5.0.0",
+        "postcss-color-hex-alpha": "^5.0.2",
+        "postcss-color-mod-function": "^3.0.3",
+        "postcss-color-rebeccapurple": "^4.0.1",
+        "postcss-custom-media": "^7.0.7",
+        "postcss-custom-properties": "^8.0.9",
+        "postcss-custom-selectors": "^5.1.2",
+        "postcss-dir-pseudo-class": "^5.0.0",
+        "postcss-double-position-gradients": "^1.0.0",
+        "postcss-env-function": "^2.0.2",
+        "postcss-focus-visible": "^4.0.0",
+        "postcss-focus-within": "^3.0.0",
+        "postcss-font-variant": "^4.0.0",
+        "postcss-gap-properties": "^2.0.0",
+        "postcss-image-set-function": "^3.0.1",
+        "postcss-initial": "^3.0.0",
+        "postcss-lab-function": "^2.0.1",
+        "postcss-logical": "^3.0.0",
+        "postcss-media-minmax": "^4.0.0",
+        "postcss-nesting": "^7.0.0",
+        "postcss-overflow-shorthand": "^2.0.0",
+        "postcss-page-break": "^2.0.0",
+        "postcss-place": "^4.0.1",
+        "postcss-pseudo-class-any-link": "^6.0.0",
+        "postcss-replace-overflow-wrap": "^3.0.0",
+        "postcss-selector-matches": "^4.0.0",
+        "postcss-selector-not": "^4.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-pseudo-class-any-link": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
+      "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^5.0.0-rc.3"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-reduce-initial": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+      "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-reduce-transforms": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+      "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-replace-overflow-wrap": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
+      "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==",
+      "requires": {
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-safe-parser": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
+      "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
+      "requires": {
+        "postcss": "^7.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-selector-matches": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
+      "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-selector-not": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz",
+      "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "postcss": "^7.0.2"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+      "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+      "requires": {
+        "cssesc": "^3.0.0",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      }
+    },
+    "postcss-svgo": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+      "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+      "requires": {
+        "is-svg": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "svgo": "^1.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-unique-selectors": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+      "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "postcss": "^7.0.0",
+        "uniqs": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "7.0.32",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+          "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+    },
+    "postcss-values-parser": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
+      "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
+      "requires": {
+        "flatten": "^1.0.2",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      }
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+    },
+    "preserve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+    },
+    "prettier": {
+      "version": "1.18.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
+      "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw=="
+    },
+    "prettier-linter-helpers": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+      "dev": true,
+      "requires": {
+        "fast-diff": "^1.1.2"
+      }
+    },
+    "pretty-bytes": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+      "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk="
+    },
+    "pretty-error": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+      "requires": {
+        "renderkid": "^2.0.1",
+        "utila": "~0.4"
+      }
+    },
+    "pretty-format": {
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+      "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+      "requires": {
+        "ansi-regex": "^3.0.0",
+        "ansi-styles": "^3.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        }
+      }
+    },
+    "private": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+    },
+    "promise": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz",
+      "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==",
+      "requires": {
+        "asap": "~2.0.6"
+      }
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+    },
+    "promised-io": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.6.tgz",
+      "integrity": "sha512-bNwZusuNIW4m0SPR8jooSyndD35ggirHlxVl/UhIaZD/F0OBv9ebfc6tNmbpZts3QXHggkjIBH8lvtnzhtcz0A=="
+    },
+    "prompts": {
+      "version": "0.1.14",
+      "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz",
+      "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==",
+      "requires": {
+        "kleur": "^2.0.1",
+        "sisteransi": "^0.1.1"
+      }
+    },
+    "prop-types": {
+      "version": "15.7.2",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+      "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+      "requires": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.8.1"
+      }
+    },
+    "proxy-addr": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+      "requires": {
+        "forwarded": "~0.1.2",
+        "ipaddr.js": "1.9.1"
+      }
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+    },
+    "psl": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
+      }
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
+      }
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+    },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+    },
+    "querystringify": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
+    },
+    "raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "requires": {
+        "performance-now": "^2.1.0"
+      }
+    },
+    "randomatic": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+      "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+      "requires": {
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.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=="
+        },
+        "kind-of": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+        }
+      }
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "requires": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+    },
+    "raw-body": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+        }
+      }
+    },
+    "rc-align": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.9.tgz",
+      "integrity": "sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "2.x",
+        "dom-align": "^1.7.0",
+        "rc-util": "^5.3.0",
+        "resize-observer-polyfill": "^1.5.1"
+      }
+    },
+    "rc-animate": {
+      "version": "2.11.1",
+      "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.11.1.tgz",
+      "integrity": "sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==",
+      "requires": {
+        "babel-runtime": "6.x",
+        "classnames": "^2.2.6",
+        "css-animation": "^1.3.2",
+        "prop-types": "15.x",
+        "raf": "^3.4.0",
+        "rc-util": "^4.15.3",
+        "react-lifecycles-compat": "^3.0.4"
+      },
+      "dependencies": {
+        "rc-util": {
+          "version": "4.21.1",
+          "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz",
+          "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==",
+          "requires": {
+            "add-dom-event-listener": "^1.1.0",
+            "prop-types": "^15.5.10",
+            "react-is": "^16.12.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.1.0"
+          }
+        }
+      }
+    },
+    "rc-calendar": {
+      "version": "9.15.11",
+      "resolved": "https://registry.npmjs.org/rc-calendar/-/rc-calendar-9.15.11.tgz",
+      "integrity": "sha512-qv0VXfAAnysMWJigxaP6se4bJHvr17D9qsLbi8BOpdgEocsS0RkgY1IUiFaOVYKJDy/EyLC447O02sV/y5YYBg==",
+      "requires": {
+        "babel-runtime": "6.x",
+        "classnames": "2.x",
+        "moment": "2.x",
+        "prop-types": "^15.5.8",
+        "rc-trigger": "^2.2.0",
+        "rc-util": "^4.1.1",
+        "react-lifecycles-compat": "^3.0.4"
+      },
+      "dependencies": {
+        "rc-align": {
+          "version": "2.4.5",
+          "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz",
+          "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==",
+          "requires": {
+            "babel-runtime": "^6.26.0",
+            "dom-align": "^1.7.0",
+            "prop-types": "^15.5.8",
+            "rc-util": "^4.0.4"
+          }
+        },
+        "rc-trigger": {
+          "version": "2.6.5",
+          "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz",
+          "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.6",
+            "prop-types": "15.x",
+            "rc-align": "^2.4.0",
+            "rc-animate": "2.x",
+            "rc-util": "^4.4.0",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-util": {
+          "version": "4.21.1",
+          "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz",
+          "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==",
+          "requires": {
+            "add-dom-event-listener": "^1.1.0",
+            "prop-types": "^15.5.10",
+            "react-is": "^16.12.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.1.0"
+          }
+        }
+      }
+    },
+    "rc-cascader": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-1.4.2.tgz",
+      "integrity": "sha512-JVuLGrSi+3G8DZyPvlKlGVWJjhoi9NTz6REHIgRspa5WnznRkKGm2ejb0jJtz0m2IL8Q9BG4ZA2sXuqAu71ltQ==",
+      "requires": {
+        "@babel/runtime": "^7.12.5",
+        "array-tree-filter": "^2.1.0",
+        "rc-trigger": "^5.0.4",
+        "rc-util": "^5.0.1",
+        "warning": "^4.0.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-checkbox": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.3.2.tgz",
+      "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.1"
+      }
+    },
+    "rc-collapse": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.1.0.tgz",
+      "integrity": "sha512-EwpNPJcLe7b+5JfyaxM9ZNnkCgqArt3QQO0Cr5p5plwz/C9h8liAmjYY5I4+hl9lAjBqb7ZwLu94+z+rt5g1WQ==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "2.x",
+        "rc-motion": "^2.3.4",
+        "rc-util": "^5.2.1",
+        "shallowequal": "^1.1.0"
+      }
+    },
+    "rc-dialog": {
+      "version": "8.5.2",
+      "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.5.2.tgz",
+      "integrity": "sha512-3n4taFcjqhTE9uNuzjB+nPDeqgRBTEGBfe46mb1e7r88DgDo0lL4NnxY/PZ6PJKd2tsCt+RrgF/+YeTvJ/Thsw==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.6",
+        "rc-motion": "^2.3.0",
+        "rc-util": "^5.6.1"
+      }
+    },
+    "rc-drawer": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-4.3.1.tgz",
+      "integrity": "sha512-GMfFy4maqxS9faYXEhQ+0cA1xtkddEQzraf6SAdzWbn444DrrLogwYPk1NXSpdXjLCLxgxOj9MYtyYG42JsfXg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.6",
+        "rc-util": "^5.7.0"
+      }
+    },
+    "rc-dropdown": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.0.tgz",
+      "integrity": "sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.6",
+        "rc-trigger": "^5.0.4"
+      }
+    },
+    "rc-editor-core": {
+      "version": "0.8.10",
+      "resolved": "https://registry.npmjs.org/rc-editor-core/-/rc-editor-core-0.8.10.tgz",
+      "integrity": "sha512-T3aHpeMCIYA1sdAI7ynHHjXy5fqp83uPlD68ovZ0oClTSc3tbHmyCxXlA+Ti4YgmcpCYv7avF6a+TIbAka53kw==",
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "classnames": "^2.2.5",
+        "draft-js": "^0.10.0",
+        "immutable": "^3.7.4",
+        "lodash": "^4.16.5",
+        "prop-types": "^15.5.8",
+        "setimmediate": "^1.0.5"
+      }
+    },
+    "rc-editor-mention": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/rc-editor-mention/-/rc-editor-mention-1.1.13.tgz",
+      "integrity": "sha512-3AOmGir91Fi2ogfRRaXLtqlNuIwQpvla7oUnGHS1+3eo7b+fUp5IlKcagqtwUBB5oDNofoySXkLBxzWvSYNp/Q==",
+      "requires": {
+        "babel-runtime": "^6.23.0",
+        "classnames": "^2.2.5",
+        "dom-scroll-into-view": "^1.2.0",
+        "draft-js": "~0.10.0",
+        "immutable": "~3.7.4",
+        "prop-types": "^15.5.8",
+        "rc-animate": "^2.3.0",
+        "rc-editor-core": "~0.8.3"
+      }
+    },
+    "rc-field-form": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.19.0.tgz",
+      "integrity": "sha512-FZFyE6FmhR4xGO3MVo86J2sHIM6t/W4UqN94nVqZC/9PLhzSaKuM0i9UfwFMtuENP2hxFANEQZMBrD/2Zd43pg==",
+      "requires": {
+        "@babel/runtime": "^7.8.4",
+        "async-validator": "^3.0.3",
+        "rc-util": "^5.8.0"
+      }
+    },
+    "rc-form": {
+      "version": "2.4.12",
+      "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.12.tgz",
+      "integrity": "sha512-sHfyWRrnjCHkeCYfYAGop2GQBUC6CKMPcJF9h/gL/vTmZB/RN6fNOGKjXrXjFbwFwKXUWBoPtIDDDmXQW9xNdw==",
+      "requires": {
+        "async-validator": "~1.11.3",
+        "babel-runtime": "6.x",
+        "create-react-class": "^15.5.3",
+        "dom-scroll-into-view": "1.x",
+        "hoist-non-react-statics": "^3.3.0",
+        "lodash": "^4.17.4",
+        "rc-util": "^4.15.3",
+        "react-is": "^16.13.1",
+        "warning": "^4.0.3"
+      },
+      "dependencies": {
+        "async-validator": {
+          "version": "1.11.5",
+          "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.11.5.tgz",
+          "integrity": "sha512-XNtCsMAeAH1pdLMEg1z8/Bb3a8cdCbui9QbJATRFHHHW5kT6+NPI3zSVQUXgikTFITzsg+kYY5NTWhM2Orwt9w=="
+        },
+        "rc-util": {
+          "version": "4.21.1",
+          "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz",
+          "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==",
+          "requires": {
+            "add-dom-event-listener": "^1.1.0",
+            "prop-types": "^15.5.10",
+            "react-is": "^16.12.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.1.0"
+          }
+        }
+      }
+    },
+    "rc-hammerjs": {
+      "version": "0.6.10",
+      "resolved": "https://registry.npmjs.org/rc-hammerjs/-/rc-hammerjs-0.6.10.tgz",
+      "integrity": "sha512-Vgh9qIudyN5CHRop4M+v+xUniQBFWXKrsJxQRVtJOi2xgRrCeI52/bkpaL5HWwUhqTK9Ayq0n7lYTItT6ld5rg==",
+      "requires": {
+        "babel-runtime": "6.x",
+        "hammerjs": "^2.0.8",
+        "prop-types": "^15.5.9"
+      }
+    },
+    "rc-image": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.2.3.tgz",
+      "integrity": "sha512-8qWNerW1rN0s4zAF6oEa+Zm7UzM+PwTxbGdufvnR3Gcp2M0bcfoEPk9V+RgTxmzGNNELxmrMHloPL4LV5BZu3Q==",
+      "requires": {
+        "@babel/runtime": "^7.11.2",
+        "classnames": "^2.2.6",
+        "rc-dialog": "~8.5.0",
+        "rc-util": "^5.0.6"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-input-number": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.0.1.tgz",
+      "integrity": "sha512-LOPEwhEjkJzDd+0mOMNZdRKjEsZJOXVxmNr3sfiONu9PUCRf366GDlARh+AcSd/jWvFzEa070wpr2gg0i/5BfQ==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.5",
+        "rc-util": "^5.0.1"
+      }
+    },
+    "rc-mentions": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.5.3.tgz",
+      "integrity": "sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.6",
+        "rc-menu": "^8.0.1",
+        "rc-textarea": "^0.3.0",
+        "rc-trigger": "^5.0.4",
+        "rc-util": "^5.0.1"
+      }
+    },
+    "rc-menu": {
+      "version": "8.10.6",
+      "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.10.6.tgz",
+      "integrity": "sha512-RVkd8XChwSmVOdNULbqLNnABthRZWnhqct1Q74onEXTClsXvsLADMhlIJtw/umglVSECM+14TJdIli9rl2Bzlw==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "2.x",
+        "mini-store": "^3.0.1",
+        "rc-motion": "^2.0.1",
+        "rc-trigger": "^5.1.2",
+        "rc-util": "^5.7.0",
+        "resize-observer-polyfill": "^1.5.0",
+        "shallowequal": "^1.1.0"
+      }
+    },
+    "rc-motion": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.4.1.tgz",
+      "integrity": "sha512-TWLvymfMu8SngPx5MDH8dQ0D2RYbluNTfam4hY/dNNx9RQ3WtGuZ/GXHi2ymLMzH+UNd6EEFYkOuR5JTTtm8Xg==",
+      "requires": {
+        "@babel/runtime": "^7.11.1",
+        "classnames": "^2.2.1",
+        "rc-util": "^5.2.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-notification": {
+      "version": "4.5.5",
+      "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.5.5.tgz",
+      "integrity": "sha512-YIfhTSw+h5GsSdgMnuMx24wqiPlg3FeamuOlkh9RkyHx+SeZVAKzQ0juy2NGvPEF2hDWi5xTqxUqLdo0L2AmGg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "2.x",
+        "rc-motion": "^2.2.0",
+        "rc-util": "^5.0.1"
+      }
+    },
+    "rc-overflow": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.0.2.tgz",
+      "integrity": "sha512-GXj4DAyNxm4f57LvXLwhJaZoJHzSge2l2lQq64MZP7NJAfLpQqOLD+v9JMV9ONTvDPZe8kdzR+UMmkAn7qlzFA==",
+      "requires": {
+        "@babel/runtime": "^7.11.1",
+        "classnames": "^2.2.1",
+        "rc-resize-observer": "^1.0.0",
+        "rc-util": "^5.5.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-pagination": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.1.4.tgz",
+      "integrity": "sha512-6nFsNXGfBb6Hh3SNeTHuEaAWiq33PdDA4rdi2Ba2LIri6XUeOCmWLFPUwZyx+NJn+ODGCxsl5BEVcfLbNsxtGg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.1"
+      }
+    },
+    "rc-picker": {
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.5.7.tgz",
+      "integrity": "sha512-b5ZWCKds1u4H9fP0EpJ8YUX16VhueK6E7TxgK+rRjpbKwI1bOUy59F/OkUXjdACJdDmbsDMDZogpW7KzoqtzvA==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.1",
+        "date-fns": "^2.15.0",
+        "moment": "^2.24.0",
+        "rc-trigger": "^5.0.4",
+        "rc-util": "^5.4.0",
+        "shallowequal": "^1.1.0"
+      }
+    },
+    "rc-progress": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.1.3.tgz",
+      "integrity": "sha512-Jl4fzbBExHYMoC6HBPzel0a9VmhcSXx24LVt/mdhDM90MuzoMCJjXZAlhA0V0CJi+SKjMhfBoIQ6Lla1nD4QNw==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.6"
+      }
+    },
+    "rc-rate": {
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.1.tgz",
+      "integrity": "sha512-MmIU7FT8W4LYRRHJD1sgG366qKtSaKb67D0/vVvJYR0lrCuRrCiVQ5qhfT5ghVO4wuVIORGpZs7ZKaYu+KMUzA==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.5",
+        "rc-util": "^5.0.1"
+      }
+    },
+    "rc-resize-observer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz",
+      "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.1",
+        "rc-util": "^5.0.0",
+        "resize-observer-polyfill": "^1.5.1"
+      }
+    },
+    "rc-select": {
+      "version": "12.1.5",
+      "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-12.1.5.tgz",
+      "integrity": "sha512-UElTMw0+XvYJmVfsHTWvLR42RKNf5qyN3Ed/JfuZQceIPK1/3ugGRjdEOKBsPmPyNB5389NAROCV4tQd9fmqwg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "2.x",
+        "rc-motion": "^2.0.1",
+        "rc-overflow": "^1.0.0",
+        "rc-trigger": "^5.0.4",
+        "rc-util": "^5.0.1",
+        "rc-virtual-list": "^3.2.0"
+      }
+    },
+    "rc-slider": {
+      "version": "9.7.1",
+      "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.7.1.tgz",
+      "integrity": "sha512-r9r0dpFA3PEvxBhIfVi1lVzxuSogWxeY+tGvi2AqMM1rPgaOXQ7WbtT+9kVFkJ9K8TntA/vYPgiCCKfN29KTkw==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.5",
+        "rc-tooltip": "^5.0.1",
+        "rc-util": "^5.0.0",
+        "shallowequal": "^1.1.0"
+      }
+    },
+    "rc-steps": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-4.1.3.tgz",
+      "integrity": "sha512-GXrMfWQOhN3sVze3JnzNboHpQdNHcdFubOETUHyDpa/U3HEKBZC3xJ8XK4paBgF4OJ3bdUVLC+uBPc6dCxvDYA==",
+      "requires": {
+        "@babel/runtime": "^7.10.2",
+        "classnames": "^2.2.3",
+        "rc-util": "^5.0.1"
+      }
+    },
+    "rc-switch": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.2.tgz",
+      "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.1",
+        "rc-util": "^5.0.1"
+      }
+    },
+    "rc-table": {
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.13.1.tgz",
+      "integrity": "sha512-zg2ldSRHj1ENGsSykSKV5axnWkSaaly+wjRcD1Bspx4WHrf3m/I1WYjpVvOeer2e06bfKb6lmkK0HLxQ1cZtsg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.5",
+        "rc-resize-observer": "^1.0.0",
+        "rc-util": "^5.4.0",
+        "shallowequal": "^1.1.0"
+      }
+    },
+    "rc-tabs": {
+      "version": "11.7.3",
+      "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.7.3.tgz",
+      "integrity": "sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w==",
+      "requires": {
+        "@babel/runtime": "^7.11.2",
+        "classnames": "2.x",
+        "rc-dropdown": "^3.1.3",
+        "rc-menu": "^8.6.1",
+        "rc-resize-observer": "^1.0.0",
+        "rc-util": "^5.5.0"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-textarea": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.3.4.tgz",
+      "integrity": "sha512-ILUYx831ZukQPv3m7R4RGRtVVWmL1LV4ME03L22mvT56US0DGCJJaRTHs4vmpcSjFHItph5OTmhodY4BOwy81A==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.1",
+        "rc-resize-observer": "^1.0.0",
+        "rc-util": "^5.7.0"
+      }
+    },
+    "rc-time-picker": {
+      "version": "3.7.3",
+      "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.7.3.tgz",
+      "integrity": "sha512-Lv1Mvzp9fRXhXEnRLO4nW6GLNxUkfAZ3RsiIBsWjGjXXvMNjdr4BX/ayElHAFK0DoJqOhm7c5tjmIYpEOwcUXg==",
+      "requires": {
+        "classnames": "2.x",
+        "moment": "2.x",
+        "prop-types": "^15.5.8",
+        "raf": "^3.4.1",
+        "rc-trigger": "^2.2.0",
+        "react-lifecycles-compat": "^3.0.4"
+      },
+      "dependencies": {
+        "rc-align": {
+          "version": "2.4.5",
+          "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz",
+          "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==",
+          "requires": {
+            "babel-runtime": "^6.26.0",
+            "dom-align": "^1.7.0",
+            "prop-types": "^15.5.8",
+            "rc-util": "^4.0.4"
+          }
+        },
+        "rc-trigger": {
+          "version": "2.6.5",
+          "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz",
+          "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.6",
+            "prop-types": "15.x",
+            "rc-align": "^2.4.0",
+            "rc-animate": "2.x",
+            "rc-util": "^4.4.0",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-util": {
+          "version": "4.21.1",
+          "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz",
+          "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==",
+          "requires": {
+            "add-dom-event-listener": "^1.1.0",
+            "prop-types": "^15.5.10",
+            "react-is": "^16.12.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.1.0"
+          }
+        }
+      }
+    },
+    "rc-tooltip": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.1.0.tgz",
+      "integrity": "sha512-pFqD1JZwNIpbdcefB7k5xREoHAWM/k3yQwYF0iminbmDXERgq4rvBfUwIvlCqqZSM7HDr9hYeYr6ZsVNaKtvCQ==",
+      "requires": {
+        "@babel/runtime": "^7.11.2",
+        "rc-trigger": "^5.0.0"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-tree": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-4.1.5.tgz",
+      "integrity": "sha512-q2vjcmnBDylGZ9/ZW4F9oZMKMJdbFWC7um+DAQhZG1nqyg1iwoowbBggUDUaUOEryJP+08bpliEAYnzJXbI5xQ==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "2.x",
+        "rc-motion": "^2.0.1",
+        "rc-util": "^5.0.0",
+        "rc-virtual-list": "^3.0.1"
+      }
+    },
+    "rc-tree-select": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-4.3.0.tgz",
+      "integrity": "sha512-EEXB9dKBsJNJuKIU5NERZsaJ71GDGIj5uWLl7A4XiYr2jXM4JICfScvvp3O5jHMDfhqmgpqNc0z90mHkgh3hKg==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "2.x",
+        "rc-select": "^12.0.0",
+        "rc-tree": "^4.0.0",
+        "rc-util": "^5.0.5"
+      }
+    },
+    "rc-trigger": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.2.3.tgz",
+      "integrity": "sha512-6Fokao07HUbqKIDkDRFEM0AGZvsvK0Fbp8A/KFgl1ngaqfO1nY037cISCG1Jm5fxImVsXp9awdkP7Vu5cxjjog==",
+      "requires": {
+        "@babel/runtime": "^7.11.2",
+        "classnames": "^2.2.6",
+        "rc-align": "^4.0.0",
+        "rc-motion": "^2.0.0",
+        "rc-util": "^5.5.0"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-upload": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.0.1.tgz",
+      "integrity": "sha512-h7iLt22U0C2ObpqTU7MDoAV/FDwHTUEFjMd6uidA4ipoJ7gP7C74gOQOtl5OPQTVUDATUndnSAt9uyC1znlo9A==",
+      "requires": {
+        "@babel/runtime": "^7.10.1",
+        "classnames": "^2.2.5",
+        "rc-util": "^5.2.0"
+      }
+    },
+    "rc-util": {
+      "version": "5.8.1",
+      "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.1.tgz",
+      "integrity": "sha512-kXV/QjL+azh3AxMk68gm8+nltVoL6bjeJJULAZLRCLus2Fhvo/aaMZokxYov/E0dbfjo31I78pF4yVljqQB7bA==",
+      "requires": {
+        "@babel/runtime": "^7.12.5",
+        "react-is": "^16.12.0",
+        "shallowequal": "^1.1.0"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.13.10",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+          "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "rc-virtual-list": {
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.2.6.tgz",
+      "integrity": "sha512-8FiQLDzm3c/tMX0d62SQtKDhLH7zFlSI6pWBAPt+TUntEqd3Lz9zFAmpvTu8gkvUom/HCsDSZs4wfV4wDPWC0Q==",
+      "requires": {
+        "classnames": "^2.2.6",
+        "rc-resize-observer": "^1.0.0",
+        "rc-util": "^5.0.7"
+      }
+    },
+    "re-resizable": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-4.11.0.tgz",
+      "integrity": "sha512-dye+7rERqNf/6mDT1iwps+4Gf42420xuZgygF33uX178DxffqcyeuHbBuJ382FIcB5iP6mMZOhfW7kI0uXwb/Q=="
+    },
+    "react": {
+      "version": "16.14.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
+      "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
+      "requires": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2"
+      }
+    },
+    "react-app-polyfill": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.2.2.tgz",
+      "integrity": "sha512-mAYn96B/nB6kWG87Ry70F4D4rsycU43VYTj3ZCbKP+SLJXwC0x6YCbwcICh3uW8/C9s1VgP197yx+w7SCWeDdQ==",
+      "requires": {
+        "core-js": "2.6.4",
+        "object-assign": "4.1.1",
+        "promise": "8.0.2",
+        "raf": "3.4.1",
+        "whatwg-fetch": "3.0.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.4",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz",
+          "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A=="
+        }
+      }
+    },
+    "react-cookie": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-4.0.3.tgz",
+      "integrity": "sha512-cmi6IpdVgTSvjqssqIEvo779Gfqc4uPGHRrKMEdHcqkmGtPmxolGfsyKj95bhdLEKqMdbX8MLBCwezlnhkHK0g==",
+      "requires": {
+        "@types/hoist-non-react-statics": "^3.0.1",
+        "hoist-non-react-statics": "^3.0.0",
+        "universal-cookie": "^4.0.0"
+      }
+    },
+    "react-dev-utils": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-8.0.0.tgz",
+      "integrity": "sha512-TK8cj7eghvxfe7bfBluLGpI/upo4EXC+G74hYmPucAG8C2XcbT+vKnlWPwLnABb75Zk+mR6D556Da+yvDjljrw==",
+      "requires": {
+        "@babel/code-frame": "7.0.0",
+        "address": "1.0.3",
+        "browserslist": "4.4.1",
+        "chalk": "2.4.2",
+        "cross-spawn": "6.0.5",
+        "detect-port-alt": "1.1.6",
+        "escape-string-regexp": "1.0.5",
+        "filesize": "3.6.1",
+        "find-up": "3.0.0",
+        "fork-ts-checker-webpack-plugin": "1.0.0-alpha.6",
+        "global-modules": "2.0.0",
+        "globby": "8.0.2",
+        "gzip-size": "5.0.0",
+        "immer": "1.10.0",
+        "inquirer": "6.2.1",
+        "is-root": "2.0.0",
+        "loader-utils": "1.2.3",
+        "opn": "5.4.0",
+        "pkg-up": "2.0.0",
+        "react-error-overlay": "^5.1.4",
+        "recursive-readdir": "2.2.2",
+        "shell-quote": "1.6.1",
+        "sockjs-client": "1.3.0",
+        "strip-ansi": "5.0.0",
+        "text-table": "0.2.0"
+      },
+      "dependencies": {
+        "@babel/code-frame": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+          "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+          "requires": {
+            "@babel/highlight": "^7.0.0"
+          }
+        },
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+        },
+        "browserslist": {
+          "version": "4.4.1",
+          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz",
+          "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
+          "requires": {
+            "caniuse-lite": "^1.0.30000929",
+            "electron-to-chromium": "^1.3.103",
+            "node-releases": "^1.1.3"
+          }
+        },
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "inquirer": {
+          "version": "6.2.1",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
+          "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+          "requires": {
+            "ansi-escapes": "^3.0.0",
+            "chalk": "^2.0.0",
+            "cli-cursor": "^2.1.0",
+            "cli-width": "^2.0.0",
+            "external-editor": "^3.0.0",
+            "figures": "^2.0.0",
+            "lodash": "^4.17.10",
+            "mute-stream": "0.0.7",
+            "run-async": "^2.2.0",
+            "rxjs": "^6.1.0",
+            "string-width": "^2.1.0",
+            "strip-ansi": "^5.0.0",
+            "through": "^2.3.6"
+          }
+        },
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+        },
+        "strip-ansi": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+          "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+          "requires": {
+            "ansi-regex": "^4.0.0"
+          }
+        }
+      }
+    },
+    "react-dom": {
+      "version": "16.14.0",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
+      "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
+      "requires": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "scheduler": "^0.19.1"
+      }
+    },
+    "react-dropdown": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/react-dropdown/-/react-dropdown-1.9.0.tgz",
+      "integrity": "sha512-BDApCUhs0qHqnFW3b54SuqI200FOOsmiy0dejdmtdTn/MMY11jcou3CLX1oT2Qa1PdN7viTyAGT8YCpK5qb9xg==",
+      "requires": {
+        "classnames": "^2.2.3"
+      }
+    },
+    "react-dropdown-select": {
+      "version": "4.7.1",
+      "resolved": "https://registry.npmjs.org/react-dropdown-select/-/react-dropdown-select-4.7.1.tgz",
+      "integrity": "sha512-yoF39vFN+F2TaRK1EXnhiz+8jyv40E7+MRUD/X/UsMr2dnYFWoFMMrTIVXcjVnDCFlU+yAvZYRqb+8b60bUuyw==",
+      "requires": {
+        "@emotion/core": "^10.0.27",
+        "@emotion/styled": "^10.0.27"
+      }
+    },
+    "react-easy-crop": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-2.1.2.tgz",
+      "integrity": "sha512-LHXQFyJVXGMgmjSzX1KMeX1uE/dI26O2608DsrlCDwRKOkaS7Kb6pQjeS30efGfzrRkUD5Qff+ANxhaPO+pVNg==",
+      "requires": {
+        "@emotion/core": "^10.0.27",
+        "@emotion/styled": "^10.0.27",
+        "tslib": "1.11.2"
+      }
+    },
+    "react-easy-swipe": {
+      "version": "0.0.21",
+      "resolved": "https://registry.npmjs.org/react-easy-swipe/-/react-easy-swipe-0.0.21.tgz",
+      "integrity": "sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==",
+      "requires": {
+        "prop-types": "^15.5.8"
+      }
+    },
+    "react-error-overlay": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz",
+      "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q=="
+    },
+    "react-event-listener": {
+      "version": "0.6.6",
+      "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz",
+      "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==",
+      "requires": {
+        "@babel/runtime": "^7.2.0",
+        "prop-types": "^15.6.0",
+        "warning": "^4.0.1"
+      }
+    },
+    "react-fine-uploader": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/react-fine-uploader/-/react-fine-uploader-1.1.1.tgz",
+      "integrity": "sha512-aUOZO3Wr8OynK2LyF2QMPHSe6gWSonNyk/hgo6olBRim92T/sa07pcy/sR2ljucrv9IaJC61Qb8ZGGfcs/I82A==",
+      "requires": {
+        "fine-uploader-wrappers": "^1.0.1",
+        "object-assign": "4.1.1",
+        "react-transition-group": "2.x"
+      },
+      "dependencies": {
+        "dom-helpers": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
+          "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+          "requires": {
+            "@babel/runtime": "^7.1.2"
+          }
+        },
+        "react-transition-group": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
+          "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
+          "requires": {
+            "dom-helpers": "^3.4.0",
+            "loose-envify": "^1.4.0",
+            "prop-types": "^15.6.2",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        }
+      }
+    },
+    "react-google-login": {
+      "version": "5.1.25",
+      "resolved": "https://registry.npmjs.org/react-google-login/-/react-google-login-5.1.25.tgz",
+      "integrity": "sha512-N7SZkjTEX9NsC3hywXs68SPJWAHo6M19Bs1OIFPirG0yomGF7KnbKjSqoiIfxz1V7fKAt8bkfBAzogwnGWYTeQ==",
+      "requires": {
+        "@types/react": "*",
+        "prop-types": "^15.6.0"
+      }
+    },
+    "react-grid-system": {
+      "version": "4.4.11",
+      "resolved": "https://registry.npmjs.org/react-grid-system/-/react-grid-system-4.4.11.tgz",
+      "integrity": "sha512-ehaQLEi4WyX/DfjD6bUf2Y6I60T28YpJUJhcEoM+YcTeXqgNqVyp3Prq4cYryV9bYKzK046d6dff2VwnopojNg==",
+      "requires": {
+        "prop-types": "^15.7.2"
+      }
+    },
+    "react-html-parser": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/react-html-parser/-/react-html-parser-2.0.2.tgz",
+      "integrity": "sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g==",
+      "requires": {
+        "htmlparser2": "^3.9.0"
+      }
+    },
+    "react-icons": {
+      "version": "3.11.0",
+      "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-3.11.0.tgz",
+      "integrity": "sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q==",
+      "requires": {
+        "camelcase": "^5.0.0"
+      }
+    },
+    "react-image-crop": {
+      "version": "8.6.6",
+      "resolved": "https://registry.npmjs.org/react-image-crop/-/react-image-crop-8.6.6.tgz",
+      "integrity": "sha512-2iQHKp12dYb6Fu2iN/Mg19BeLMgrbdOuKkU9k0RH7CHX6ZZylOlhfCM3/RsECbKnjGJRtGpXniGF+/i9CGis1A==",
+      "requires": {
+        "clsx": "^1.1.1",
+        "core-js": "^3.6.5",
+        "prop-types": "^15.7.2"
+      }
+    },
+    "react-input-autosize": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.2.tgz",
+      "integrity": "sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw==",
+      "requires": {
+        "prop-types": "^15.5.8"
+      }
+    },
+    "react-input-mask": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/react-input-mask/-/react-input-mask-2.0.4.tgz",
+      "integrity": "sha512-1hwzMr/aO9tXfiroiVCx5EtKohKwLk/NT8QlJXHQ4N+yJJFyUuMT+zfTpLBwX/lK3PkuMlievIffncpMZ3HGRQ==",
+      "requires": {
+        "invariant": "^2.2.4",
+        "warning": "^4.0.2"
+      }
+    },
+    "react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+    },
+    "react-lazy-load": {
+      "version": "3.1.13",
+      "resolved": "https://registry.npmjs.org/react-lazy-load/-/react-lazy-load-3.1.13.tgz",
+      "integrity": "sha512-eAVNUn3vhNj79Iv04NOCwy/sCLyqDEhL3j9aJKV7VJuRBDg6rCiB+BIWHuG7VXJGCgb//6nX/soR8PTyWRhFvQ==",
+      "requires": {
+        "eventlistener": "0.0.1",
+        "lodash.debounce": "^4.0.0",
+        "lodash.throttle": "^4.0.0",
+        "prop-types": "^15.5.8"
+      }
+    },
+    "react-lifecycles-compat": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+    },
+    "react-moment": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/react-moment/-/react-moment-1.0.0.tgz",
+      "integrity": "sha512-J4iIiwUT4oZcL7cp2U7naQKbQtqvmzGXXBMg/DLj+Pi7n9EW0VhBRx/1aJ1Tp2poCqTCAPoadLEoUIkReGnNNg=="
+    },
+    "react-popper": {
+      "version": "0.10.4",
+      "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.10.4.tgz",
+      "integrity": "sha1-rypBXqIike3VBGeNev2opu4ylao=",
+      "requires": {
+        "popper.js": "^1.14.1",
+        "prop-types": "^15.6.1"
+      },
+      "dependencies": {
+        "popper.js": {
+          "version": "1.16.1",
+          "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+          "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
+        }
+      }
+    },
+    "react-recaptcha": {
+      "version": "2.3.10",
+      "resolved": "https://registry.npmjs.org/react-recaptcha/-/react-recaptcha-2.3.10.tgz",
+      "integrity": "sha512-IyanbozsYCuHvTYDuskZTIEcRAMG/sdvAu5b29iQWoC8Kd3Zk9WGCv2oNxh6RfGHvSvgHAyaLjmC6ei/yMsJ7g=="
+    },
+    "react-redux": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz",
+      "integrity": "sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==",
+      "requires": {
+        "@babel/runtime": "^7.1.2",
+        "hoist-non-react-statics": "^3.3.0",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.1.0",
+        "prop-types": "^15.6.1",
+        "react-is": "^16.6.0",
+        "react-lifecycles-compat": "^3.0.0"
+      }
+    },
+    "react-responsive-carousel": {
+      "version": "3.2.10",
+      "resolved": "https://registry.npmjs.org/react-responsive-carousel/-/react-responsive-carousel-3.2.10.tgz",
+      "integrity": "sha512-O8MV2LoR07BttvWaXesyWkE6s8xRW6p6HiMkelZ3TuPYQwKnlw+fYtZN+bQ3/1jg0D5JQGATY4Hnw/4WEXHnag==",
+      "requires": {
+        "classnames": "^2.2.5",
+        "prop-types": "^15.5.8",
+        "react-easy-swipe": "^0.0.21"
+      }
+    },
+    "react-rich-text-editor": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/react-rich-text-editor/-/react-rich-text-editor-2.1.2.tgz",
+      "integrity": "sha512-pFLBhqtV4VKtMMyF2iKq4XZB5Lvg5EKCdFvxe7s/CEtu1bjuK8zTSo93BPiW6AKcDkk0Atsubtoo5LEjD2UtVQ==",
+      "requires": {
+        "@babel/cli": "^7.2.3",
+        "@babel/core": "^7.2.2",
+        "ajv": "^6.5.4",
+        "antd": "^3.13.2",
+        "axios": "^0.18.0",
+        "bootstrap": "^4.1.3",
+        "cheerio": "^1.0.0-rc.2",
+        "codemirror": "^5.41.0",
+        "connected-react-router": "^4.5.0",
+        "font-awesome": "^4.7.0",
+        "history": "^4.7.2",
+        "jquery": "^3.3.1",
+        "material-icons-react": "^1.0.4",
+        "prop-types": "^15.6.2",
+        "qs": "^6.6.0",
+        "re-resizable": "^4.9.2",
+        "react": "^16.5.2",
+        "react-dom": "^16.5.2",
+        "react-google-login": "^3.2.1",
+        "react-html-parser": "^2.0.2",
+        "react-redux": "^5.0.7",
+        "react-router-dom": "^4.3.1",
+        "react-scripts": "2.0.4",
+        "react-select": "^2.1.0",
+        "react-show-more": "^2.0.0",
+        "react-summernote": "^2.0.0",
+        "reactstrap": "^6.5.0",
+        "redux": "^4.0.0",
+        "redux-thunk": "^2.3.0",
+        "summernote": "^0.8.10"
+      },
+      "dependencies": {
+        "@ant-design/icons": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-2.1.1.tgz",
+          "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w=="
+        },
+        "@babel/plugin-proposal-class-properties": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz",
+          "integrity": "sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw==",
+          "requires": {
+            "@babel/helper-function-name": "^7.1.0",
+            "@babel/helper-member-expression-to-functions": "^7.0.0",
+            "@babel/helper-optimise-call-expression": "^7.0.0",
+            "@babel/helper-plugin-utils": "^7.0.0",
+            "@babel/helper-replace-supers": "^7.1.0",
+            "@babel/plugin-syntax-class-properties": "^7.0.0"
+          }
+        },
+        "@babel/plugin-proposal-object-rest-spread": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz",
+          "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==",
+          "requires": {
+            "@babel/helper-plugin-utils": "^7.0.0",
+            "@babel/plugin-syntax-object-rest-spread": "^7.0.0"
+          }
+        },
+        "@babel/plugin-syntax-dynamic-import": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz",
+          "integrity": "sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw==",
+          "requires": {
+            "@babel/helper-plugin-utils": "^7.0.0"
+          }
+        },
+        "@babel/plugin-transform-classes": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz",
+          "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==",
+          "requires": {
+            "@babel/helper-annotate-as-pure": "^7.0.0",
+            "@babel/helper-define-map": "^7.1.0",
+            "@babel/helper-function-name": "^7.1.0",
+            "@babel/helper-optimise-call-expression": "^7.0.0",
+            "@babel/helper-plugin-utils": "^7.0.0",
+            "@babel/helper-replace-supers": "^7.1.0",
+            "@babel/helper-split-export-declaration": "^7.0.0",
+            "globals": "^11.1.0"
+          }
+        },
+        "@babel/plugin-transform-destructuring": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0.tgz",
+          "integrity": "sha512-Fr2GtF8YJSXGTyFPakPFB4ODaEKGU04bPsAllAIabwoXdFrPxL0LVXQX5dQWoxOjjgozarJcC9eWGsj0fD6Zsg==",
+          "requires": {
+            "@babel/helper-plugin-utils": "^7.0.0"
+          }
+        },
+        "@babel/plugin-transform-flow-strip-types": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz",
+          "integrity": "sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA==",
+          "requires": {
+            "@babel/helper-plugin-utils": "^7.0.0",
+            "@babel/plugin-syntax-flow": "^7.0.0"
+          }
+        },
+        "@babel/plugin-transform-react-display-name": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz",
+          "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==",
+          "requires": {
+            "@babel/helper-plugin-utils": "^7.0.0"
+          }
+        },
+        "@babel/plugin-transform-runtime": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz",
+          "integrity": "sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg==",
+          "requires": {
+            "@babel/helper-module-imports": "^7.0.0",
+            "@babel/helper-plugin-utils": "^7.0.0",
+            "resolve": "^1.8.1",
+            "semver": "^5.5.1"
+          }
+        },
+        "@babel/runtime": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz",
+          "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==",
+          "requires": {
+            "regenerator-runtime": "^0.12.0"
+          }
+        },
+        "@svgr/core": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/@svgr/core/-/core-2.4.1.tgz",
+          "integrity": "sha512-2i1cUbjpKt1KcIP05e10vkmu9Aedp32EFqVcSQ08onbB8lVxJqMPci3Hr54aI14S9cLg4JdcpO0D35HHUtT8oQ==",
+          "requires": {
+            "camelcase": "^5.0.0",
+            "cosmiconfig": "^5.0.6",
+            "h2x-core": "^1.1.0",
+            "h2x-plugin-jsx": "^1.1.0",
+            "merge-deep": "^3.0.2",
+            "prettier": "^1.14.2",
+            "svgo": "^1.0.5"
+          }
+        },
+        "@svgr/webpack": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-2.4.1.tgz",
+          "integrity": "sha512-sMHYq0zbMtSHcc9kVfkYI2zrl88u4mKGyQLgKt7r+ul5nITcncm/EPBhzEUrJY5izdlaU6EvyH8zOhZnfaSmOA==",
+          "requires": {
+            "@babel/core": "^7.0.1",
+            "@babel/plugin-transform-react-constant-elements": "^7.0.0",
+            "@babel/preset-env": "^7.0.0",
+            "@babel/preset-react": "^7.0.0",
+            "@svgr/core": "^2.4.1",
+            "loader-utils": "^1.1.0"
+          }
+        },
+        "@webassemblyjs/ast": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz",
+          "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==",
+          "requires": {
+            "@webassemblyjs/helper-module-context": "1.7.6",
+            "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
+            "@webassemblyjs/wast-parser": "1.7.6",
+            "mamacro": "^0.0.3"
+          }
+        },
+        "@webassemblyjs/floating-point-hex-parser": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz",
+          "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA=="
+        },
+        "@webassemblyjs/helper-api-error": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz",
+          "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg=="
+        },
+        "@webassemblyjs/helper-buffer": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz",
+          "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw=="
+        },
+        "@webassemblyjs/helper-code-frame": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz",
+          "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==",
+          "requires": {
+            "@webassemblyjs/wast-printer": "1.7.6"
+          }
+        },
+        "@webassemblyjs/helper-fsm": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz",
+          "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw=="
+        },
+        "@webassemblyjs/helper-module-context": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz",
+          "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==",
+          "requires": {
+            "mamacro": "^0.0.3"
+          }
+        },
+        "@webassemblyjs/helper-wasm-bytecode": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz",
+          "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q=="
+        },
+        "@webassemblyjs/helper-wasm-section": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz",
+          "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==",
+          "requires": {
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/helper-buffer": "1.7.6",
+            "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
+            "@webassemblyjs/wasm-gen": "1.7.6"
+          }
+        },
+        "@webassemblyjs/ieee754": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz",
+          "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==",
+          "requires": {
+            "@xtuc/ieee754": "^1.2.0"
+          }
+        },
+        "@webassemblyjs/leb128": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz",
+          "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==",
+          "requires": {
+            "@xtuc/long": "4.2.1"
+          }
+        },
+        "@webassemblyjs/utf8": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz",
+          "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw=="
+        },
+        "@webassemblyjs/wasm-edit": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz",
+          "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==",
+          "requires": {
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/helper-buffer": "1.7.6",
+            "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
+            "@webassemblyjs/helper-wasm-section": "1.7.6",
+            "@webassemblyjs/wasm-gen": "1.7.6",
+            "@webassemblyjs/wasm-opt": "1.7.6",
+            "@webassemblyjs/wasm-parser": "1.7.6",
+            "@webassemblyjs/wast-printer": "1.7.6"
+          }
+        },
+        "@webassemblyjs/wasm-gen": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz",
+          "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==",
+          "requires": {
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
+            "@webassemblyjs/ieee754": "1.7.6",
+            "@webassemblyjs/leb128": "1.7.6",
+            "@webassemblyjs/utf8": "1.7.6"
+          }
+        },
+        "@webassemblyjs/wasm-opt": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz",
+          "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==",
+          "requires": {
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/helper-buffer": "1.7.6",
+            "@webassemblyjs/wasm-gen": "1.7.6",
+            "@webassemblyjs/wasm-parser": "1.7.6"
+          }
+        },
+        "@webassemblyjs/wasm-parser": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz",
+          "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==",
+          "requires": {
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/helper-api-error": "1.7.6",
+            "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
+            "@webassemblyjs/ieee754": "1.7.6",
+            "@webassemblyjs/leb128": "1.7.6",
+            "@webassemblyjs/utf8": "1.7.6"
+          }
+        },
+        "@webassemblyjs/wast-parser": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz",
+          "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==",
+          "requires": {
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/floating-point-hex-parser": "1.7.6",
+            "@webassemblyjs/helper-api-error": "1.7.6",
+            "@webassemblyjs/helper-code-frame": "1.7.6",
+            "@webassemblyjs/helper-fsm": "1.7.6",
+            "@xtuc/long": "4.2.1",
+            "mamacro": "^0.0.3"
+          }
+        },
+        "@webassemblyjs/wast-printer": {
+          "version": "1.7.6",
+          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz",
+          "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==",
+          "requires": {
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/wast-parser": "1.7.6",
+            "@xtuc/long": "4.2.1"
+          }
+        },
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        },
+        "antd": {
+          "version": "3.26.20",
+          "resolved": "https://registry.npmjs.org/antd/-/antd-3.26.20.tgz",
+          "integrity": "sha512-VIous4ofZfxFtd9K1h9MpRX2sDDpj3QcOFi3YgIc9B/uyDli/GlLb8SWKfQfJaMkaxwatIv503dag2Tog+hiEg==",
+          "requires": {
+            "@ant-design/create-react-context": "^0.2.4",
+            "@ant-design/icons": "~2.1.1",
+            "@ant-design/icons-react": "~2.0.1",
+            "@types/react-slick": "^0.23.4",
+            "array-tree-filter": "^2.1.0",
+            "babel-runtime": "6.x",
+            "classnames": "~2.2.6",
+            "copy-to-clipboard": "^3.2.0",
+            "css-animation": "^1.5.0",
+            "dom-closest": "^0.2.0",
+            "enquire.js": "^2.1.6",
+            "is-mobile": "^2.1.0",
+            "lodash": "^4.17.13",
+            "moment": "^2.24.0",
+            "omit.js": "^1.0.2",
+            "prop-types": "^15.7.2",
+            "raf": "^3.4.1",
+            "rc-animate": "^2.10.2",
+            "rc-calendar": "~9.15.7",
+            "rc-cascader": "~0.17.4",
+            "rc-checkbox": "~2.1.6",
+            "rc-collapse": "~1.11.3",
+            "rc-dialog": "~7.6.0",
+            "rc-drawer": "~3.1.1",
+            "rc-dropdown": "~2.4.1",
+            "rc-editor-mention": "^1.1.13",
+            "rc-form": "^2.4.10",
+            "rc-input-number": "~4.5.0",
+            "rc-mentions": "~0.4.0",
+            "rc-menu": "~7.5.1",
+            "rc-notification": "~3.3.1",
+            "rc-pagination": "~1.20.11",
+            "rc-progress": "~2.5.0",
+            "rc-rate": "~2.5.0",
+            "rc-resize-observer": "^0.1.0",
+            "rc-select": "~9.2.0",
+            "rc-slider": "~8.7.1",
+            "rc-steps": "~3.5.0",
+            "rc-switch": "~1.9.0",
+            "rc-table": "~6.10.5",
+            "rc-tabs": "~9.7.0",
+            "rc-time-picker": "~3.7.1",
+            "rc-tooltip": "~3.7.3",
+            "rc-tree": "~2.1.0",
+            "rc-tree-select": "~2.9.1",
+            "rc-trigger": "^2.6.2",
+            "rc-upload": "~2.9.1",
+            "rc-util": "^4.16.1",
+            "react-lazy-load": "^3.0.13",
+            "react-lifecycles-compat": "^3.0.4",
+            "react-slick": "~0.25.2",
+            "resize-observer-polyfill": "^1.5.1",
+            "shallowequal": "^1.1.0",
+            "warning": "~4.0.3"
+          },
+          "dependencies": {
+            "raf": {
+              "version": "3.4.1",
+              "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+              "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+              "requires": {
+                "performance-now": "^2.1.0"
+              }
+            }
+          }
+        },
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "axios": {
+          "version": "0.18.1",
+          "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz",
+          "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
+          "requires": {
+            "follow-redirects": "1.5.10",
+            "is-buffer": "^2.0.2"
+          }
+        },
+        "babel-loader": {
+          "version": "8.0.4",
+          "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz",
+          "integrity": "sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw==",
+          "requires": {
+            "find-cache-dir": "^1.0.0",
+            "loader-utils": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "util.promisify": "^1.0.0"
+          }
+        },
+        "babel-plugin-dynamic-import-node": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz",
+          "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==",
+          "requires": {
+            "object.assign": "^4.1.0"
+          }
+        },
+        "babel-plugin-macros": {
+          "version": "2.4.2",
+          "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz",
+          "integrity": "sha512-NBVpEWN4OQ/bHnu1fyDaAaTPAjnhXCEPqr1RwqxrU7b6tZ2hypp+zX4hlNfmVGfClD5c3Sl6Hfj5TJNF5VG5aA==",
+          "requires": {
+            "cosmiconfig": "^5.0.5",
+            "resolve": "^1.8.1"
+          }
+        },
+        "babel-plugin-named-asset-import": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.2.3.tgz",
+          "integrity": "sha512-9mx2Z9M4EGbutvXxoLV7aUBCY6ps3sqLFl094FeA2tFQzQffIh0XSsmwwQRxiSfpg3rnb5x/o46qRLxS/OzFTg=="
+        },
+        "babel-plugin-transform-react-remove-prop-types": {
+          "version": "0.4.18",
+          "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.18.tgz",
+          "integrity": "sha512-azed2nHo8vmOy7EY26KH+om5oOcWRs0r1U8wOmhwta+SBMMnmJ4H6yaBZRCcHBtMeWp9AVhvBTL/lpR1kEx+Xw=="
+        },
+        "babel-preset-react-app": {
+          "version": "5.0.4",
+          "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-5.0.4.tgz",
+          "integrity": "sha512-NQ344N1BXY4ur8c7iRqj1JQvcI6tiLbNB8W2z0Vanmc6xld+EG9CYk9cfIFTPgk5RCkughimt+0uw2nd2CyevQ==",
+          "requires": {
+            "@babel/core": "7.1.0",
+            "@babel/plugin-proposal-class-properties": "7.1.0",
+            "@babel/plugin-proposal-object-rest-spread": "7.0.0",
+            "@babel/plugin-syntax-dynamic-import": "7.0.0",
+            "@babel/plugin-transform-classes": "7.1.0",
+            "@babel/plugin-transform-destructuring": "7.0.0",
+            "@babel/plugin-transform-flow-strip-types": "7.0.0",
+            "@babel/plugin-transform-react-constant-elements": "7.0.0",
+            "@babel/plugin-transform-react-display-name": "7.0.0",
+            "@babel/plugin-transform-runtime": "7.1.0",
+            "@babel/preset-env": "7.1.0",
+            "@babel/preset-react": "7.0.0",
+            "@babel/runtime": "7.0.0",
+            "babel-loader": "8.0.4",
+            "babel-plugin-dynamic-import-node": "2.2.0",
+            "babel-plugin-macros": "2.4.2",
+            "babel-plugin-transform-react-remove-prop-types": "0.4.18"
+          },
+          "dependencies": {
+            "@babel/core": {
+              "version": "7.1.0",
+              "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.0.tgz",
+              "integrity": "sha512-9EWmD0cQAbcXSc+31RIoYgEHx3KQ2CCSMDBhnXrShWvo45TMw+3/55KVxlhkG53kw9tl87DqINgHDgFVhZJV/Q==",
+              "requires": {
+                "@babel/code-frame": "^7.0.0",
+                "@babel/generator": "^7.0.0",
+                "@babel/helpers": "^7.1.0",
+                "@babel/parser": "^7.1.0",
+                "@babel/template": "^7.1.0",
+                "@babel/traverse": "^7.1.0",
+                "@babel/types": "^7.0.0",
+                "convert-source-map": "^1.1.0",
+                "debug": "^3.1.0",
+                "json5": "^0.5.0",
+                "lodash": "^4.17.10",
+                "resolve": "^1.3.2",
+                "semver": "^5.4.1",
+                "source-map": "^0.5.0"
+              }
+            },
+            "@babel/plugin-transform-react-constant-elements": {
+              "version": "7.0.0",
+              "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.0.0.tgz",
+              "integrity": "sha512-z8yrW4KCVcqPYr0r9dHXe7fu3daLzn0r6TQEFoGbXahdrzEwT1d1ux+/EnFcqIHv9uPilUlnRnPIUf7GMO0ehg==",
+              "requires": {
+                "@babel/helper-annotate-as-pure": "^7.0.0",
+                "@babel/helper-plugin-utils": "^7.0.0"
+              }
+            },
+            "@babel/preset-env": {
+              "version": "7.1.0",
+              "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.0.tgz",
+              "integrity": "sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg==",
+              "requires": {
+                "@babel/helper-module-imports": "^7.0.0",
+                "@babel/helper-plugin-utils": "^7.0.0",
+                "@babel/plugin-proposal-async-generator-functions": "^7.1.0",
+                "@babel/plugin-proposal-json-strings": "^7.0.0",
+                "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
+                "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
+                "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
+                "@babel/plugin-syntax-async-generators": "^7.0.0",
+                "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
+                "@babel/plugin-syntax-optional-catch-binding": "^7.0.0",
+                "@babel/plugin-transform-arrow-functions": "^7.0.0",
+                "@babel/plugin-transform-async-to-generator": "^7.1.0",
+                "@babel/plugin-transform-block-scoped-functions": "^7.0.0",
+                "@babel/plugin-transform-block-scoping": "^7.0.0",
+                "@babel/plugin-transform-classes": "^7.1.0",
+                "@babel/plugin-transform-computed-properties": "^7.0.0",
+                "@babel/plugin-transform-destructuring": "^7.0.0",
+                "@babel/plugin-transform-dotall-regex": "^7.0.0",
+                "@babel/plugin-transform-duplicate-keys": "^7.0.0",
+                "@babel/plugin-transform-exponentiation-operator": "^7.1.0",
+                "@babel/plugin-transform-for-of": "^7.0.0",
+                "@babel/plugin-transform-function-name": "^7.1.0",
+                "@babel/plugin-transform-literals": "^7.0.0",
+                "@babel/plugin-transform-modules-amd": "^7.1.0",
+                "@babel/plugin-transform-modules-commonjs": "^7.1.0",
+                "@babel/plugin-transform-modules-systemjs": "^7.0.0",
+                "@babel/plugin-transform-modules-umd": "^7.1.0",
+                "@babel/plugin-transform-new-target": "^7.0.0",
+                "@babel/plugin-transform-object-super": "^7.1.0",
+                "@babel/plugin-transform-parameters": "^7.1.0",
+                "@babel/plugin-transform-regenerator": "^7.0.0",
+                "@babel/plugin-transform-shorthand-properties": "^7.0.0",
+                "@babel/plugin-transform-spread": "^7.0.0",
+                "@babel/plugin-transform-sticky-regex": "^7.0.0",
+                "@babel/plugin-transform-template-literals": "^7.0.0",
+                "@babel/plugin-transform-typeof-symbol": "^7.0.0",
+                "@babel/plugin-transform-unicode-regex": "^7.0.0",
+                "browserslist": "^4.1.0",
+                "invariant": "^2.2.2",
+                "js-levenshtein": "^1.1.3",
+                "semver": "^5.3.0"
+              }
+            },
+            "@babel/preset-react": {
+              "version": "7.0.0",
+              "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz",
+              "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==",
+              "requires": {
+                "@babel/helper-plugin-utils": "^7.0.0",
+                "@babel/plugin-transform-react-display-name": "^7.0.0",
+                "@babel/plugin-transform-react-jsx": "^7.0.0",
+                "@babel/plugin-transform-react-jsx-self": "^7.0.0",
+                "@babel/plugin-transform-react-jsx-source": "^7.0.0"
+              }
+            }
+          }
+        },
+        "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=="
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "case-sensitive-paths-webpack-plugin": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz",
+          "integrity": "sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg=="
+        },
+        "chalk": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+          "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "core-js": {
+          "version": "2.5.7",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+          "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
+        },
+        "cosmiconfig": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+          "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+          "requires": {
+            "import-fresh": "^2.0.0",
+            "is-directory": "^0.3.1",
+            "js-yaml": "^3.13.1",
+            "parse-json": "^4.0.0"
+          }
+        },
+        "cssdb": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-3.2.1.tgz",
+          "integrity": "sha512-I0IS8zvxED8sQtFZnV7M+AkhWqTgp1HIyfMQJBbjdn4GgurBt7NCZaDgrWiAN2kNJN34mhF1p50aZIMQu290mA=="
+        },
+        "decamelize": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
+          "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
+          "requires": {
+            "xregexp": "4.0.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "6.5.1",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz",
+          "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ=="
+        },
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+        },
+        "eslint": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz",
+          "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==",
+          "requires": {
+            "@babel/code-frame": "^7.0.0",
+            "ajv": "^6.5.3",
+            "chalk": "^2.1.0",
+            "cross-spawn": "^6.0.5",
+            "debug": "^3.1.0",
+            "doctrine": "^2.1.0",
+            "eslint-scope": "^4.0.0",
+            "eslint-utils": "^1.3.1",
+            "eslint-visitor-keys": "^1.0.0",
+            "espree": "^4.0.0",
+            "esquery": "^1.0.1",
+            "esutils": "^2.0.2",
+            "file-entry-cache": "^2.0.0",
+            "functional-red-black-tree": "^1.0.1",
+            "glob": "^7.1.2",
+            "globals": "^11.7.0",
+            "ignore": "^4.0.6",
+            "imurmurhash": "^0.1.4",
+            "inquirer": "^6.1.0",
+            "is-resolvable": "^1.1.0",
+            "js-yaml": "^3.12.0",
+            "json-stable-stringify-without-jsonify": "^1.0.1",
+            "levn": "^0.3.0",
+            "lodash": "^4.17.5",
+            "minimatch": "^3.0.4",
+            "mkdirp": "^0.5.1",
+            "natural-compare": "^1.4.0",
+            "optionator": "^0.8.2",
+            "path-is-inside": "^1.0.2",
+            "pluralize": "^7.0.0",
+            "progress": "^2.0.0",
+            "regexpp": "^2.0.0",
+            "require-uncached": "^1.0.3",
+            "semver": "^5.5.1",
+            "strip-ansi": "^4.0.0",
+            "strip-json-comments": "^2.0.1",
+            "table": "^4.0.3",
+            "text-table": "^0.2.0"
+          }
+        },
+        "eslint-plugin-jsx-a11y": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz",
+          "integrity": "sha512-JsxNKqa3TwmPypeXNnI75FntkUktGzI1wSa1LgNZdSOMI+B4sxnr1lSF8m8lPiz4mKiC+14ysZQM4scewUrP7A==",
+          "requires": {
+            "aria-query": "^3.0.0",
+            "array-includes": "^3.0.3",
+            "ast-types-flow": "^0.0.7",
+            "axobject-query": "^2.0.1",
+            "damerau-levenshtein": "^1.0.4",
+            "emoji-regex": "^6.5.1",
+            "has": "^1.0.3",
+            "jsx-ast-utils": "^2.0.1"
+          }
+        },
+        "eslint-plugin-react": {
+          "version": "7.11.1",
+          "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz",
+          "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==",
+          "requires": {
+            "array-includes": "^3.0.3",
+            "doctrine": "^2.1.0",
+            "has": "^1.0.3",
+            "jsx-ast-utils": "^2.0.1",
+            "prop-types": "^15.6.2"
+          }
+        },
+        "eslint-scope": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+          "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+          "requires": {
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "espree": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
+          "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
+          "requires": {
+            "acorn": "^6.0.2",
+            "acorn-jsx": "^5.0.0",
+            "eslint-visitor-keys": "^1.0.0"
+          }
+        },
+        "eventsource": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
+          "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
+          "requires": {
+            "original": ">=0.0.5"
+          }
+        },
+        "expand-brackets": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+          "requires": {
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "2.6.9",
+              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+              "requires": {
+                "ms": "2.0.0"
+              }
+            },
+            "define-property": {
+              "version": "0.2.5",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+              "requires": {
+                "is-descriptor": "^0.1.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            },
+            "is-accessor-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+              "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-buffer": {
+              "version": "1.1.6",
+              "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+              "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+            },
+            "is-data-descriptor": {
+              "version": "0.1.4",
+              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+              "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "requires": {
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
+              }
+            },
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+            }
+          }
+        },
+        "extglob": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+          "requires": {
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+              "requires": {
+                "is-descriptor": "^1.0.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "find-cache-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+          "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^1.0.0",
+            "pkg-dir": "^2.0.0"
+          }
+        },
+        "fs-extra": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz",
+          "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==",
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
+          }
+        },
+        "global-modules": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+          "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+          "requires": {
+            "global-prefix": "^1.0.1",
+            "is-windows": "^1.0.1",
+            "resolve-dir": "^1.0.0"
+          }
+        },
+        "global-prefix": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+          "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+          "requires": {
+            "expand-tilde": "^2.0.2",
+            "homedir-polyfill": "^1.0.1",
+            "ini": "^1.3.4",
+            "is-windows": "^1.0.1",
+            "which": "^1.2.14"
+          }
+        },
+        "globby": {
+          "version": "8.0.1",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
+          "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
+          "requires": {
+            "array-union": "^1.0.1",
+            "dir-glob": "^2.0.0",
+            "fast-glob": "^2.0.2",
+            "glob": "^7.1.2",
+            "ignore": "^3.3.5",
+            "pify": "^3.0.0",
+            "slash": "^1.0.0"
+          },
+          "dependencies": {
+            "ignore": {
+              "version": "3.3.10",
+              "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+              "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
+            }
+          }
+        },
+        "handle-thing": {
+          "version": "1.2.5",
+          "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+          "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ="
+        },
+        "hoist-non-react-statics": {
+          "version": "2.5.5",
+          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
+          "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
+        },
+        "immer": {
+          "version": "1.7.2",
+          "resolved": "https://registry.npmjs.org/immer/-/immer-1.7.2.tgz",
+          "integrity": "sha512-4Urocwu9+XLDJw4Tc6ZCg7APVjjLInCFvO4TwGsAYV5zT6YYSor14dsZR0+0tHlDIN92cFUOq+i7fC00G5vTxA=="
+        },
+        "import-fresh": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+          "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+          "requires": {
+            "caller-path": "^2.0.0",
+            "resolve-from": "^3.0.0"
+          }
+        },
+        "import-local": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+          "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+          "requires": {
+            "pkg-dir": "^3.0.0",
+            "resolve-cwd": "^2.0.0"
+          },
+          "dependencies": {
+            "find-up": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+              "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+              "requires": {
+                "locate-path": "^3.0.0"
+              }
+            },
+            "pkg-dir": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+              "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+              "requires": {
+                "find-up": "^3.0.0"
+              }
+            }
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-buffer": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+          "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "is-buffer": {
+              "version": "1.1.6",
+              "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+              "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+            },
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "jest-pnp-resolver": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.1.tgz",
+          "integrity": "sha512-kzhvJQp+9k0a/hpvIIzOJgOwfOqmnohdrAMZW2EscH3kxR2VWD7EcPa10cio8EK9V7PcD75bhG1pFnO70zGwSQ=="
+        },
+        "js-yaml": {
+          "version": "3.14.1",
+          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+          "requires": {
+            "argparse": "^1.0.7",
+            "esprima": "^4.0.0"
+          }
+        },
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+        },
+        "kind-of": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
+        "mini-css-extract-plugin": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz",
+          "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==",
+          "requires": {
+            "loader-utils": "^1.1.0",
+            "schema-utils": "^1.0.0",
+            "webpack-sources": "^1.1.0"
+          }
+        },
+        "mini-store": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-2.0.0.tgz",
+          "integrity": "sha512-EG0CuwpQmX+XL4QVS0kxNwHW5ftSbhygu1qxQH0pipugjnPkbvkalCdQbEihMwtQY6d3MTN+MS0q+aurs+RfLQ==",
+          "requires": {
+            "hoist-non-react-statics": "^2.3.1",
+            "prop-types": "^15.6.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.0.2"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+        },
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+        },
+        "pkg-dir": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+          "requires": {
+            "find-up": "^2.1.0"
+          }
+        },
+        "pnp-webpack-plugin": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.1.0.tgz",
+          "integrity": "sha512-CPCdcFxx7fEcDMWTDjXe2Wypt4JuMt4q5Q2UrpTcyBBkLiCIyPEh/mCGmUWIcNkKGyXwQ9Y2wVhlKm6ketiBNQ=="
+        },
+        "postcss": {
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          },
+          "dependencies": {
+            "chalk": {
+              "version": "2.4.2",
+              "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+              "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+              "requires": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+              },
+              "dependencies": {
+                "supports-color": {
+                  "version": "5.5.0",
+                  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+                  "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+                  "requires": {
+                    "has-flag": "^3.0.0"
+                  }
+                }
+              }
+            },
+            "source-map": {
+              "version": "0.6.1",
+              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+              "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+            },
+            "supports-color": {
+              "version": "6.1.0",
+              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+              "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+              "requires": {
+                "has-flag": "^3.0.0"
+              }
+            }
+          }
+        },
+        "postcss-preset-env": {
+          "version": "6.0.6",
+          "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.0.6.tgz",
+          "integrity": "sha512-W1Wtqngl7BMe4s9o76odTaVs4HXVLhOHD+L5Ez+7x15yiA+98W/WVO6IPlC1q9BIkgAckRtUFmEDr0sNufXZIQ==",
+          "requires": {
+            "autoprefixer": "^9.1.5",
+            "browserslist": "^4.1.1",
+            "caniuse-lite": "^1.0.30000887",
+            "cssdb": "^3.2.1",
+            "postcss": "^7.0.2",
+            "postcss-attribute-case-insensitive": "^4.0.0",
+            "postcss-color-functional-notation": "^2.0.1",
+            "postcss-color-hex-alpha": "^5.0.2",
+            "postcss-color-mod-function": "^3.0.3",
+            "postcss-color-rebeccapurple": "^4.0.1",
+            "postcss-custom-media": "^7.0.4",
+            "postcss-custom-properties": "^8.0.5",
+            "postcss-custom-selectors": "^5.1.2",
+            "postcss-dir-pseudo-class": "^5.0.0",
+            "postcss-env-function": "^2.0.2",
+            "postcss-focus-visible": "^4.0.0",
+            "postcss-focus-within": "^3.0.0",
+            "postcss-font-variant": "^4.0.0",
+            "postcss-gap-properties": "^2.0.0",
+            "postcss-image-set-function": "^3.0.1",
+            "postcss-initial": "^3.0.0",
+            "postcss-lab-function": "^2.0.1",
+            "postcss-logical": "^3.0.0",
+            "postcss-media-minmax": "^4.0.0",
+            "postcss-nesting": "^7.0.0",
+            "postcss-overflow-shorthand": "^2.0.0",
+            "postcss-page-break": "^2.0.0",
+            "postcss-place": "^4.0.1",
+            "postcss-pseudo-class-any-link": "^6.0.0",
+            "postcss-replace-overflow-wrap": "^3.0.0",
+            "postcss-selector-matches": "^4.0.0",
+            "postcss-selector-not": "^4.0.0"
+          }
+        },
+        "qs": {
+          "version": "6.9.6",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
+          "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ=="
+        },
+        "raf": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
+          "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==",
           "requires": {
-            "@babel/highlight": "^7.0.0"
+            "performance-now": "^2.1.0"
           }
         },
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+        "rc-align": {
+          "version": "2.4.5",
+          "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz",
+          "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==",
+          "requires": {
+            "babel-runtime": "^6.26.0",
+            "dom-align": "^1.7.0",
+            "prop-types": "^15.5.8",
+            "rc-util": "^4.0.4"
+          }
         },
-        "browserslist": {
-          "version": "4.4.1",
-          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz",
-          "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
+        "rc-cascader": {
+          "version": "0.17.5",
+          "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-0.17.5.tgz",
+          "integrity": "sha512-WYMVcxU0+Lj+xLr4YYH0+yXODumvNXDcVEs5i7L1mtpWwYkubPV/zbQpn+jGKFCIW/hOhjkU4J1db8/P/UKE7A==",
           "requires": {
-            "caniuse-lite": "^1.0.30000929",
-            "electron-to-chromium": "^1.3.103",
-            "node-releases": "^1.1.3"
+            "array-tree-filter": "^2.1.0",
+            "prop-types": "^15.5.8",
+            "rc-trigger": "^2.2.0",
+            "rc-util": "^4.0.4",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallow-equal": "^1.0.0",
+            "warning": "^4.0.1"
           }
         },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+        "rc-checkbox": {
+          "version": "2.1.8",
+          "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.1.8.tgz",
+          "integrity": "sha512-6qOgh0/by0nVNASx6LZnhRTy17Etcgav+IrI7kL9V9kcDZ/g7K14JFlqrtJ3NjDq/Kyn+BPI1st1XvbkhfaJeg==",
+          "requires": {
+            "babel-runtime": "^6.23.0",
+            "classnames": "2.x",
+            "prop-types": "15.x",
+            "react-lifecycles-compat": "^3.0.4"
+          }
         },
-        "find-up": {
+        "rc-collapse": {
+          "version": "1.11.8",
+          "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-1.11.8.tgz",
+          "integrity": "sha512-8EhfPyScTYljkbRuIoHniSwZagD5UPpZ3CToYgoNYWC85L2qCbPYF7+OaC713FOrIkp6NbfNqXsITNxmDAmxog==",
+          "requires": {
+            "classnames": "2.x",
+            "css-animation": "1.x",
+            "prop-types": "^15.5.6",
+            "rc-animate": "2.x",
+            "react-is": "^16.7.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.1.0"
+          }
+        },
+        "rc-dialog": {
+          "version": "7.6.1",
+          "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-7.6.1.tgz",
+          "integrity": "sha512-KUKf+2eZ4YL+lnXMG3hR4ZtIhC9glfH27NtTVz3gcoDIPAf3uUvaXVRNoDCiSi+OGKLyIb/b6EoidFh6nQC5Wg==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "rc-animate": "2.x",
+            "rc-util": "^4.16.1"
+          }
+        },
+        "rc-drawer": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-3.1.3.tgz",
+          "integrity": "sha512-2z+RdxmzXyZde/1OhVMfDR1e/GBswFeWSZ7FS3Fdd0qhgVdpV1wSzILzzxRaT481ItB5hOV+e8pZT07vdJE8kg==",
+          "requires": {
+            "classnames": "^2.2.6",
+            "rc-util": "^4.16.1",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-dropdown": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-2.4.1.tgz",
+          "integrity": "sha512-p0XYn0wrOpAZ2fUGE6YJ6U8JBNc5ASijznZ6dkojdaEfQJAeZtV9KMEewhxkVlxGSbbdXe10ptjBlTEW9vEwEg==",
+          "requires": {
+            "babel-runtime": "^6.26.0",
+            "classnames": "^2.2.6",
+            "prop-types": "^15.5.8",
+            "rc-trigger": "^2.5.1",
+            "react-lifecycles-compat": "^3.0.2"
+          }
+        },
+        "rc-input-number": {
+          "version": "4.5.7",
+          "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.5.7.tgz",
+          "integrity": "sha512-99PrQ90sTOKyyj7eu0VzwxY17xQ+bwG1XTQd+bTwFQ+IOUkIw7L4qSAYxt58sVYL+Cw+bu/RAtT2IpT9yC2pCQ==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.0",
+            "prop-types": "^15.5.7",
+            "rc-util": "^4.5.1",
+            "rmc-feedback": "^2.0.0"
+          }
+        },
+        "rc-mentions": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-0.4.2.tgz",
+          "integrity": "sha512-DTZurQzacLXOfVuiHydGzqkq7cFMHXF18l2jZ9PhWUn2cqvOSY3W4osN0Pq29AOMOBpcxdZCzgc7Lb0r/bgkDw==",
+          "requires": {
+            "@ant-design/create-react-context": "^0.2.4",
+            "classnames": "^2.2.6",
+            "rc-menu": "^7.4.22",
+            "rc-trigger": "^2.6.2",
+            "rc-util": "^4.6.0",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-menu": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-7.5.5.tgz",
+          "integrity": "sha512-4YJXJgrpUGEA1rMftXN7bDhrV5rPB8oBJoHqT+GVXtIWCanfQxEnM3fmhHQhatL59JoAFMZhJaNzhJIk4FUWCQ==",
+          "requires": {
+            "classnames": "2.x",
+            "dom-scroll-into-view": "1.x",
+            "mini-store": "^2.0.0",
+            "mutationobserver-shim": "^0.3.2",
+            "rc-animate": "^2.10.1",
+            "rc-trigger": "^2.3.0",
+            "rc-util": "^4.13.0",
+            "resize-observer-polyfill": "^1.5.0",
+            "shallowequal": "^1.1.0"
+          }
+        },
+        "rc-notification": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.1.tgz",
+          "integrity": "sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "2.x",
+            "prop-types": "^15.5.8",
+            "rc-animate": "2.x",
+            "rc-util": "^4.0.4"
+          }
+        },
+        "rc-pagination": {
+          "version": "1.20.15",
+          "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-1.20.15.tgz",
+          "integrity": "sha512-/Xr4/3GOa1DtL8iCYl7qRUroEMrRDhZiiuHwcVFfSiwa9LYloMlUWcOJsnr8LN6A7rLPdm3/CHStUNeYd+2pKw==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.6",
+            "prop-types": "^15.5.7",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-progress": {
+          "version": "2.5.3",
+          "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.5.3.tgz",
+          "integrity": "sha512-K2fa4CnqGehLZoMrdmBeZ86ONSTVcdk5FlqetbwJ3R/+42XfqhwQVOjWp2MH4P7XSQOMAGcNOy1SFfCP3415sg==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "prop-types": "^15.5.8"
+          }
+        },
+        "rc-rate": {
+          "version": "2.5.1",
+          "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.5.1.tgz",
+          "integrity": "sha512-3iJkNJT8xlHklPCdeZtUZmJmRVUbr6AHRlfSsztfYTXVlHrv2TcPn3XkHsH+12j812WVB7gvilS2j3+ffjUHXg==",
+          "requires": {
+            "classnames": "^2.2.5",
+            "prop-types": "^15.5.8",
+            "rc-util": "^4.3.0",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-resize-observer": {
+          "version": "0.1.3",
+          "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-0.1.3.tgz",
+          "integrity": "sha512-uzOQEwx83xdQSFOkOAM7x7GHIQKYnrDV4dWxtCxyG1BS1pkfJ4EvDeMfsvAJHSYkQXVBu+sgRHGbRtLG3qiuUg==",
+          "requires": {
+            "classnames": "^2.2.1",
+            "rc-util": "^4.13.0",
+            "resize-observer-polyfill": "^1.5.1"
+          }
+        },
+        "rc-select": {
+          "version": "9.2.3",
+          "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-9.2.3.tgz",
+          "integrity": "sha512-WhswxOMWiNnkXRbxyrj0kiIvyCfo/BaRPaYbsDetSIAU2yEDwKHF798blCP5u86KLOBKBvtxWLFCkSsQw1so5w==",
+          "requires": {
+            "babel-runtime": "^6.23.0",
+            "classnames": "2.x",
+            "component-classes": "1.x",
+            "dom-scroll-into-view": "1.x",
+            "prop-types": "^15.5.8",
+            "raf": "^3.4.0",
+            "rc-animate": "2.x",
+            "rc-menu": "^7.3.0",
+            "rc-trigger": "^2.5.4",
+            "rc-util": "^4.0.4",
+            "react-lifecycles-compat": "^3.0.2",
+            "warning": "^4.0.2"
+          }
+        },
+        "rc-slider": {
+          "version": "8.7.1",
+          "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.7.1.tgz",
+          "integrity": "sha512-WMT5mRFUEcrLWwTxsyS8jYmlaMsTVCZIGENLikHsNv+tE8ThU2lCoPfi/xFNUfJFNFSBFP3MwPez9ZsJmNp13g==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.5",
+            "prop-types": "^15.5.4",
+            "rc-tooltip": "^3.7.0",
+            "rc-util": "^4.0.4",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.1.0",
+            "warning": "^4.0.3"
+          }
+        },
+        "rc-steps": {
+          "version": "3.5.0",
+          "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-3.5.0.tgz",
+          "integrity": "sha512-2Vkkrpa7PZbg7qPsqTNzVDov4u78cmxofjjnIHiGB9+9rqKS8oTLPzbW2uiWDr3Lk+yGwh8rbpGO1E6VAgBCOg==",
+          "requires": {
+            "babel-runtime": "^6.23.0",
+            "classnames": "^2.2.3",
+            "lodash": "^4.17.5",
+            "prop-types": "^15.5.7"
+          }
+        },
+        "rc-switch": {
+          "version": "1.9.2",
+          "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-1.9.2.tgz",
+          "integrity": "sha512-qaK7mY4FLDKy99Hq3A1tf8CcqfzKtHp9LPX8WTnZ0MzdHCTneSARb1XD7Eqeu8BactasYGsi2bF9p18Q+/5JEw==",
+          "requires": {
+            "classnames": "^2.2.1",
+            "prop-types": "^15.5.6",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-table": {
+          "version": "6.10.15",
+          "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-6.10.15.tgz",
+          "integrity": "sha512-LAr0M/gqt+irOjvPNBLApmQ0CUHNOfKsEBhu1uIuB3OlN1ynA9z+sdoTQyNd9+8NSl0MYnQOOfhtLChAY7nU0A==",
+          "requires": {
+            "classnames": "^2.2.5",
+            "component-classes": "^1.2.6",
+            "lodash": "^4.17.5",
+            "mini-store": "^2.0.0",
+            "prop-types": "^15.5.8",
+            "rc-util": "^4.13.0",
+            "react-lifecycles-compat": "^3.0.2",
+            "shallowequal": "^1.0.2"
+          }
+        },
+        "rc-tabs": {
+          "version": "9.7.0",
+          "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.7.0.tgz",
+          "integrity": "sha512-kvmgp8/MfLzFZ06hWHignqomFQ5nF7BqKr5O1FfhE4VKsGrep52YSF/1MvS5oe0NPcI9XGNS2p751C5v6cYDpQ==",
+          "requires": {
+            "@ant-design/create-react-context": "^0.2.4",
+            "babel-runtime": "6.x",
+            "classnames": "2.x",
+            "lodash": "^4.17.5",
+            "prop-types": "15.x",
+            "raf": "^3.4.1",
+            "rc-hammerjs": "~0.6.0",
+            "rc-util": "^4.0.4",
+            "react-lifecycles-compat": "^3.0.4",
+            "resize-observer-polyfill": "^1.5.1",
+            "warning": "^4.0.3"
+          },
+          "dependencies": {
+            "raf": {
+              "version": "3.4.1",
+              "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+              "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+              "requires": {
+                "performance-now": "^2.1.0"
+              }
+            }
+          }
+        },
+        "rc-tooltip": {
+          "version": "3.7.3",
+          "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-3.7.3.tgz",
+          "integrity": "sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "prop-types": "^15.5.8",
+            "rc-trigger": "^2.2.2"
+          }
+        },
+        "rc-tree": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-2.1.4.tgz",
+          "integrity": "sha512-Xey794Iavgs8YldFlXcZLOhfcIhlX5Oz/yfKufknBXf2AlZCOkc7aHqSM9uTF7fBPtTGPhPxNEfOqHfY7b7xng==",
+          "requires": {
+            "@ant-design/create-react-context": "^0.2.4",
+            "classnames": "2.x",
+            "prop-types": "^15.5.8",
+            "rc-animate": "^2.6.0",
+            "rc-util": "^4.5.1",
+            "react-lifecycles-compat": "^3.0.4",
+            "warning": "^4.0.3"
+          }
+        },
+        "rc-tree-select": {
+          "version": "2.9.4",
+          "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.9.4.tgz",
+          "integrity": "sha512-0HQkXAN4XbfBW20CZYh3G+V+VMrjX42XRtDCpyv6PDUm5vikC0Ob682ZBCVS97Ww2a5Hf6Ajmu0ahWEdIEpwhg==",
+          "requires": {
+            "classnames": "^2.2.1",
+            "dom-scroll-into-view": "^1.2.1",
+            "prop-types": "^15.5.8",
+            "raf": "^3.4.0",
+            "rc-animate": "^2.8.2",
+            "rc-tree": "~2.1.0",
+            "rc-trigger": "^3.0.0",
+            "rc-util": "^4.5.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.0.2",
+            "warning": "^4.0.1"
+          },
+          "dependencies": {
+            "rc-trigger": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-3.0.0.tgz",
+              "integrity": "sha512-hQxbbJpo23E2QnYczfq3Ec5J5tVl2mUDhkqxrEsQAqk16HfADQg+iKNWzEYXyERSncdxfnzYuaBgy764mNRzTA==",
+              "requires": {
+                "babel-runtime": "6.x",
+                "classnames": "^2.2.6",
+                "prop-types": "15.x",
+                "raf": "^3.4.0",
+                "rc-align": "^2.4.1",
+                "rc-animate": "^3.0.0-rc.1",
+                "rc-util": "^4.15.7"
+              },
+              "dependencies": {
+                "rc-animate": {
+                  "version": "3.1.1",
+                  "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.1.tgz",
+                  "integrity": "sha512-8wg2Zg3EETy0k/9kYuis30NJNQg1D6/WSQwnCiz6SvyxQXNet/rVraRz3bPngwY6rcU2nlRvoShiYOorXyF7Sg==",
+                  "requires": {
+                    "@ant-design/css-animation": "^1.7.2",
+                    "classnames": "^2.2.6",
+                    "raf": "^3.4.0",
+                    "rc-util": "^4.15.3"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "rc-trigger": {
+          "version": "2.6.5",
+          "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz",
+          "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.6",
+            "prop-types": "15.x",
+            "rc-align": "^2.4.0",
+            "rc-animate": "2.x",
+            "rc-util": "^4.4.0",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        },
+        "rc-upload": {
+          "version": "2.9.4",
+          "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-2.9.4.tgz",
+          "integrity": "sha512-WXt0HGxXyzLrPV6iec/96Rbl/6dyrAW8pKuY6wwD7yFYwfU5bjgKjv7vC8KNMJ6wzitFrZjnoiogNL3dF9dj3Q==",
+          "requires": {
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.5",
+            "prop-types": "^15.5.7",
+            "warning": "4.x"
+          }
+        },
+        "rc-util": {
+          "version": "4.21.1",
+          "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz",
+          "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==",
+          "requires": {
+            "add-dom-event-listener": "^1.1.0",
+            "prop-types": "^15.5.10",
+            "react-is": "^16.12.0",
+            "react-lifecycles-compat": "^3.0.4",
+            "shallowequal": "^1.1.0"
+          }
+        },
+        "react-app-polyfill": {
+          "version": "0.1.3",
+          "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.1.3.tgz",
+          "integrity": "sha512-Fl5Pic4F15G05qX7RmUqPZr1MtyFKJKSlRwMhel4kvDLrk/KcQ9QbpvyMTzv/0NN5957XFQ7r1BNHWi7qN59Pw==",
+          "requires": {
+            "core-js": "2.5.7",
+            "object-assign": "4.1.1",
+            "promise": "8.0.2",
+            "raf": "3.4.0",
+            "whatwg-fetch": "3.0.0"
+          }
+        },
+        "react-dev-utils": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-6.1.1.tgz",
+          "integrity": "sha512-ThbJ86coVd6wV/QiTo8klDTvdAJ1WsFCGQN07+UkN+QN9CtCSsl/+YuDJToKGeG8X4j9HMGXNKbk2QhPAZr43w==",
+          "requires": {
+            "@babel/code-frame": "7.0.0",
+            "address": "1.0.3",
+            "browserslist": "4.1.1",
+            "chalk": "2.4.1",
+            "cross-spawn": "6.0.5",
+            "detect-port-alt": "1.1.6",
+            "escape-string-regexp": "1.0.5",
+            "filesize": "3.6.1",
+            "find-up": "3.0.0",
+            "global-modules": "1.0.0",
+            "globby": "8.0.1",
+            "gzip-size": "5.0.0",
+            "immer": "1.7.2",
+            "inquirer": "6.2.0",
+            "is-root": "2.0.0",
+            "loader-utils": "1.1.0",
+            "opn": "5.4.0",
+            "pkg-up": "2.0.0",
+            "react-error-overlay": "^5.1.0",
+            "recursive-readdir": "2.2.2",
+            "shell-quote": "1.6.1",
+            "sockjs-client": "1.1.5",
+            "strip-ansi": "4.0.0",
+            "text-table": "0.2.0"
+          },
+          "dependencies": {
+            "@babel/code-frame": {
+              "version": "7.0.0",
+              "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+              "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+              "requires": {
+                "@babel/highlight": "^7.0.0"
+              }
+            },
+            "browserslist": {
+              "version": "4.1.1",
+              "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz",
+              "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==",
+              "requires": {
+                "caniuse-lite": "^1.0.30000884",
+                "electron-to-chromium": "^1.3.62",
+                "node-releases": "^1.0.0-alpha.11"
+              }
+            },
+            "find-up": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+              "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+              "requires": {
+                "locate-path": "^3.0.0"
+              }
+            },
+            "inquirer": {
+              "version": "6.2.0",
+              "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
+              "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==",
+              "requires": {
+                "ansi-escapes": "^3.0.0",
+                "chalk": "^2.0.0",
+                "cli-cursor": "^2.1.0",
+                "cli-width": "^2.0.0",
+                "external-editor": "^3.0.0",
+                "figures": "^2.0.0",
+                "lodash": "^4.17.10",
+                "mute-stream": "0.0.7",
+                "run-async": "^2.2.0",
+                "rxjs": "^6.1.0",
+                "string-width": "^2.1.0",
+                "strip-ansi": "^4.0.0",
+                "through": "^2.3.6"
+              }
+            },
+            "loader-utils": {
+              "version": "1.1.0",
+              "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+              "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+              "requires": {
+                "big.js": "^3.1.3",
+                "emojis-list": "^2.0.0",
+                "json5": "^0.5.0"
+              }
+            }
+          }
+        },
+        "react-google-login": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/react-google-login/-/react-google-login-3.2.1.tgz",
+          "integrity": "sha512-9+OFbdGDr6vazlcCkLbtN92Wwfb+aG/RJ0ScypTK6Ox5g642z1aDrnmal2V5AqWl2+Ph53sBhRnk0KTvUdNXpA==",
+          "requires": {
+            "@types/react": "*",
+            "prop-types": "^15.6.0"
+          }
+        },
+        "react-router": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
+          "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==",
+          "requires": {
+            "history": "^4.7.2",
+            "hoist-non-react-statics": "^2.5.0",
+            "invariant": "^2.2.4",
+            "loose-envify": "^1.3.1",
+            "path-to-regexp": "^1.7.0",
+            "prop-types": "^15.6.1",
+            "warning": "^4.0.1"
+          }
+        },
+        "react-router-dom": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz",
+          "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==",
+          "requires": {
+            "history": "^4.7.2",
+            "invariant": "^2.2.4",
+            "loose-envify": "^1.3.1",
+            "prop-types": "^15.6.1",
+            "react-router": "^4.3.1",
+            "warning": "^4.0.1"
+          }
+        },
+        "react-scripts": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.0.4.tgz",
+          "integrity": "sha512-zqsdYYeUqfURac6NEL9/5aImOINuMdm3OjBaIhGxEqJQOtlhsJTrvjY30zJpnCLUMv9B7BLIsmkvvOd0z+x1kQ==",
+          "requires": {
+            "@babel/core": "7.1.0",
+            "@svgr/webpack": "2.4.1",
+            "babel-core": "7.0.0-bridge.0",
+            "babel-eslint": "9.0.0",
+            "babel-jest": "23.6.0",
+            "babel-loader": "8.0.4",
+            "babel-plugin-named-asset-import": "^0.2.2",
+            "babel-preset-react-app": "^5.0.3",
+            "bfj": "6.1.1",
+            "case-sensitive-paths-webpack-plugin": "2.1.2",
+            "chalk": "2.4.1",
+            "css-loader": "1.0.0",
+            "dotenv": "6.0.0",
+            "dotenv-expand": "4.2.0",
+            "eslint": "5.6.0",
+            "eslint-config-react-app": "^3.0.3",
+            "eslint-loader": "2.1.1",
+            "eslint-plugin-flowtype": "2.50.1",
+            "eslint-plugin-import": "2.14.0",
+            "eslint-plugin-jsx-a11y": "6.1.1",
+            "eslint-plugin-react": "7.11.1",
+            "file-loader": "2.0.0",
+            "fs-extra": "7.0.0",
+            "fsevents": "1.2.4",
+            "html-webpack-plugin": "4.0.0-alpha.2",
+            "identity-obj-proxy": "3.0.0",
+            "jest": "23.6.0",
+            "jest-pnp-resolver": "1.0.1",
+            "jest-resolve": "23.6.0",
+            "mini-css-extract-plugin": "0.4.3",
+            "optimize-css-assets-webpack-plugin": "5.0.1",
+            "pnp-webpack-plugin": "1.1.0",
+            "postcss-flexbugs-fixes": "4.1.0",
+            "postcss-loader": "3.0.0",
+            "postcss-preset-env": "6.0.6",
+            "postcss-safe-parser": "4.0.1",
+            "react-app-polyfill": "^0.1.3",
+            "react-dev-utils": "^6.0.4",
+            "resolve": "1.8.1",
+            "sass-loader": "7.1.0",
+            "style-loader": "0.23.0",
+            "terser-webpack-plugin": "1.1.0",
+            "url-loader": "1.1.1",
+            "webpack": "4.19.1",
+            "webpack-dev-server": "3.1.9",
+            "webpack-manifest-plugin": "2.0.4",
+            "workbox-webpack-plugin": "3.6.2"
+          },
+          "dependencies": {
+            "@babel/core": {
+              "version": "7.1.0",
+              "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.0.tgz",
+              "integrity": "sha512-9EWmD0cQAbcXSc+31RIoYgEHx3KQ2CCSMDBhnXrShWvo45TMw+3/55KVxlhkG53kw9tl87DqINgHDgFVhZJV/Q==",
+              "requires": {
+                "@babel/code-frame": "^7.0.0",
+                "@babel/generator": "^7.0.0",
+                "@babel/helpers": "^7.1.0",
+                "@babel/parser": "^7.1.0",
+                "@babel/template": "^7.1.0",
+                "@babel/traverse": "^7.1.0",
+                "@babel/types": "^7.0.0",
+                "convert-source-map": "^1.1.0",
+                "debug": "^3.1.0",
+                "json5": "^0.5.0",
+                "lodash": "^4.17.10",
+                "resolve": "^1.3.2",
+                "semver": "^5.4.1",
+                "source-map": "^0.5.0"
+              }
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          },
+          "dependencies": {
+            "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=="
+            }
+          }
+        },
+        "regenerator-runtime": {
+          "version": "0.12.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
+        },
+        "resolve": {
+          "version": "1.8.1",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+          "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+          "requires": {
+            "path-parse": "^1.0.5"
+          }
+        },
+        "resolve-from": {
           "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+        },
+        "slice-ansi": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+          "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
           "requires": {
-            "locate-path": "^3.0.0"
+            "is-fullwidth-code-point": "^2.0.0"
           }
         },
-        "inquirer": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
-          "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+        "sockjs-client": {
+          "version": "1.1.5",
+          "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz",
+          "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=",
           "requires": {
-            "ansi-escapes": "^3.0.0",
-            "chalk": "^2.0.0",
-            "cli-cursor": "^2.1.0",
-            "cli-width": "^2.0.0",
-            "external-editor": "^3.0.0",
-            "figures": "^2.0.0",
-            "lodash": "^4.17.10",
-            "mute-stream": "0.0.7",
-            "run-async": "^2.2.0",
-            "rxjs": "^6.1.0",
-            "string-width": "^2.1.0",
-            "strip-ansi": "^5.0.0",
-            "through": "^2.3.6"
+            "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": {
+            "debug": {
+              "version": "2.6.9",
+              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+              "requires": {
+                "ms": "2.0.0"
+              }
+            }
           }
         },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+        "spdy": {
+          "version": "3.4.7",
+          "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+          "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
           "requires": {
-            "minimist": "^1.2.0"
+            "debug": "^2.6.8",
+            "handle-thing": "^1.2.5",
+            "http-deceiver": "^1.2.7",
+            "safe-buffer": "^5.0.1",
+            "select-hose": "^2.0.0",
+            "spdy-transport": "^2.0.18"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "2.6.9",
+              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+              "requires": {
+                "ms": "2.0.0"
+              }
+            }
+          }
+        },
+        "spdy-transport": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz",
+          "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==",
+          "requires": {
+            "debug": "^2.6.8",
+            "detect-node": "^2.0.3",
+            "hpack.js": "^2.1.6",
+            "obuf": "^1.1.1",
+            "readable-stream": "^2.2.9",
+            "safe-buffer": "^5.0.1",
+            "wbuf": "^1.7.2"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "2.6.9",
+              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+              "requires": {
+                "ms": "2.0.0"
+              }
+            }
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          },
+          "dependencies": {
+            "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=="
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "style-loader": {
+          "version": "0.23.0",
+          "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.0.tgz",
+          "integrity": "sha512-uCcN7XWHkqwGVt7skpInW6IGO1tG6ReyFQ1Cseh0VcN6VdcFQi62aG/2F3Y9ueA8x4IVlfaSUxpmQXQD9QrEuQ==",
+          "requires": {
+            "loader-utils": "^1.1.0",
+            "schema-utils": "^0.4.5"
+          },
+          "dependencies": {
+            "schema-utils": {
+              "version": "0.4.7",
+              "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+              "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+              "requires": {
+                "ajv": "^6.1.0",
+                "ajv-keywords": "^3.1.0"
+              }
+            }
+          }
+        },
+        "table": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
+          "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
+          "requires": {
+            "ajv": "^6.0.1",
+            "ajv-keywords": "^3.0.0",
+            "chalk": "^2.1.0",
+            "lodash": "^4.17.4",
+            "slice-ansi": "1.0.0",
+            "string-width": "^2.1.1"
+          }
+        },
+        "terser-webpack-plugin": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz",
+          "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==",
+          "requires": {
+            "cacache": "^11.0.2",
+            "find-cache-dir": "^2.0.0",
+            "schema-utils": "^1.0.0",
+            "serialize-javascript": "^1.4.0",
+            "source-map": "^0.6.1",
+            "terser": "^3.8.1",
+            "webpack-sources": "^1.1.0",
+            "worker-farm": "^1.5.2"
+          },
+          "dependencies": {
+            "find-cache-dir": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+              "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+              "requires": {
+                "commondir": "^1.0.1",
+                "make-dir": "^2.0.0",
+                "pkg-dir": "^3.0.0"
+              }
+            },
+            "find-up": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+              "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+              "requires": {
+                "locate-path": "^3.0.0"
+              }
+            },
+            "make-dir": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+              "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+              "requires": {
+                "pify": "^4.0.1",
+                "semver": "^5.6.0"
+              }
+            },
+            "pify": {
+              "version": "4.0.1",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+              "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+            },
+            "pkg-dir": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+              "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+              "requires": {
+                "find-up": "^3.0.0"
+              }
+            },
+            "source-map": {
+              "version": "0.6.1",
+              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+              "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+            }
           }
         },
-        "loader-utils": {
-          "version": "1.2.3",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
-          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+        "url-loader": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.1.tgz",
+          "integrity": "sha512-vugEeXjyYFBCUOpX+ZuaunbK3QXMKaQ3zUnRfIpRBlGkY7QizCnzyyn2ASfcxsvyU3ef+CJppVywnl3Kgf13Gg==",
           "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^2.0.0",
-            "json5": "^1.0.1"
+            "loader-utils": "^1.1.0",
+            "mime": "^2.0.3",
+            "schema-utils": "^1.0.0"
           }
         },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+        "webpack": {
+          "version": "4.19.1",
+          "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.19.1.tgz",
+          "integrity": "sha512-j7Q/5QqZRqIFXJvC0E59ipLV5Hf6lAnS3ezC3I4HMUybwEDikQBVad5d+IpPtmaQPQArvgUZLXIN6lWijHBn4g==",
           "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
+            "@webassemblyjs/ast": "1.7.6",
+            "@webassemblyjs/helper-module-context": "1.7.6",
+            "@webassemblyjs/wasm-edit": "1.7.6",
+            "@webassemblyjs/wasm-parser": "1.7.6",
+            "acorn": "^5.6.2",
+            "acorn-dynamic-import": "^3.0.0",
+            "ajv": "^6.1.0",
+            "ajv-keywords": "^3.1.0",
+            "chrome-trace-event": "^1.0.0",
+            "enhanced-resolve": "^4.1.0",
+            "eslint-scope": "^4.0.0",
+            "json-parse-better-errors": "^1.0.2",
+            "loader-runner": "^2.3.0",
+            "loader-utils": "^1.1.0",
+            "memory-fs": "~0.4.1",
+            "micromatch": "^3.1.8",
+            "mkdirp": "~0.5.0",
+            "neo-async": "^2.5.0",
+            "node-libs-browser": "^2.0.0",
+            "schema-utils": "^0.4.4",
+            "tapable": "^1.1.0",
+            "uglifyjs-webpack-plugin": "^1.2.4",
+            "watchpack": "^1.5.0",
+            "webpack-sources": "^1.2.0"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "5.7.4",
+              "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+              "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg=="
+            },
+            "schema-utils": {
+              "version": "0.4.7",
+              "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+              "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+              "requires": {
+                "ajv": "^6.1.0",
+                "ajv-keywords": "^3.1.0"
+              }
+            }
           }
         },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "requires": {
-            "p-try": "^2.0.0"
+        "webpack-dev-server": {
+          "version": "3.1.9",
+          "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.9.tgz",
+          "integrity": "sha512-fqPkuNalLuc/hRC2QMkVYJkgNmRvxZQo7ykA2e1XRg/tMJm3qY7ZaD6d89/Fqjxtj9bOrn5wZzLD2n84lJdvWg==",
+          "requires": {
+            "ansi-html": "0.0.7",
+            "bonjour": "^3.5.0",
+            "chokidar": "^2.0.0",
+            "compression": "^1.5.2",
+            "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.18.0",
+            "import-local": "^2.0.0",
+            "internal-ip": "^3.0.1",
+            "ip": "^1.1.5",
+            "killable": "^1.0.0",
+            "loglevel": "^1.4.1",
+            "opn": "^5.1.0",
+            "portfinder": "^1.0.9",
+            "schema-utils": "^1.0.0",
+            "selfsigned": "^1.9.1",
+            "serve-index": "^1.7.2",
+            "sockjs": "0.3.19",
+            "sockjs-client": "1.1.5",
+            "spdy": "^3.4.1",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^5.1.0",
+            "webpack-dev-middleware": "3.4.0",
+            "webpack-log": "^2.0.0",
+            "yargs": "12.0.2"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+              "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+              "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+              "requires": {
+                "ansi-regex": "^2.0.0"
+              }
+            }
           }
         },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+        "workbox-webpack-plugin": {
+          "version": "3.6.2",
+          "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-3.6.2.tgz",
+          "integrity": "sha512-FGSkcaiMDM41uTGkYf7O6hf2W7UvkNc+iUIltfGiRp+qeQfXKOOh5fJCz+a6AFkeuGELSSYROsQRuOqX8LytcQ==",
           "requires": {
-            "p-limit": "^2.0.0"
+            "babel-runtime": "^6.26.0",
+            "json-stable-stringify": "^1.0.1",
+            "workbox-build": "^3.6.2"
           }
         },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
-        },
-        "strip-ansi": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
-          "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
-          "requires": {
-            "ansi-regex": "^4.0.0"
-          }
-        }
-      }
-    },
-    "react-dom": {
-      "version": "16.14.0",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
-      "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2",
-        "scheduler": "^0.19.1"
-      }
-    },
-    "react-dropdown": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/react-dropdown/-/react-dropdown-1.9.0.tgz",
-      "integrity": "sha512-BDApCUhs0qHqnFW3b54SuqI200FOOsmiy0dejdmtdTn/MMY11jcou3CLX1oT2Qa1PdN7viTyAGT8YCpK5qb9xg==",
-      "requires": {
-        "classnames": "^2.2.3"
-      }
-    },
-    "react-dropdown-select": {
-      "version": "4.7.1",
-      "resolved": "https://registry.npmjs.org/react-dropdown-select/-/react-dropdown-select-4.7.1.tgz",
-      "integrity": "sha512-yoF39vFN+F2TaRK1EXnhiz+8jyv40E7+MRUD/X/UsMr2dnYFWoFMMrTIVXcjVnDCFlU+yAvZYRqb+8b60bUuyw==",
-      "requires": {
-        "@emotion/core": "^10.0.27",
-        "@emotion/styled": "^10.0.27"
-      }
-    },
-    "react-easy-crop": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-2.1.2.tgz",
-      "integrity": "sha512-LHXQFyJVXGMgmjSzX1KMeX1uE/dI26O2608DsrlCDwRKOkaS7Kb6pQjeS30efGfzrRkUD5Qff+ANxhaPO+pVNg==",
-      "requires": {
-        "@emotion/core": "^10.0.27",
-        "@emotion/styled": "^10.0.27",
-        "tslib": "1.11.2"
-      }
-    },
-    "react-easy-swipe": {
-      "version": "0.0.21",
-      "resolved": "https://registry.npmjs.org/react-easy-swipe/-/react-easy-swipe-0.0.21.tgz",
-      "integrity": "sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==",
-      "requires": {
-        "prop-types": "^15.5.8"
-      }
-    },
-    "react-error-overlay": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz",
-      "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q=="
-    },
-    "react-fine-uploader": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/react-fine-uploader/-/react-fine-uploader-1.1.1.tgz",
-      "integrity": "sha512-aUOZO3Wr8OynK2LyF2QMPHSe6gWSonNyk/hgo6olBRim92T/sa07pcy/sR2ljucrv9IaJC61Qb8ZGGfcs/I82A==",
-      "requires": {
-        "fine-uploader-wrappers": "^1.0.1",
-        "object-assign": "4.1.1",
-        "react-transition-group": "2.x"
-      },
-      "dependencies": {
-        "dom-helpers": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
-          "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+        "yargs": {
+          "version": "12.0.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
+          "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
           "requires": {
-            "@babel/runtime": "^7.1.2"
+            "cliui": "^4.0.0",
+            "decamelize": "^2.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^3.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1 || ^4.0.0",
+            "yargs-parser": "^10.1.0"
+          },
+          "dependencies": {
+            "find-up": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+              "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+              "requires": {
+                "locate-path": "^3.0.0"
+              }
+            }
           }
         },
-        "react-transition-group": {
-          "version": "2.9.0",
-          "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
-          "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
+        "yargs-parser": {
+          "version": "10.1.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+          "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
           "requires": {
-            "dom-helpers": "^3.4.0",
-            "loose-envify": "^1.4.0",
-            "prop-types": "^15.6.2",
-            "react-lifecycles-compat": "^3.0.4"
+            "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="
+            }
           }
         }
       }
     },
-    "react-google-login": {
-      "version": "5.1.25",
-      "resolved": "https://registry.npmjs.org/react-google-login/-/react-google-login-5.1.25.tgz",
-      "integrity": "sha512-N7SZkjTEX9NsC3hywXs68SPJWAHo6M19Bs1OIFPirG0yomGF7KnbKjSqoiIfxz1V7fKAt8bkfBAzogwnGWYTeQ==",
-      "requires": {
-        "@types/react": "*",
-        "prop-types": "^15.6.0"
-      }
-    },
-    "react-grid-system": {
-      "version": "4.4.11",
-      "resolved": "https://registry.npmjs.org/react-grid-system/-/react-grid-system-4.4.11.tgz",
-      "integrity": "sha512-ehaQLEi4WyX/DfjD6bUf2Y6I60T28YpJUJhcEoM+YcTeXqgNqVyp3Prq4cYryV9bYKzK046d6dff2VwnopojNg==",
-      "requires": {
-        "prop-types": "^15.7.2"
-      }
-    },
-    "react-icons": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-3.11.0.tgz",
-      "integrity": "sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q==",
-      "requires": {
-        "camelcase": "^5.0.0"
-      }
-    },
-    "react-image-crop": {
-      "version": "8.6.6",
-      "resolved": "https://registry.npmjs.org/react-image-crop/-/react-image-crop-8.6.6.tgz",
-      "integrity": "sha512-2iQHKp12dYb6Fu2iN/Mg19BeLMgrbdOuKkU9k0RH7CHX6ZZylOlhfCM3/RsECbKnjGJRtGpXniGF+/i9CGis1A==",
-      "requires": {
-        "clsx": "^1.1.1",
-        "core-js": "^3.6.5",
-        "prop-types": "^15.7.2"
-      }
-    },
-    "react-input-mask": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/react-input-mask/-/react-input-mask-2.0.4.tgz",
-      "integrity": "sha512-1hwzMr/aO9tXfiroiVCx5EtKohKwLk/NT8QlJXHQ4N+yJJFyUuMT+zfTpLBwX/lK3PkuMlievIffncpMZ3HGRQ==",
-      "requires": {
-        "invariant": "^2.2.4",
-        "warning": "^4.0.2"
-      }
-    },
-    "react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-    },
-    "react-lifecycles-compat": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
-      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
-    },
-    "react-recaptcha": {
-      "version": "2.3.10",
-      "resolved": "https://registry.npmjs.org/react-recaptcha/-/react-recaptcha-2.3.10.tgz",
-      "integrity": "sha512-IyanbozsYCuHvTYDuskZTIEcRAMG/sdvAu5b29iQWoC8Kd3Zk9WGCv2oNxh6RfGHvSvgHAyaLjmC6ei/yMsJ7g=="
-    },
-    "react-responsive-carousel": {
-      "version": "3.2.10",
-      "resolved": "https://registry.npmjs.org/react-responsive-carousel/-/react-responsive-carousel-3.2.10.tgz",
-      "integrity": "sha512-O8MV2LoR07BttvWaXesyWkE6s8xRW6p6HiMkelZ3TuPYQwKnlw+fYtZN+bQ3/1jg0D5JQGATY4Hnw/4WEXHnag==",
-      "requires": {
-        "classnames": "^2.2.5",
-        "prop-types": "^15.5.8",
-        "react-easy-swipe": "^0.0.21"
-      }
-    },
     "react-router": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
@@ -14392,6 +20368,11 @@
         "prop-types": "^15.7.2"
       }
     },
+    "react-router-redux": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-4.0.8.tgz",
+      "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4="
+    },
     "react-scripts": {
       "version": "2.1.8",
       "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.1.8.tgz",
@@ -14490,6 +20471,61 @@
         }
       }
     },
+    "react-select": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/react-select/-/react-select-2.4.4.tgz",
+      "integrity": "sha512-C4QPLgy9h42J/KkdrpVxNmkY6p4lb49fsrbDk/hRcZpX7JvZPNb6mGj+c5SzyEtBv1DmQ9oPH4NmhAFvCrg8Jw==",
+      "requires": {
+        "classnames": "^2.2.5",
+        "emotion": "^9.1.2",
+        "memoize-one": "^5.0.0",
+        "prop-types": "^15.6.0",
+        "raf": "^3.4.0",
+        "react-input-autosize": "^2.2.1",
+        "react-transition-group": "^2.2.1"
+      },
+      "dependencies": {
+        "dom-helpers": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
+          "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+          "requires": {
+            "@babel/runtime": "^7.1.2"
+          }
+        },
+        "react-transition-group": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
+          "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
+          "requires": {
+            "dom-helpers": "^3.4.0",
+            "loose-envify": "^1.4.0",
+            "prop-types": "^15.6.2",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        }
+      }
+    },
+    "react-show-more": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/react-show-more/-/react-show-more-2.0.0.tgz",
+      "integrity": "sha512-PlB/Ni+w0WVFmvQIqF6x6AElix51O73LbHOIzvPLyWXK8fwEz7+ES+vw7+EC/Taw0NZ3LGkwaHslpMiUh+1bQw==",
+      "requires": {
+        "react-truncate": "^2.3.0"
+      }
+    },
+    "react-slick": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.25.2.tgz",
+      "integrity": "sha512-8MNH/NFX/R7zF6W/w+FS5VXNyDusF+XDW1OU0SzODEU7wqYB+ZTGAiNJ++zVNAVqCAHdyCybScaUB+FCZOmBBw==",
+      "requires": {
+        "classnames": "^2.2.5",
+        "enquire.js": "^2.1.6",
+        "json2mq": "^0.2.0",
+        "lodash.debounce": "^4.0.8",
+        "resize-observer-polyfill": "^1.5.0"
+      }
+    },
     "react-star-ratings": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/react-star-ratings/-/react-star-ratings-2.3.0.tgz",
@@ -14500,6 +20536,95 @@
         "react": "^16.1.0"
       }
     },
+    "react-summernote": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/react-summernote/-/react-summernote-2.0.2.tgz",
+      "integrity": "sha512-wVceqtDtz7PaPN7Agh2I22TZY+H0FZpjZuNDQB+Rpx0zSZeeYIBcltI6//XY6vDmOy4AOHpltEBFbYHMyo+Ibw==",
+      "requires": {
+        "codemirror": "^5.26.0",
+        "prop-types": "^15.5.10",
+        "summernote": "^0.8.15"
+      }
+    },
+    "react-swipeable-views": {
+      "version": "0.13.9",
+      "resolved": "https://registry.npmjs.org/react-swipeable-views/-/react-swipeable-views-0.13.9.tgz",
+      "integrity": "sha512-WXC2FKYvZ9QdJ31v9LjEJEl1bA7E4AcaloTkbW0uU0dYf5uvv4aOpiyxubvOkVl1a5L2UAHmKSif4TmJ9usrSg==",
+      "requires": {
+        "@babel/runtime": "7.0.0",
+        "prop-types": "^15.5.4",
+        "react-swipeable-views-core": "^0.13.7",
+        "react-swipeable-views-utils": "^0.13.9",
+        "warning": "^4.0.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz",
+          "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==",
+          "requires": {
+            "regenerator-runtime": "^0.12.0"
+          }
+        },
+        "regenerator-runtime": {
+          "version": "0.12.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
+        }
+      }
+    },
+    "react-swipeable-views-core": {
+      "version": "0.13.7",
+      "resolved": "https://registry.npmjs.org/react-swipeable-views-core/-/react-swipeable-views-core-0.13.7.tgz",
+      "integrity": "sha512-ekn9oDYfBt0oqJSGGwLEhKvn+QaqMGTy//9dURTLf+vp7W5j6GvmKryYdnwJCDITaPFI2hujXV4CH9krhvaE5w==",
+      "requires": {
+        "@babel/runtime": "7.0.0",
+        "warning": "^4.0.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz",
+          "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==",
+          "requires": {
+            "regenerator-runtime": "^0.12.0"
+          }
+        },
+        "regenerator-runtime": {
+          "version": "0.12.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
+        }
+      }
+    },
+    "react-swipeable-views-utils": {
+      "version": "0.13.9",
+      "resolved": "https://registry.npmjs.org/react-swipeable-views-utils/-/react-swipeable-views-utils-0.13.9.tgz",
+      "integrity": "sha512-QLGxRKrbJCbWz94vkWLzb1Daaa2Y/TZKmsNKQ6WSNrS+chrlfZ3z9tqZ7YUJlW6pRWp3QZdLSY3UE3cN0TXXmw==",
+      "requires": {
+        "@babel/runtime": "7.0.0",
+        "keycode": "^2.1.7",
+        "prop-types": "^15.6.0",
+        "react-event-listener": "^0.6.0",
+        "react-swipeable-views-core": "^0.13.7",
+        "shallow-equal": "^1.2.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz",
+          "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==",
+          "requires": {
+            "regenerator-runtime": "^0.12.0"
+          }
+        },
+        "regenerator-runtime": {
+          "version": "0.12.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
+        }
+      }
+    },
     "react-transition-group": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz",
@@ -14511,6 +20636,56 @@
         "prop-types": "^15.6.2"
       }
     },
+    "react-truncate": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/react-truncate/-/react-truncate-2.4.0.tgz",
+      "integrity": "sha512-3QW11/COYwi6iPUaunUhl06DW5NJBJD1WkmxW5YxqqUu6kvP+msB3jfoLg8WRbu57JqgebjVW8Lknw6T5/QZdA=="
+    },
+    "react-window": {
+      "version": "1.8.6",
+      "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.6.tgz",
+      "integrity": "sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==",
+      "requires": {
+        "@babel/runtime": "^7.0.0",
+        "memoize-one": ">=3.1.1 <6"
+      }
+    },
+    "reactstrap": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-6.5.0.tgz",
+      "integrity": "sha512-dWb3fB/wBAiQloteKlf+j9Nl2VLe6BMZgTEt6hpeTt0t9TwtkeU+2v2NBYONZaF4FZATfMiIKozhWpc2HmLW1g==",
+      "requires": {
+        "classnames": "^2.2.3",
+        "lodash.isfunction": "^3.0.9",
+        "lodash.isobject": "^3.0.2",
+        "lodash.tonumber": "^4.0.3",
+        "prop-types": "^15.5.8",
+        "react-lifecycles-compat": "^3.0.4",
+        "react-popper": "^0.10.4",
+        "react-transition-group": "^2.3.1"
+      },
+      "dependencies": {
+        "dom-helpers": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
+          "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+          "requires": {
+            "@babel/runtime": "^7.1.2"
+          }
+        },
+        "react-transition-group": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
+          "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
+          "requires": {
+            "dom-helpers": "^3.4.0",
+            "loose-envify": "^1.4.0",
+            "prop-types": "^15.6.2",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        }
+      }
+    },
     "read-pkg": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -14877,6 +21052,29 @@
         "minimatch": "3.0.4"
       }
     },
+    "redux": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
+      "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
+      "requires": {
+        "loose-envify": "^1.4.0",
+        "symbol-observable": "^1.2.0"
+      }
+    },
+    "redux-seamless-immutable": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/redux-seamless-immutable/-/redux-seamless-immutable-0.4.0.tgz",
+      "integrity": "sha512-/oS3fhrize9D3RSHemgJxVllohybRrad5IjccotFy8Ni4IKAPTtX1mqszpiCIl12+7v0dNqBpq6ES6R236AliQ==",
+      "requires": {
+        "react-router-redux": "^4.0.0",
+        "seamless-immutable": "^7.1.2"
+      }
+    },
+    "redux-thunk": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
+      "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+    },
     "regenerate": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
@@ -15090,11 +21288,45 @@
       "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
       "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
     },
+    "require-uncached": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+      "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+      "requires": {
+        "caller-path": "^0.1.0",
+        "resolve-from": "^1.0.0"
+      },
+      "dependencies": {
+        "caller-path": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+          "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+          "requires": {
+            "callsites": "^0.2.0"
+          }
+        },
+        "callsites": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+          "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo="
+        },
+        "resolve-from": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+          "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY="
+        }
+      }
+    },
     "requires-port": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
     },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+    },
     "resolve": {
       "version": "1.17.0",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
@@ -15118,6 +21350,39 @@
         }
       }
     },
+    "resolve-dir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+      "requires": {
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
+      },
+      "dependencies": {
+        "global-modules": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+          "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+          "requires": {
+            "global-prefix": "^1.0.1",
+            "is-windows": "^1.0.1",
+            "resolve-dir": "^1.0.0"
+          }
+        },
+        "global-prefix": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+          "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+          "requires": {
+            "expand-tilde": "^2.0.2",
+            "homedir-polyfill": "^1.0.1",
+            "ini": "^1.3.4",
+            "is-windows": "^1.0.1",
+            "which": "^1.2.14"
+          }
+        }
+      }
+    },
     "resolve-from": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -15174,6 +21439,15 @@
         "inherits": "^2.0.1"
       }
     },
+    "rmc-feedback": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/rmc-feedback/-/rmc-feedback-2.0.0.tgz",
+      "integrity": "sha512-5PWOGOW7VXks/l3JzlOU9NIxRpuaSS8d9zA3UULUCuTKnpwBHNvv1jSJzxgbbCQeYzROWUpgKI4za3X4C/mKmQ==",
+      "requires": {
+        "babel-runtime": "6.x",
+        "classnames": "^2.2.5"
+      }
+    },
     "rsvp": {
       "version": "3.6.2",
       "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
@@ -15572,6 +21846,19 @@
         "ajv-keywords": "^3.1.0"
       }
     },
+    "scroll-into-view-if-needed": {
+      "version": "2.2.27",
+      "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.27.tgz",
+      "integrity": "sha512-BKiRstRm4u1bZvw+Wu9TxXhyMZ9fskb/9fbuSGuRzwHhlbKlDetL4dBdYaPfQbEFTttQmpkNtFH7sQpk4rZf9w==",
+      "requires": {
+        "compute-scroll-into-view": "^1.0.16"
+      }
+    },
+    "seamless-immutable": {
+      "version": "7.1.4",
+      "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.4.tgz",
+      "integrity": "sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A=="
+    },
     "select-hose": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -15776,6 +22063,16 @@
         }
       }
     },
+    "shallow-equal": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
+      "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
+    },
+    "shallowequal": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+      "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+    },
     "shebang-command": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -16342,6 +22639,11 @@
       "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
       "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
     },
+    "string-convert": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz",
+      "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c="
+    },
     "string-length": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
@@ -16622,6 +22924,11 @@
       "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
       "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw=="
     },
+    "summernote": {
+      "version": "0.8.18",
+      "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz",
+      "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug=="
+    },
     "supports-color": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -16923,6 +23230,11 @@
       "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
       "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
     },
+    "tinycolor2": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
+      "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA=="
+    },
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -16984,6 +23296,11 @@
         }
       }
     },
+    "toggle-selection": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+      "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
+    },
     "toidentifier": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@@ -16997,6 +23314,14 @@
         "hoek": "4.x.x"
       }
     },
+    "touch": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/touch/-/touch-2.0.2.tgz",
+      "integrity": "sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A==",
+      "requires": {
+        "nopt": "~1.0.10"
+      }
+    },
     "tough-cookie": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@@ -17084,11 +23409,165 @@
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz",
       "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw=="
     },
+    "ua-parser-js": {
+      "version": "0.7.24",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz",
+      "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw=="
+    },
     "uglify-js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz",
       "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0="
     },
+    "uglifyjs-webpack-plugin": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz",
+      "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==",
+      "requires": {
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "schema-utils": "^0.4.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": {
+        "cacache": {
+          "version": "10.0.4",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+          "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+          "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"
+          }
+        },
+        "commander": {
+          "version": "2.13.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+          "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA=="
+        },
+        "find-cache-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+          "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^1.0.0",
+            "pkg-dir": "^2.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "mississippi": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+          "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+          "requires": {
+            "concat-stream": "^1.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"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+        },
+        "pkg-dir": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+          "requires": {
+            "find-up": "^2.1.0"
+          }
+        },
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "schema-utils": {
+          "version": "0.4.7",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "ssri": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+          "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+          "requires": {
+            "safe-buffer": "^5.1.1"
+          }
+        },
+        "uglify-es": {
+          "version": "3.3.9",
+          "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+          "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+          "requires": {
+            "commander": "~2.13.0",
+            "source-map": "~0.6.1"
+          }
+        },
+        "y18n": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
+          "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ=="
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+        }
+      }
+    },
     "unicode-canonical-property-names-ecmascript": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
@@ -17544,6 +24023,11 @@
         "minimalistic-assert": "^1.0.0"
       }
     },
+    "webfontloader": {
+      "version": "1.6.28",
+      "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz",
+      "integrity": "sha1-23hhKSU8tujq5UwvsF+HCvZnW64="
+    },
     "webidl-conversions": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
diff --git a/package.json b/package.json
index 22c837b427c03bfe990bf426d6fcddca56b69ad9..5617ea2b271f792893c5cbad9c4d77bd6789702f 100644
--- a/package.json
+++ b/package.json
@@ -3,11 +3,15 @@
   "version": "0.1.0",
   "private": true,
   "dependencies": {
+    "@fortawesome/fontawesome": "^1.1.8",
+    "@fortawesome/fontawesome-free-solid": "^5.0.13",
+    "@fortawesome/react-fontawesome": "^0.1.14",
     "@material-ui/core": "^4.11.2",
     "@material-ui/icons": "^4.11.2",
     "@material-ui/lab": "^4.0.0-alpha.57",
     "@material-ui/styles": "^4.11.2",
     "@syncfusion/ej2-react-inputs": "^18.3.52",
+    "antd": "^4.13.1",
     "axios": "^0.21.1",
     "base64-img": "^1.0.4",
     "binary-extensions": "^2.1.0",
@@ -15,8 +19,10 @@
     "cookie": "^0.4.1",
     "fine-uploader": "^5.16.2",
     "image-to-base64": "^2.1.1",
+    "install": "^0.13.0",
     "material-design-icons": "^3.0.1",
     "moment": "^2.29.1",
+    "npm": "^7.6.2",
     "react": "^16.14.0",
     "react-cookie": "^4.0.3",
     "react-dom": "^16.14.0",
@@ -29,12 +35,16 @@
     "react-icons": "^3.11.0",
     "react-image-crop": "^8.6.6",
     "react-input-mask": "^2.0.4",
+    "react-moment": "^1.0.0",
     "react-recaptcha": "^2.3.10",
     "react-responsive-carousel": "^3.2.10",
+    "react-rich-text-editor": "^2.1.2",
     "react-router-dom": "^5.1.2",
     "react-router-hash-link": "^2.3.1",
     "react-scripts": "^2.1.8",
     "react-star-ratings": "^2.3.0",
+    "react-swipeable-views": "^0.13.9",
+    "react-window": "^1.8.6",
     "styled-components": "^4.4.1",
     "typescript": "^3.9.7",
     "use-cookie-state": "^1.0.0"
diff --git a/src/Admin/Components/Components/AlertDialog.js b/src/Admin/Components/Components/AlertDialog.js
new file mode 100644
index 0000000000000000000000000000000000000000..14861d979b42a3a78cdeeb07ed501e4615dc4e43
--- /dev/null
+++ b/src/Admin/Components/Components/AlertDialog.js
@@ -0,0 +1,56 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+import React from 'react';
+import Button from '@material-ui/core/Button';
+import Dialog from '@material-ui/core/Dialog';
+import DialogActions from '@material-ui/core/DialogActions';
+import DialogContent from '@material-ui/core/DialogContent';
+import DialogContentText from '@material-ui/core/DialogContentText';
+import DialogTitle from '@material-ui/core/DialogTitle';
+
+const AlertDialog = ( props ) => { 
+    return (
+        <div>
+            <Dialog
+                open={props.open}
+                onClose={props.HandleClose}
+                aria-labelledby="alert-dialog-title"
+                aria-describedby="alert-dialog-description"
+            >
+                <DialogTitle id="alert-dialog-title">
+                    Deseja deletar o dado de id: {props.deleteItem.id}
+                </DialogTitle>
+                <DialogContent>
+                    <DialogContentText id="alert-dialog-description">
+                        Se você deletar essa dado, todas as informações desse dado serão deletas para sempre
+                    </DialogContentText>
+                </DialogContent>
+                <DialogActions>
+                    <Button onClick={props.HandleClose} color="primary">
+                        Não deletar
+                    </Button>
+                    <Button onClick={props.OnDelete} color="secondary" autoFocus>
+                        Deletar
+                    </Button>
+                </DialogActions>
+            </Dialog>
+        </div>
+    );
+} 
+
+export default AlertDialog;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/DataCard.js b/src/Admin/Components/Components/DataCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f5c565d6374808b1a0abc830cdfaba9e805881a
--- /dev/null
+++ b/src/Admin/Components/Components/DataCard.js
@@ -0,0 +1,140 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState } from "react";
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import { useStyles } from "../Styles/DataCard"; 
+// Icons
+import EditRoundedIcon from "@material-ui/icons/EditRounded";
+import ArrowBackIosIcon from "@material-ui/icons/ArrowBackIos";
+
+const DataCard = (params) => {
+    console.log(params)
+    return(
+        <div>
+            {params.data}
+        </div>
+    )
+    // const classes = useStyles();
+    // const [edit, setEdit] = useState(false);
+
+    // const buttonArr = [
+    //     {
+    //         label: "Listar",
+    //         icon: <ListRoundedIcon />,
+    //     },
+    //     edit
+    //         ? {
+    //             label: "Voltar",
+    //             icon: <ArrowBackIosIcon />,
+    //         }
+    //         : {
+    //             label: "Editar",
+    //             icon: <EditRoundedIcon />,
+    //         },
+    // ];
+
+    // //Change state of the var edit
+    // const EditHandler = () => {
+    //     setEdit(!edit);
+    // };
+
+    // // it stores an function that will be called when a button is clicked
+    // const functionArr = [props.viewData, EditHandler];
+
+    // return (
+    //     edit ?
+    //         <Card className={classes.root} variant="outlined">
+    //             <CardContent>
+    //                 <div className={classes.displayRow}>
+    //                     <Typography
+    //                         className={classes.title}
+    //                         color="inherit"
+    //                         gutterBottom
+    //                     >
+    //                         {props.data[1].prop}
+    //                     </Typography>
+    //                     <ButtonGroup
+    //                         color="primary"
+    //                         aria-label="outlined primary button group"
+    //                     >
+    //                         {buttonArr.map((button, index) => (
+    //                             <Button onClick={functionArr[index]}>
+    //                                 <div className={classes.displayRow}>
+    //                                     {button.icon}
+    //                                     {button.label}
+    //                                 </div>
+    //                             </Button>
+    //                         ))}
+    //                     </ButtonGroup>
+    //                 </div>
+                    
+    //                 {/* Display the edit area */}
+    //                 {props.component} 
+
+    //             </CardContent>
+    //         </Card>
+    //         :
+    //         <Card className={classes.root} variant="outlined">
+    //             <CardContent>
+    //                 <div className={classes.displayRow}>
+    //                     <Typography
+    //                         className={classes.title}
+    //                         color="inherit"
+    //                         gutterBottom
+    //                     >
+    //                         {props.data[1].prop}
+    //                     </Typography>
+    //                     <ButtonGroup
+    //                         color="primary"
+    //                         aria-label="outlined primary button group"
+    //                     >
+    //                         {buttonArr.map((button, index) => (
+    //                             <Button onClick={functionArr[index]}>
+    //                                 <div className={classes.displayRow}>
+    //                                     {button.icon}
+    //                                     {button.label}
+    //                                 </div>
+    //                             </Button>
+    //                         ))}
+    //                     </ButtonGroup>
+    //                 </div>
+    //                 {props.data.map((info , index) => (
+    //                     <div className={classes.displayColumn} key={index}>
+    //                         <Typography color="initial" className={classes.subTitle}>
+    //                             {info.subTitle}
+    //                         </Typography>
+    //                         <Typography color='textSecondary'>
+    //                             {
+    //                                 info.prop === null ? 'Sem dados' : info.prop
+    //                             }
+    //                         </Typography>
+    //                     </div>
+    //                 ))}
+    //             </CardContent>
+    //         </Card>
+    // );
+}
+
+export default DataCard;
diff --git a/src/Admin/Components/Components/DataCards/ActivityCard.js b/src/Admin/Components/Components/DataCards/ActivityCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..517bb9a0f6c047dc57a7484a4e5f896b8789dd8b
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/ActivityCard.js
@@ -0,0 +1,145 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import { useStyles } from "../../Styles/DataCard";
+import Grid from "@material-ui/core/Grid";
+//imports from local files
+import { GetAData } from "../../../Filters";
+import { getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig';
+import { Link } from 'react-router-dom'
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+
+const ActivityCard = ({ match }) => {
+    const classes = useStyles();
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({}); //Necessary to consult the API, data 
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(GetAData("activities", match.params.id),
+            (data, header) => {
+                setItem(data);
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        console.log(item)
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "DONO(A)",
+                prop: item.owner === null ? '' : item.owner.name
+            },
+            {
+                subTitle: "Trackable type",
+                prop: item["trackable_type"],
+            },
+            {
+                subTitle: "Atividade",
+                prop: item.activity,
+            },
+            {
+                subTitle: "Privacidade",
+                prop: item.privacy,
+            },
+            {
+                subTitle: "Criado em",
+                prop: DisplayDate(item["created_at"]),
+            },
+            {
+                subTitle: "Recipient type",
+                prop: item["recipient_type"],
+            },
+
+        ];
+
+        return (
+            <Card>
+                <CardContent>
+                    <Grid container xs={12} justify="space-between" alignItems="center" alignContent="center">
+                        <Grid item>
+                            <Typography className={classes.title} color="inherit" gutterBottom>
+                                {item.id}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <ButtonGroup
+                                color="primary"
+                                aria-label="outlined primary button group"
+                            >
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/activities`}>
+                                    <Button
+                                        startIcon={<ListRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Listar
+                                    </Button>
+                                </Link>
+                            </ButtonGroup>
+                        </Grid>
+                    </Grid>
+                    {DATA.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.subTitle}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.prop === null ? "Sem dados" : info.prop}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Card>
+        );
+    }
+};
+
+export default ActivityCard;
diff --git a/src/Admin/Components/Components/DataCards/CollectionCard.js b/src/Admin/Components/Components/DataCards/CollectionCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..79773d75017ce2eb1f5084677f6e7b0df2675791
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/CollectionCard.js
@@ -0,0 +1,223 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import { useStyles } from "../../Styles/DataCard";
+import Grid from '@material-ui/core/Grid';
+// Icons
+import EditRoundedIcon from "@material-ui/icons/EditRounded";
+import DeleteRoundedIcon from "@material-ui/icons/DeleteRounded";
+//imports from local files
+import { GetAData, DeleteFilter } from "../../../Filters";
+import { Link, useHistory } from 'react-router-dom'
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig';
+
+const CollectionCard = ({ match }) => {
+    let history = useHistory()
+    const classes = useStyles();
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({}); //Necessary to consult the API, data
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+
+    //Called when user want to delete one institution
+    async function DeleteHandler() {
+        const id = match.params.id
+        deleteRequest(
+            DeleteFilter("collections", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A Coleção foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    history.goBack()
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+            }
+        );
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("collections", match.params.id),
+            (data, header) => {
+                setItem(data);
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "Nome",
+                prop: item.name,
+            },
+            {
+                subTitle: "Descrição",
+                prop: item.description,
+            },
+            {
+                subTitle: "Endereço",
+                prop: item.owner ? item.owner.name : null,
+            },
+            {
+                subTitle: "Score",
+                prop: item.score,
+            },
+            {
+                subTitle: "Privacidade",
+                prop: item.privacy,
+            },
+            {
+                subTitle: "Criação",
+                prop: DisplayDate(item.created_at),
+            },
+            {
+                subTitle: "Atualização",
+                prop: DisplayDate(item.updated_at),
+            },
+        ];
+
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid xs={12} justify="space-between" alignItems="center" container>
+                        <Grid item>
+                            <Typography className={classes.title} color="inherit" gutterBottom>
+                                {item.name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <ButtonGroup
+                                color="primary"
+                                aria-label="outlined primary button group"
+                            >
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/Collections`}>
+                                    <Button
+                                        startIcon={<ListRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Listar
+                                    </Button>
+                                </Link>
+
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/EditCollection/${item.id}`}>
+                                    <Button
+                                        startIcon={<EditRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Editar
+                                    </Button>
+                                </Link>
+
+                                <Button
+                                    startIcon={<DeleteRoundedIcon />}
+                                    color="secondary"
+                                    variant="outlined"
+                                    onClick={DeleteHandler}
+                                >
+                                    Deletar
+                                </Button>
+                            </ButtonGroup>
+                        </Grid>
+                    </Grid>
+                    {DATA.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.subTitle}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.prop === null ? "Sem dados" : info.prop}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Card>
+        );
+    }
+};
+
+export default CollectionCard;
diff --git a/src/Admin/Components/Components/DataCards/CommunityQuestionCard.js b/src/Admin/Components/Components/DataCards/CommunityQuestionCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf52b6ac957090aafaad1cfcbccf1b5bc5bbd066
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/CommunityQuestionCard.js
@@ -0,0 +1,166 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import Grid from "@material-ui/core/Grid";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import { useStyles } from "../../Styles/DataCard";
+// Icons
+import EmailRoundedIcon from '@material-ui/icons/EmailRounded';
+//imports from local files
+import { GetAData } from "../../../Filters";
+import { Store } from '../../../../Store';
+import { Link } from 'react-router-dom'
+import Unauthorized from "../Unauthorized";
+import { getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+
+const CommunityQuestions = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+    const classes = useStyles();
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({});//Necessary to consult the API, data
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("contacts", match.params.id),
+            (data, header) => {
+                setItem(data);
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "Nome",
+                prop: item.name,
+            },
+            {
+                subTitle: "Email",
+                prop:
+                    item.email ?
+                        <Link to={`/admin/sendEmail/${item.email}`} style={{ textDecoration: 'none' }}>
+                            <Button
+                                variant='text'
+                                color='primary'
+                                startIcon={<EmailRoundedIcon />}
+                            >
+                                {item.email}
+                            </Button>
+                        </Link> : null
+            },
+            {
+                subTitle: "Mensagem",
+                prop: item.message,
+            },
+            {
+                subTitle: "Criado em",
+                prop: DisplayDate(item.created_at),
+            },
+        ];
+
+        return (
+            <Card>
+                <CardContent>
+                    <Grid direction="row" justify="space-between" alignContent="center" alignItems="center" container>
+                        <Grid item>
+                            <Typography className={classes.title} color="inherit" gutterBottom>
+                                {item.name}
+                            </Typography>
+                        </Grid>
+                        <Grid>
+                            <ButtonGroup
+                                color="primary"
+                                aria-label="outlined primary button group"
+                            >
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/CommunityQuestions`}>
+                                    <Button
+                                        startIcon={<ListRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Listar
+                                    </Button>
+                                </Link>
+                            </ButtonGroup>
+                        </Grid>
+                    </Grid>
+                    {DATA.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.subTitle}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.prop === null ? "Sem dados" : info.prop}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Card>
+        );
+    } else return <Unauthorized />
+};
+
+export default CommunityQuestions;
diff --git a/src/Admin/Components/Components/DataCards/ComplaintsCard.js b/src/Admin/Components/Components/DataCards/ComplaintsCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..72afd79ad3058e9b24ea4819508574a60b13ba6c
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/ComplaintsCard.js
@@ -0,0 +1,865 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import Paper from "@material-ui/core/Paper";
+import Grid from "@material-ui/core/Grid";
+import Divider from "@material-ui/core/Divider";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import GetAppRoundedIcon from "@material-ui/icons/GetAppRounded";
+import LaunchRoundedIcon from "@material-ui/icons/LaunchRounded";
+import RemoveRoundedIcon from "@material-ui/icons/RemoveRounded";
+import RestoreRoundedIcon from "@material-ui/icons/RestoreRounded";
+import { useStyles } from "../../Styles/DataCard";
+import Dialog from '@material-ui/core/Dialog';
+import DialogActions from '@material-ui/core/DialogActions';
+import DialogContent from '@material-ui/core/DialogContent';
+import DialogContentText from '@material-ui/core/DialogContentText';
+import DialogTitle from '@material-ui/core/DialogTitle';
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import CircularProgress from '@material-ui/core/CircularProgress';
+//imports from local files
+import { GetAData, MethodsToComplain } from "../../../Filters";
+import { Link } from "react-router-dom";
+import { CardActions } from "@material-ui/core";
+import { apiDomain } from '../../../../env';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { getRequest, postRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//styles
+
+const PORTAL_MEC = "https://plataformaintegrada.mec.gov.br/";
+
+const CollectionCard = ({ match }) => {
+    const classes = useStyles();
+
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({}); //Necessary to consult the API, data
+    const [complainedObject, setComplainedObject] = useState(null);//stores the data from complained object
+    const [contentModal, setContentModal] = useState("");
+    const [titleModal, setTitleModal] = useState("");
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const [loadingObject, setLoadingObject] = useState(false);
+    const [open, setOpen] = React.useState(false);
+    const [scroll, setScroll] = React.useState('paper');
+
+    const handleClose = () => {
+        setOpen(false);
+    };
+
+    const descriptionElementRef = React.useRef(null);
+    React.useEffect(() => {
+        if (open) {
+            const { current: descriptionElement } = descriptionElementRef;
+            if (descriptionElement !== null) {
+                descriptionElement.focus();
+            }
+        }
+    }, [open]);
+
+    const convertToLink = (type, id) => {
+        switch (type) {
+            case "LearningObject":
+                return `recurso?id=${id}/`;
+            case "User":
+                return `usuario-publico/${id}/`;
+            default:
+                return "";
+        }
+    };
+
+    const handleClickOpen = (scrollType) => async () => {
+        setLoadingObject(true);
+        setOpen(true);
+        setScroll(scrollType);
+
+        if (!complainedObject) {
+            getRequest(
+                GetAData("learning_objects", item.complainable_id),
+                (data, header) => {
+                    HandleContentModal(data);
+                    setComplainedObject(data)
+                    setLoadingObject(false);
+                },
+                (error) => {
+                    HandleContentModal();
+                    setLoadingObject(false);
+                }
+            )
+        } else {
+            HandleContentModal(complainedObject);
+            setLoadingObject(false);
+        }
+    };
+
+    const ComplaintStatus = (status, type) => {
+        switch (status) {
+            case "accepted":
+                return (
+                    <Paper
+                        className={classes.marginTop}
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FA8072",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        {
+                            type === "User" ? "BLOQUEADO" : "REMOVIDO"
+                        }
+                    </Paper>
+                );
+            case "complained":
+                return (
+                    <Paper
+                        className={classes.marginTop}
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FF8C00",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        PENDENTE
+                    </Paper>
+                );
+            case "rejected":
+                return (
+                    <Paper
+                        className={classes.marginTop}
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#228B22",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        AVALIADO
+                    </Paper>
+                );
+            default:
+                return "NOTHING";
+        }
+    };
+
+    const reloadData = () => {
+        setIsLoaded(false)
+        getRequest(
+            GetAData("complaints", match.params.id),
+            (data, header) => {
+                setItem(data)
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }
+
+    const HandleComplainUser = (option) => {
+        const body = {
+            "option": option ? option : null,
+            "complaints": [
+                {
+                    "id": item.id,
+                    "state": option ? "accept" : "reject"
+                }
+
+            ]
+        }
+        postRequest(
+            `/complaints/${item.complainable_id}/treat_related`,
+            body,
+            (data) => {
+                if (data.errors)
+                    HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                else {
+                    HandleSnack('Alteração feito com sucesso!', true, 'success', '#228B22')
+                    reloadData()
+                }
+            },  
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+            }
+        )
+    }
+
+    const Actions = (status, type) => {
+        switch (status) {
+            case "complained":
+                return (
+                    type === "User" ?
+                        <Grid container spacing={2}>
+                            <Grid item xs={12} spacing={2}>
+                                <Button
+                                    style={{
+                                        width: "100%",
+                                        color: "#FFFAFA",
+                                        backgroundColor: "#FFA07A",
+                                        fontWeight: "500",
+                                    }}
+                                    variant="contained"
+                                    onClick={() => {
+                                        HandleComplainUser()
+                                    }}
+                                >
+                                    Recusar
+                                </Button>
+                            </Grid>
+                            <Grid item xs={12}>
+                                <Button
+                                    style={{
+                                        width: "100%",
+                                        color: "#FFFAFA",
+                                        backgroundColor: "#FA8072",
+                                        fontWeight: "500",
+                                    }}
+                                    variant="contained"
+                                    onClick={() => {
+                                        HandleComplainUser("blocked")
+                                    }}
+                                >
+                                    Bloqueio semanal
+                                </Button>
+                            </Grid>
+                            <Grid item xs={12}>
+                                <Button
+                                    style={{
+                                        width: "100%",
+                                        color: "#FFFAFA",
+                                        backgroundColor: "red",
+                                        fontWeight: "500",
+                                    }}
+                                    variant="contained"
+                                    onClick={() => {
+                                        HandleComplainUser("banished")
+                                    }}
+                                >
+                                    Bloqueio permanente
+                                </Button>
+                            </Grid>
+                        </Grid>
+                        :
+                        <>
+                            <Grid
+                                container
+                                className={classes.marginTop}
+                                direction="row"
+                                justify="space-between"
+                                alignItems="center"
+                            >
+                                <Grid item>
+                                    <Typography
+                                        color="initial"
+                                        className={classes.subTitle}
+                                        variant="h6"
+                                    >
+                                        Remover o recurso e notificar o autor
+                                </Typography>
+                                </Grid>
+                                <Grid item>
+                                    <Button
+                                        style={{
+                                            color: "#FFFAFA",
+                                            backgroundColor: "#FA8072",
+                                            fontWeight: "500",
+                                        }}
+                                        variant="contained"
+                                        onClick={() => HandleComplainObj("accept")}
+                                        startIcon={
+                                            <RemoveRoundedIcon style={{ fill: "#FFFAFA" }} />
+                                        }
+                                    >
+                                        Remover
+                                    </Button>
+                                </Grid>
+                            </Grid>
+
+                            <Divider className={classes.marginTop} />
+
+                            <Grid
+                                container
+                                className={classes.marginTop}
+                                direction="row"
+                                justify="space-between"
+                                alignItems="center"
+                            >
+                                <Grid item>
+                                    <Typography
+                                        color="initial"
+                                        className={classes.subTitle}
+                                        variant="h6"
+                                    >
+                                        Reativar o recurso na plataforma
+                                    </Typography>
+                                </Grid>
+                                <Grid item>
+                                    <Button
+                                        style={{
+                                            color: "#FFFAFA",
+                                            backgroundColor: "#228B22",
+                                            fontWeight: "500",
+                                        }}
+                                        variant="contained"
+                                        onClick={() => HandleComplainObj("reject")}
+                                        startIcon={
+                                            <RestoreRoundedIcon style={{ fill: "#FFFAFA" }} />
+                                        }
+                                    >
+                                        Ativar
+                                </Button>
+                                </Grid>
+                            </Grid>
+                        </>
+                );
+            default:
+                return "Essa denúncia já foi avaliado!";
+        }
+    }
+
+    const DisplayButtonsArea = (type) => {
+        switch (type) {
+            case "User":
+                return (
+                    <CardActions>
+                        <Link to={`/admin/user/${item.complainable_id}`}>
+                            <Button
+                                variant="contained"
+                                color="primary"
+                                startIcon={<VisibilityIcon />}
+                            >
+                                Visualizar usuário
+                            </Button>
+                        </Link>
+                        <Button
+                            style={{
+                                fontWeight: "500",
+                                backgroundColor: "#FA8072"
+                            }}
+                            variant="contained"
+                            startIcon={<LaunchRoundedIcon style={{ fill: "#FFFAFA" }} />}
+                        >
+                            <a
+                                style={{ textDecoration: "none", color: "#FFFAFA" }}
+                                target="_blank"
+                                href={
+                                    PORTAL_MEC +
+                                    convertToLink(
+                                        item.complainable_type,
+                                        item.complainable_id
+                                    )
+                                }
+                            >
+                                MEC RED
+                                </a>
+                        </Button>
+                    </CardActions>
+                )
+                break;
+            default:
+                return (
+                    <CardActions>
+                        <Button
+                            variant="contained"
+                            color="primary"
+                            startIcon={<GetAppRoundedIcon />}
+                            onClick={handleClickOpen('paper')}
+                        >
+                            Veja o recurso
+                        </Button>
+                        <Button
+                            style={{
+                                fontWeight: "500",
+                                backgroundColor: "#FA8072"
+                            }}
+                            variant="contained"
+                            startIcon={<LaunchRoundedIcon style={{ fill: "#FFFAFA" }} />}
+                        >
+                            <a
+                                style={{ textDecoration: "none", color: "#FFFAFA" }}
+                                target="_blank"
+                                href={
+                                    PORTAL_MEC +
+                                    convertToLink(
+                                        item.complainable_type,
+                                        item.complainable_id
+                                    )
+                                }
+                            >
+                                MEC RED
+                                </a>
+                        </Button>
+                    </CardActions>
+                )
+                break;
+        }
+    }
+
+    const HandleContentModal = (data) => {
+        const ok = data ? true : false;
+
+        if (ok) {
+            const importantData = [
+                {
+                    subTitle: "ID",
+                    prop: data.id,
+                },
+                {
+                    subTitle: "Nome",
+                    prop: data.name,
+                },
+                {
+                    subTitle: "Descrição",
+                    prop: data.description,
+                },
+                {
+                    subTitle: "Dono(a)",
+                    prop: data.publisher.name,
+                },
+                {
+                    subTitle: "Autor(a)",
+                    prop: data.author,
+                },
+                {
+                    subTitle: "Score",
+                    prop: data.score,
+                },
+                {
+                    subTitle: "Status",
+                    prop: data.state,
+                },
+                {
+                    subTitle: "Criado em",
+                    prop: data.created_ats
+                },
+                {
+                    subTitle: "Atualizado em",
+                    prop: DisplayDate(data.updated_at)
+                },
+                {
+                    subTitle: "Criado em",
+                    prop: DisplayDate(data.created_at)
+                },
+                {
+                    subTitle: "Visualizações",
+                    prop: data.views_count,
+                },
+                {
+                    subTitle: "Likes",
+                    prop: data.likes_count,
+                },
+                {
+                    subTitle: "Avaliação média",
+                    prop: data.review_average,
+                },
+                {
+                    subTitle: "Likes",
+                    prop: data.likes_count,
+                },
+                {
+                    subTitle: "Linguagem",
+                    prop: (
+                        <div
+                            style={{
+                                display: "flex",
+                                flexDirection: "row",
+                                flexWrap: "wrap",
+                                justifyContent: "Space-between",
+                            }}
+                        >
+                            {data.language.map((lan, index) => (
+                                <Paper
+                                    elevation={3}
+                                    key={index}
+                                    style={{
+                                        borderRadius: 18,
+                                        padding: "0.8em",
+                                        marginBottom: "1em",
+                                        marginRight: "1em",
+                                        backgroundColor: "#D3D3D3",
+                                        fontSize: 14,
+                                    }}
+                                >
+                                    {lan.name}
+                                </Paper>
+                            ))}
+                        </div>
+                    ),
+                },
+                {
+                    subTitle: "Tipo de recurso",
+                    prop: data.object_type,
+                },
+            ]
+
+            setContentModal(
+                <Grid container>
+                    <Grid item justify="flex-start" alignItems="center" alignContent="center">
+                        {data.thumbnail ? (
+                            <Grid item style={{ marginTop: "1em", marginBottom: "1em", alignSelf: "center" }}>
+                                <a target="_blank" href={apiDomain + data.thumbnail}>
+                                    {" "}
+                                    <img src={apiDomain + data.thumbnail} alt="" />{" "}
+                                </a>
+                            </Grid>
+                        ) : null}
+                        {importantData.map((info, index) => (
+                            <Grid item className={classes.displayColumn} key={index}>
+                                <Typography color="textPrimary">
+                                    {info.subTitle}
+                                </Typography>
+                                <Typography color="textSecondary">
+                                    {info.prop === null ? "Sem dados" : info.prop}
+                                </Typography>
+                            </Grid>
+                        ))}
+                    </Grid>
+                </Grid>
+            )
+            setTitleModal(data.name)
+
+        } else {
+            setTitleModal("Indisponível");
+            setContentModal("Não foi possível encontrar!")
+        }
+    }
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData).format("LLL").toString();
+    }
+
+    const HandleComplainObj = async (method) => {
+        postRequest(
+            MethodsToComplain("complaints", match.params.id, method),
+            {},
+            (data) => {
+                if (data.errors)
+                    HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                else
+                {
+                    HandleSnack('Alteração feito com sucesso', true, 'success', '#228B22')
+                    reloadData()
+                }
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+            }
+        )
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("complaints", match.params.id),
+            (data, header) => {
+                setItem(data)
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "State",
+                prop: item.state,
+            },
+            {
+                subTitle: "Descrição",
+                prop: item.description,
+            },
+            {
+                subTitle: "Status",
+                prop: item.complaint_reason.status,
+            },
+            {
+                subTitle: "Motivo",
+                prop: item.complaint_reason.reason,
+            },
+            {
+                subTitle: "Criado",
+                prop: DisplayDate(item.created_at),
+            },
+            {
+                subTitle: "User",
+                prop: item.user_id,
+            },
+        ];
+
+        return (
+            <Grid
+                container
+                spacing={3}
+                sm={12}
+                xs={12}
+            >
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <Grid
+                    item
+                    md={6}
+                    xs={12}
+                >
+                    <Card>
+                        <CardContent>
+                            <Grid container justify="space-between">
+                                <Grid item>
+                                    <Typography
+                                        className={classes.title}
+                                        color="inherit"
+                                        gutterBottom
+                                    >
+                                        Denuncia:
+                                    </Typography>
+                                    <Typography
+                                        className={classes.title}
+                                        color="inherit"
+                                        gutterBottom
+                                    >
+                                        {
+
+                                            item.complainable_type === "User" ? `Usuário #${item.complainable_id}` : `Recurso #${item.complainable_id}` 
+                                        }
+                                    </Typography>
+                                </Grid>
+                                <Grid item>
+                                    <Link
+                                        style={{ textDecoration: "none" }}
+                                        to={`/admin/complaints`}
+                                    >
+                                        <Button
+                                            startIcon={<ListRoundedIcon />}
+                                            color="primary"
+                                            variant="outlined"
+                                        >
+                                            Listar
+                                        </Button>
+                                    </Link>
+                                </Grid>
+                            </Grid>
+
+                            {DATA.map((info, index) => (
+                                <div className={classes.displayColumn} key={index}>
+                                    <Typography color="initial" className={classes.subTitle}>
+                                        {info.subTitle}
+                                    </Typography>
+                                    <Typography color="textSecondary">
+                                        {info.prop === null ? "Sem dados" : info.prop}
+                                    </Typography>
+                                </div>
+                            ))}
+                        </CardContent>
+                        {
+                            DisplayButtonsArea(item.complainable_type)
+                        }
+                    </Card>
+                </Grid>
+
+                <Grid
+                    item
+                    md={6}
+                    xs={12}
+                >
+                    <Grid item>
+                        <Card>
+                            <CardContent>
+                                <Typography variant="h5" component="h2">
+                                    Denúncia #{item.id}
+                                </Typography>
+
+                                {ComplaintStatus(item.state, item.complainable_type)}
+
+                                <Grid container className={classes.marginTop}>
+                                    <Grid item>
+                                        <Typography
+                                            color="textSecondary"
+                                            className={classes.subTitle}
+                                            variant="h6"
+                                        >
+                                            Descrição
+                                        </Typography>
+                                        <Typography color="initial">{item.description}</Typography>
+                                    </Grid>
+                                </Grid>
+
+                                <Grid
+                                    container
+                                    direction="row"
+                                    justify="space-between"
+                                    alignItems="center"
+                                    className={classes.marginTop}
+                                >
+                                    <Grid item>
+                                        <Typography
+                                            color="textSecondary"
+                                            className={classes.subTitle}
+                                        >
+                                            Data
+                                        </Typography>
+                                        <Typography color="initial">
+                                            {DisplayDate(item.created_at)}
+                                        </Typography>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <Typography
+                                            color="textSecondary"
+                                            className={classes.subTitle}
+                                        >
+                                            Denunciante
+                                        </Typography>
+                                        <Typography color="initial">{item.user_id}</Typography>
+                                    </Grid>
+                                </Grid>
+
+                                <Divider className={classes.marginTop} />
+
+                                <Grid container className={classes.marginTop}>
+                                    <Grid item>
+                                        <Typography
+                                            color="textSecondary"
+                                            className={classes.subTitle}
+                                            variant="h6"
+                                        >
+                                            Motivo
+                                        </Typography>
+                                        <Typography color="initial">
+                                            {item.complaint_reason.reason}
+                                        </Typography>
+                                    </Grid>
+                                </Grid>
+
+                                <Grid container className={classes.marginTop}>
+                                    <Grid item>
+                                        <Typography
+                                            color="textSecondary"
+                                            className={classes.subTitle}
+                                            variant="h6"
+                                        >
+                                            Status
+                                        </Typography>
+                                        <Typography color="initial">
+                                            {item.complaint_reason.status}
+                                        </Typography>
+                                    </Grid>
+                                </Grid>
+                            </CardContent>
+                        </Card>
+                    </Grid>
+
+                    <Grid item className={classes.marginTop}>
+                        <Card>
+                            <CardContent>
+                                <Typography variant="h5" component="h2">
+                                    Ações
+                                </Typography>
+                                {
+                                    Actions(item.state, item.complainable_type)
+                                }
+                            </CardContent>
+                        </Card>
+                    </Grid>
+                </Grid>
+
+                <Dialog
+                    open={open}
+                    onClose={handleClose}
+                    scroll={scroll}
+                    aria-labelledby="scroll-dialog-title"
+                    aria-describedby="scroll-dialog-description"
+                >
+                    <DialogTitle id="scroll-dialog-title">
+                        {
+                            loadingObject ? <CircularProgress size={24} /> : titleModal
+                        }
+                    </DialogTitle>
+                    <DialogContent dividers={scroll === 'paper'}>
+                        <DialogContentText
+                            id="scroll-dialog-description"
+                            ref={descriptionElementRef}
+                            tabIndex={-1}
+                        >
+                            {
+                                loadingObject ? <CircularProgress size={24} /> : contentModal
+                            }
+                        </DialogContentText>
+                    </DialogContent>
+                    <DialogActions>
+                        <Button onClick={handleClose} color="primary">
+                            Fechar
+                        </Button>
+                    </DialogActions>
+                </Dialog>
+            </Grid>
+        );
+    }
+};
+
+export default CollectionCard;
diff --git a/src/Admin/Components/Components/DataCards/EducationalObjectsCard.js b/src/Admin/Components/Components/DataCards/EducationalObjectsCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f78633dd111ab871b73152746ea09cca842b646
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/EducationalObjectsCard.js
@@ -0,0 +1,317 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import Paper from "@material-ui/core/Paper";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import EditRoundedIcon from '@material-ui/icons/EditRounded';
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import { useStyles } from "../../Styles/DataCard";
+import DeleteRoundedIcon from "@material-ui/icons/DeleteRounded";
+//imports from local files
+import { GetAData, DeleteFilter } from "../../../Filters";
+import { Link, useHistory } from "react-router-dom";
+import { apiUrl, apiDomain } from "../../../../env";
+import { Grid } from "@material-ui/core";
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import SnackBar from '../../../../Components/SnackbarComponent';
+
+const CommunityQuestions = ({ match }) => {
+    const classes = useStyles();
+    let history = useHistory()
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({});//Necessary to consult the API, data
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    async function DeleteHandler() {
+        const id = match.params.id
+        deleteRequest(
+            DeleteFilter("learning_objects", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "O objeto educacional foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    history.goBack()
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+            }
+        );
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("learning_objects", match.params.id),
+            (data, header) => {
+                setItem(data);
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        console.log(item);
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "Nome",
+                prop: item.name,
+            },
+            {
+                subTitle: "Descrição",
+                prop: item.description,
+            },
+            {
+                subTitle: "Dono(a)",
+                prop: item.publisher.name,
+            },
+            {
+                subTitle: "Autor(a)",
+                prop: item.author,
+            },
+            {
+                subTitle: "Score",
+                prop: item.score,
+            },
+            {
+                subTitle: "Status",
+                prop: item.state,
+            },
+            {
+                subTitle: "Criado em",
+                prop: DisplayDate(item.created_at),
+            },
+            {
+                subTitle: "Atualizado em",
+                prop: DisplayDate(item.updated_at),
+            },
+            {
+                subTitle: "Visualizações",
+                prop: item.views_count,
+            },
+            {
+                subTitle: "Likes",
+                prop: item.likes_count,
+            },
+            {
+                subTitle: "Avaliação média",
+                prop: item.review_average,
+            },
+            {
+                subTitle: "Likes",
+                prop: item.likes_count,
+            },
+            {
+                subTitle: "Linguagem",
+                prop: (
+                    <div
+                        style={{
+                            display: "flex",
+                            flexDirection: "row",
+                            flexWrap: "wrap",
+                            justifyContent: "Space-between",
+                        }}
+                    >
+                        {item.language.map((lan, index) => (
+                            <Paper
+                                elevation={3}
+                                key={index}
+                                style={{
+                                    borderRadius: 18,
+                                    padding: "0.8em",
+                                    marginBottom: "1em",
+                                    marginRight: "1em",
+                                    backgroundColor: "#D3D3D3",
+                                    fontSize: 14,
+                                }}
+                            >
+                                {lan.name}
+                            </Paper>
+                        ))}
+                    </div>
+                ),
+            },
+            {
+                subTitle: "Tipo de recurso",
+                prop: item.object_type,
+            },
+        ];
+
+        return (
+            <Card variant="outlined">
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid
+                        container
+                        xs={12}
+                        display="row"
+                        justify="space-between"
+                        alignItems="center"
+                        alignContent="space-between"
+                    >
+                        <Grid item>
+                            <Typography className={classes.title} color="inherit" gutterBottom>
+                                {item.name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <ButtonGroup
+                                color="primary"
+                                aria-label="outlined primary button group"
+                            >
+                                <Link
+                                    style={{ textDecoration: "none" }}
+                                    to={`/admin/learningObjects`}
+                                >
+                                    <Button
+                                        startIcon={<ListRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Listar
+                                </Button>
+                                </Link>
+                                <Button
+                                    startIcon={<VisibilityIcon />}
+                                    color="primary"
+                                    variant="outlined"
+                                >
+                                    <a
+                                        style={{ textDecoration: "none" }}
+                                        target="_blank"
+                                        href={
+                                            apiUrl +
+                                            "/learning_objects/" +
+                                            match.params.id +
+                                            "/download"
+                                        }
+                                    >
+                                        Ver recurso
+                                </a>
+                                </Button>
+                                <Link
+                                    style={{ textDecoration: "none" }}
+                                    to={`/admin/learningObjectEdit/${item.id}`}
+                                >
+                                    <Button
+                                        startIcon={<EditRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Editar
+                                </Button>
+                                </Link>
+                                <Button
+                                    startIcon={<DeleteRoundedIcon />}
+                                    color="secondary"
+                                    variant="outlined"
+                                    onClick={DeleteHandler}
+                                >
+                                    Deletar
+                                </Button>
+                            </ButtonGroup>
+                        </Grid>
+                    </Grid>
+                    {item.thumbnail ? (
+                        <div style={{ marginTop: "1em", marginBottom: "1em" }}>
+                            <a target="_blank" href={apiDomain + item.thumbnail}>
+                                {" "}
+                                <img src={apiDomain + item.thumbnail} alt="" />{" "}
+                            </a>
+                        </div>
+                    ) : null}
+
+                    {DATA.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.subTitle}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.prop === null ? "Sem dados" : info.prop}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Card>
+        );
+    }
+};
+
+export default CommunityQuestions;
diff --git a/src/Admin/Components/Components/DataCards/InstitutionsCard.js b/src/Admin/Components/Components/DataCards/InstitutionsCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..520bd316e9445f732b48bf77e769474ed8366190
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/InstitutionsCard.js
@@ -0,0 +1,221 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from "react";
+import moment from 'moment'
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import { useStyles } from "../../Styles/DataCard";
+import Grid from '@material-ui/core/Grid';
+// Icons
+import EditRoundedIcon from "@material-ui/icons/EditRounded";
+import DeleteRoundedIcon from "@material-ui/icons/DeleteRounded";
+//imports from local files
+import { GetAData, DeleteFilter } from "../../../Filters";
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig';
+import { Link, useHistory } from 'react-router-dom';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import SnackBar from '../../../../Components/SnackbarComponent';
+
+const InstitutionCard = ({ match }) => {
+    const classes = useStyles();
+    let history = useHistory()
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+
+    const [item, setItem] = useState({}); //Necessary to consult the API, data
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    async function DeleteHandler() {
+        const id = match.params.id
+        deleteRequest(
+            DeleteFilter("institutions", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A instituição foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    history.goBack()
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+            }
+        );
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData('institutions', match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setItem(data);
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(error);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "Nome",
+                prop: item.name,
+            },
+            {
+                subTitle: "Descrição",
+                prop: item.description,
+            },
+            {
+                subTitle: "Endereço",
+                prop: item.address,
+            },
+            {
+                subTitle: "Cidade",
+                prop: item.city,
+            },
+            {
+                subTitle: "País",
+                prop: item.country,
+            },
+            {
+                subTitle: "Criação",
+                prop: DisplayDate(item.created_at),
+            },
+            {
+                subTitle: "Atualizado",
+                prop: DisplayDate(item.updated_at),
+            },
+        ];
+
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container xs={12} justify="space-between" alignItems="center" alignContent="center">
+                        <Grid item>
+                            <Typography className={classes.title} color="inherit" gutterBottom>
+                                {item.name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <ButtonGroup
+                                color="primary"
+                                aria-label="outlined primary button group"
+                            >
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/intitutions`}>
+                                    <Button
+                                        startIcon={<ListRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Listar
+                                    </Button>
+                                </Link>
+
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/institutionEdit/${item.id}`}>
+                                    <Button
+                                        startIcon={<EditRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Editar
+                                    </Button>
+                                </Link>
+
+                                <Button
+                                    startIcon={<DeleteRoundedIcon />}
+                                    color="secondary"
+                                    variant="outlined"
+                                    onClick={DeleteHandler}
+                                >
+                                    Deletar
+                                </Button>
+                            </ButtonGroup>
+                        </Grid>
+                    </Grid>
+                    {DATA.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.subTitle}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.prop === null ? "Sem dados" : info.prop}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Card>
+        );
+    }
+};
+
+export default InstitutionCard;
diff --git a/src/Admin/Components/Components/DataCards/NoteVarCard.js b/src/Admin/Components/Components/DataCards/NoteVarCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..7afaac4aa867072eddb49a8e766fde158dc2d1a4
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/NoteVarCard.js
@@ -0,0 +1,152 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import Grid from "@material-ui/core/Grid";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import { useStyles } from "../../Styles/DataCard";
+// Icons
+import EditRoundedIcon from "@material-ui/icons/EditRounded";
+//imports from local files
+import { GetAData } from "../../../Filters";
+import { getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { Link } from 'react-router-dom';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+
+const NoteCard = ({ match }) => {
+    console.log(match);
+    const classes = useStyles();
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({}); //Necessary to consult the API, data
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+
+    useEffect(() => {
+        getRequest(
+            GetAData('scores', match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setItem(data);
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..."/>
+    } else {
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "Nome",
+                prop: item.name,
+            },
+            {
+                subTitle: "Código",
+                prop: item.code,
+            },
+            {
+                subTitle: "Peso",
+                prop: item.weight,
+            },
+            {
+                subTitle: "Criação",
+                prop: DisplayDate(item.created_at),
+            },
+            {
+                subTitle: "Atualizado",
+                prop: DisplayDate(item.updated_at),
+            },
+        ]
+
+        return (
+            <Card>
+                <CardContent>
+                    <Grid container xs={12} justify="space-between" alignContent="center" alignItems="center">
+                        <Grid item>
+                            <Typography className={classes.title} color="inherit" gutterBottom>
+                                {item.name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <ButtonGroup
+                                color="primary"
+                                aria-label="outlined primary button group"
+                            >
+                                <Link style={{textDecoration: 'none'}} to={`/admin/noteVars`}>
+                                    <Button
+                                        startIcon={<ListRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Listar
+                                    </Button>
+                                </Link>
+
+                                <Link style={{textDecoration: 'none'}} to={`/admin/noteVarEdit/${item.id}`}>
+                                    <Button
+                                        startIcon={<EditRoundedIcon/>}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Editar
+                                    </Button>
+                                </Link>
+                            </ButtonGroup>
+                        </Grid>
+                    </Grid>
+                    {DATA.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.subTitle}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.prop === null ? "Sem dados" : info.prop}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Card>
+        );
+    }
+};
+
+export default NoteCard;
diff --git a/src/Admin/Components/Components/DataCards/RatingCard.js b/src/Admin/Components/Components/DataCards/RatingCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..82585c189a8f5d15d53729b7d33bd87996ccacd4
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/RatingCard.js
@@ -0,0 +1,210 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import Grid from "@material-ui/core/Grid";
+import { useStyles } from "../../Styles/DataCard";
+// Icons
+import EditRoundedIcon from "@material-ui/icons/EditRounded";
+import DeleteRoundedIcon from "@material-ui/icons/DeleteRounded";
+//imports from local files
+import { GetAData, DeleteFilter } from "../../../Filters";
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig';
+import { Link, useHistory } from 'react-router-dom';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import SnackBar from '../../../../Components/SnackbarComponent';
+
+const RatingCard = ({ match }) => {
+    const classes = useStyles();
+    let history = useHistory()
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({}); //Necessary to consult the API, data
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    async function DeleteHandler() {
+        const id = match.params.id
+        deleteRequest(
+            DeleteFilter("ratings", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "O rating foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    history.goBack()
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+            }
+        );
+    }
+
+
+    useEffect(() => {
+        getRequest(
+            GetAData('ratings', match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setItem(data);
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        const DATA = [
+            {
+                subTitle: "ID",
+                prop: item.id,
+            },
+            {
+                subTitle: "Nome",
+                prop: item.name,
+            },
+            {
+                subTitle: "Descrição",
+                prop: item.description,
+            },
+            {
+                subTitle: "Criado em",
+                prop: DisplayDate(item.created_at),
+            },
+            {
+                subTitle: "Atualizado em",
+                prop: DisplayDate(item.updated_at),
+            },
+        ];
+
+        return (
+            <Card variant="outlined">
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container xs={12} justify="space-between" alignItems="center" alignContent="center">
+                        <Grid item>
+                            <Typography className={classes.title} color="inherit" gutterBottom>
+                                {item.name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <ButtonGroup
+                                color="primary"
+                                aria-label="outlined primary button group"
+                            >
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/Ratings`}>
+                                    <Button
+                                        startIcon={<ListRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Listar
+                                    </Button>
+                                </Link>
+
+                                <Link style={{ textDecoration: 'none' }} to={`/admin/EditRating/${item.id}`}>
+                                    <Button
+                                        startIcon={<EditRoundedIcon />}
+                                        color="primary"
+                                        variant="outlined"
+                                    >
+                                        Editar
+                                    </Button>
+                                </Link>
+
+                                <Button
+                                    startIcon={<DeleteRoundedIcon />}
+                                    color="secondary"
+                                    variant="outlined"
+                                    onClick={DeleteHandler}
+                                >
+                                    Deletar
+                                </Button>
+                            </ButtonGroup>
+                        </Grid>
+                    </Grid>
+                    {DATA.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.subTitle}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.prop === null ? "Sem dados" : info.prop}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Card>
+        );
+    }
+};
+
+export default RatingCard;
diff --git a/src/Admin/Components/Components/DataCards/UserCard.js b/src/Admin/Components/Components/DataCards/UserCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4e82906c3470fdaac4fbbbfd0308d5bd7baf0e3
--- /dev/null
+++ b/src/Admin/Components/Components/DataCards/UserCard.js
@@ -0,0 +1,669 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Maerial ui components
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import Button from "@material-ui/core/Button";
+import Paper from "@material-ui/core/Paper";
+import Grid from "@material-ui/core/Grid";
+import RemoveCircleOutlineRoundedIcon from '@material-ui/icons/RemoveCircleOutlineRounded';
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import Chip from '@material-ui/core/Chip';
+import { useStyles } from "../../Styles/DataCard";
+import EmailRoundedIcon from '@material-ui/icons/EmailRounded';
+import EditRoundedIcon from '@material-ui/icons/EditRounded';
+import DeleteRoundedIcon from '@material-ui/icons/DeleteRounded';
+import CheckRoundedIcon from "@material-ui/icons/CheckRounded";
+import CloseRoundedIcon from "@material-ui/icons/CloseRounded";
+//imports from local files
+import { GetAData } from "../../../Filters";
+import { apiDomain } from '../../../../env';
+import noAvatar from "../../../../img/default_profile.png";
+import { Link, useHistory } from "react-router-dom";
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { getRequest, postRequest, deleteRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//styles
+import styled from 'styled-components';
+
+const CollectionCard = ({ match }, props) => {
+    let history = useHistory()
+    const classes = useStyles();
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [item, setItem] = useState({});
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const stateTeacherRequest = (status) => {
+        switch (status) {
+            case "accepted":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#228B22",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        ACEITO
+                    </Paper>
+                );
+            case "requested":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FF8C00",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        PENDENTE
+                    </Paper>
+                );
+            case "rejected":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FA8072",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        Rejeitado
+                    </Paper>
+                );
+            default:
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#797D7F ",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        Não requisitado solicitação de professor
+                    </Paper>
+                )
+        }
+    };
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData).format("LLL").toString();
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const reloadData = () => {
+        setIsLoaded(false)
+        getRequest(
+            GetAData("users", match.params.id),
+            (data, header) => {
+                setItem(data)
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }
+
+    const handleAprove = (userId, userName) => {
+        const url = `/users/${userId}/add_teacher`
+        const body = {
+            "approves": true
+        }
+        postRequest(
+            url,
+            body,
+            (data) => {
+                if(data.errors)
+                    HandleSnack("Erro!", true, "warning", "#FA8072");
+                else
+                {
+                    HandleSnack(`${userName} aceito como professor!`, true, "success", "#228B22");
+                    reloadData()
+                }   
+            },
+            (error) => {
+                HandleSnack("Erro!", true, "warning", "#FA8072");
+            }
+        )
+    }
+
+    const handleReject = (userId, userName) => {
+        const url = `/users/${userId}/add_teacher`
+        const body = {
+            "approves": false
+        }
+        postRequest(
+            url,
+            body,
+            (data) => {
+                if(data.errors)
+                    HandleSnack("Erro!", true, "warning", "#FA8072");
+                else
+                    {
+                        HandleSnack(`${userName} rejeitado como professor!`, true, "success", "#228B22");
+                        reloadData()
+                    }
+            },
+            (error) => {
+                HandleSnack("Erro!", true, "warning", "#FA8072");
+            }
+        )
+    }
+
+    const deleteUser = (userId) => {
+        deleteRequest(
+            `/users/${userId}`,
+            (data) => {
+                if(data.errors)
+                    HandleSnack("Erro!", true, "warning", "#FA8072")
+                else
+                {
+                    HandleSnack(`${item.name} deletado com sucesso!`, true, "success", "#228B22");
+                    history.goBack()
+                }
+            },
+            (error) => {
+                HandleSnack("Erro!", true, "warning", "#FA8072")
+            }
+        )
+    }
+
+    const isBlocked = (state) => {
+        if (state === "blocked" || state === "banished")
+            return <Paper
+                style={{
+                    textAlign: "center",
+                    padding: "0.5em",
+                    backgroundColor: "red",
+                    fontWeight: "500",
+                    color: "#FFFAFA",
+                }}
+            >
+                Bloqueado
+            </Paper>
+    }
+
+    const actionsForBlockedUser = (state) => {
+        if (state === "blocked" || state === "banished") {
+            return (
+                <Button
+                    style={{ width: "100%", marginBottom: "0.5em" }}
+                    variant="contained"
+                    color="secondary"
+                    startIcon={<RemoveCircleOutlineRoundedIcon />}
+                    onClick={() => ReactiveUser()}
+                >
+                    Desbloquear
+                </Button>
+            )
+        }
+        return  <Typography color="textSecondary">
+                    Usuário não bloqueado
+                </Typography>
+    }
+
+    const actionsForStateTeacherRequest = (state) => {
+        if (state === "requested") {
+            return (
+                <Grid container direction="row" spacing={1}>
+                    <Grid item>
+                        <Button
+                            variant="contained"
+                            color="secondary"
+                            style={{ width: "100%" }}
+                            disabled={
+                                item.submitter_request === "requested" ? false : true
+                            }
+                            startIcon={
+                                <CloseRoundedIcon style={{ fill: "#FFFAFA" }} />
+                            }
+                            onClick={() => { handleReject(item.id, item.name) }}
+                        >
+                            Recusar
+                        </Button>
+                    </Grid>
+                    <Grid item>
+                        <Button
+                            variant="contained"
+                            color="primary"
+                            style={{ width: "100%" }}
+                            disabled={
+                                item.submitter_request === "requested" ? false : true
+                            }
+                            startIcon={
+                                <CheckRoundedIcon style={{ fill: "#FFFAFA" }} />
+                            }
+                            onClick={() => { handleAprove(item.id, item.name) }}
+                        >
+                            Aceitar
+                        </Button>
+                    </Grid>
+                </Grid>
+            )
+        }
+        return <Typography color="textSecondary">
+            Usuário não requisitou conta de professor
+                </Typography>
+    }
+
+    const ReactiveUser = () => {
+        putRequest(
+            `/users/${match.params.id}/reactivate_user`,
+            {},
+            (data) => {
+                if(data.errors)
+                    HandleSnack('Erro ao tentar reativar usuário!', true, 'warning', '#FA8072')
+                else
+                {
+                    HandleSnack('Usuário foi reativado com sucesso!', true, 'success', '#228B22')
+                    reloadData()
+                }     
+            },
+            (error) => {
+                HandleSnack('Erro ao tentar reativar usuário!', true, 'warning', '#FA8072')
+            }
+        )
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("users", match.params.id),
+            (data, header) => {
+                setItem(data)
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        return (
+            <Grid
+                container
+                spacing={3}
+            >
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <Grid
+                    item
+                    md={6}
+                    xs={12}
+                >
+                    <Card>
+                        <CardContent>
+                            <Grid container justify="space-between">
+                                <Grid item xs={12}>
+                                    <Typography
+                                        className={classes.title}
+                                        color="inherit"
+                                        gutterBottom
+                                    >
+                                        Identificação do usuário
+                                    </Typography>
+                                </Grid>
+                                <Grid container xs={12}>
+                                    <Grid item>
+                                        <Link
+                                            style={{ textDecoration: "none" }}
+                                            to={`/admin/usersList`}
+                                        >
+                                            <Button
+                                                startIcon={<ListRoundedIcon />}
+                                                color="primary"
+                                                variant="outlined"
+                                            >
+                                                Listar
+                                        </Button>
+                                        </Link>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            startIcon={<DeleteRoundedIcon />}
+                                            color="secondary"
+                                            variant="outlined"
+                                            onClick={() => { deleteUser(item.id) }}
+                                        >
+                                            Deletar
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Link to={`/admin/EditUser/${item.id}`} style={{ textDecoration: "none" }}>
+                                            <Button
+                                                startIcon={<EditRoundedIcon />}
+                                                color="primary"
+                                                variant="outlined"
+                                            >
+                                                Editar
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                            <SizedBox />
+                            <Grid container direction="row" justify="flex-start" alignItems="center" spacing={3}>
+                                <Grid item justify="center" alignItems="center">
+                                    <AvatarDiv>
+                                        <img src={item.avatar ? apiDomain + item.avatar : noAvatar} alt='user avatar'
+                                            style={{ height: "100%", width: "100%", borderRadius: "50%" }} />
+                                    </AvatarDiv>
+                                </Grid>
+                                <Grid item>
+                                    <div className={classes.displayColumn}>
+                                        <Typography color="initial" className={classes.subTitle}>
+                                            Nome
+                                        </Typography>
+                                        <Typography color="textSecondary">
+                                            {item.name === null ? "Sem dados" : item.name}
+                                        </Typography>
+                                    </div>
+                                    <div className={classes.displayColumn}>
+                                        <Typography color="initial" className={classes.subTitle}>
+                                            Email
+                                        </Typography>
+                                        {
+                                            item.email ?
+                                                <Link to={`/admin/sendEmail/${item.email}`} style={{ textDecoration: 'none' }}>
+                                                    <Button
+                                                        variant='text'
+                                                        color='primary'
+                                                        startIcon={<EmailRoundedIcon />}
+                                                    >
+                                                        {item.email}
+                                                    </Button>
+                                                </Link> : null
+                                        }
+                                    </div>
+                                    <div className={classes.displayColumn}>
+                                        <Typography color="initial" className={classes.subTitle}>
+                                            Cpf
+                                        </Typography>
+                                        <Typography color="textSecondary">
+                                            {item.cpf === null ? "Sem dados" : item.cpf}
+                                        </Typography>
+                                    </div>
+                                </Grid>
+                            </Grid>
+                            <Grid>
+                                <div className={classes.displayColumn}>
+                                    <Typography color="initial" className={classes.subTitle}>
+                                        Escola
+                                    </Typography>
+                                    <Typography color="textSecondary">
+                                        {item.school ? item.school.name : "Sem dados"}
+                                    </Typography>
+                                </div>
+                                <div className={classes.displayColumn}>
+                                    <Typography color="initial" className={classes.subTitle}>
+                                        Telefone da escola
+                                    </Typography>
+                                    <Typography color="textSecondary">
+                                        {item.school ? item.school.phone : "Sem dados"}
+                                    </Typography>
+                                </div>
+                                <div className={classes.displayColumn}>
+                                    <Typography color="initial" className={classes.subTitle}>
+                                        UF
+                                    </Typography>
+                                    <Typography color="textSecondary">
+                                        {item.school ? item.school.uf : "Sem dados"}
+                                    </Typography>
+                                </div>
+                                <div className={classes.displayColumn}>
+                                    <Typography color="initial" className={classes.subTitle}>
+                                        Munícipo
+                                    </Typography>
+                                    <Typography color="textSecondary">
+                                        {item.school ? item.school.city : "Sem dados"}
+                                    </Typography>
+                                </div>
+                            </Grid>
+                        </CardContent>
+                    </Card>
+                </Grid>
+
+                <Grid
+                    item
+                    md={6}
+                    xs={12}
+                >
+                    <Grid item>
+                        <Card>
+                            <CardContent>
+                                <Typography variant="h5" component="h2">
+                                    Informações do perfil
+                                </Typography>
+
+                                {stateTeacherRequest(item.submitter_request)}
+                                <SizedBox />
+                                {isBlocked(item.state)}
+
+                                <SizedBox />
+
+                                <Grid container justify="flex-start">
+                                    <Grid item>
+                                        <div className={classes.displayColumn}>
+                                            <Typography color="initial" className={classes.subTitle}>
+                                                Descrição
+                                            </Typography>
+                                            <Typography color="textSecondary">
+                                                {item.description}
+                                            </Typography>
+                                        </div>
+                                    </Grid>
+
+                                    <Grid container direction="row" justify="space-between" spacing={1} alignItems="center">
+                                        <Grid item>
+                                            <div className={classes.displayColumn}>
+                                                <Typography color="initial" className={classes.subTitle}>
+                                                    Criado em
+                                                </Typography>
+                                                <Typography color="textSecondary">
+                                                    {DisplayDate(item.created_at)}
+                                                </Typography>
+                                            </div>
+                                        </Grid>
+
+                                        <Grid item>
+                                            <div className={classes.displayColumn}>
+                                                <Typography color="initial" className={classes.subTitle}>
+                                                    Atualizado em
+                                                </Typography>
+                                                <Typography color="textSecondary">
+                                                    {DisplayDate(item.updated_at)}
+                                                </Typography>
+                                            </div>
+                                        </Grid>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <div className={classes.displayColumn}>
+                                            <Typography color="initial" className={classes.subTitle}>
+                                                Permissões
+                                            </Typography>
+                                            <Grid container direction="row">
+                                                {
+                                                    item.roles.map((tag, index) => {
+                                                        return (
+                                                            <ChipDiv key={index}>
+                                                                <Chip label={tag.name} />
+                                                            </ChipDiv>
+                                                        )
+                                                    })
+                                                }
+                                            </Grid>
+                                        </div>
+                                    </Grid>
+
+                                    <Grid container direction="row" spacing={1} justify="space-between" alignItems="center">
+                                        <Grid item>
+                                            <div className={classes.displayColumn}>
+                                                <Typography color="initial" className={classes.subTitle}>
+                                                    Nota
+                                                </Typography>
+                                                <Typography color="textSecondary">
+                                                    {item.score}
+                                                </Typography>
+                                            </div>
+                                        </Grid>
+
+                                        <Grid item>
+                                            <div className={classes.displayColumn}>
+                                                <Typography color="initial" className={classes.subTitle}>
+                                                    Seguidores
+                                                </Typography>
+                                                <Typography color="textSecondary">
+                                                    {item.follows_count}
+                                                </Typography>
+                                            </div>
+                                        </Grid>
+
+                                        <Grid item>
+                                            <div className={classes.displayColumn}>
+                                                <Typography color="initial" className={classes.subTitle}>
+                                                    Likes
+                                                </Typography>
+                                                <Typography color="textSecondary">
+                                                    {item.likes_count}
+                                                </Typography>
+                                            </div>
+                                        </Grid>
+
+                                        <Grid item>
+                                            <div className={classes.displayColumn}>
+                                                <Typography color="initial" className={classes.subTitle}>
+                                                    Objetos educacionais
+                                                </Typography>
+                                                <Typography color="textSecondary">
+                                                    {item.learning_objects_count}
+                                                </Typography>
+                                            </div>
+                                        </Grid>
+
+                                        <Grid item>
+                                            <div className={classes.displayColumn}>
+                                                <Typography color="initial" className={classes.subTitle}>
+                                                    Coleções
+                                                </Typography>
+                                                <Typography color="textSecondary">
+                                                    {item.collections_count}
+                                                </Typography>
+                                            </div>
+                                        </Grid>
+                                    </Grid>
+                                    <StyledDivider>
+                                    </StyledDivider>
+                                    <Grid container direction="column">
+                                        <Grid item>
+                                            <Typography variant="h5" component="h2">
+                                                Ações para solicitação de professor
+                                            </Typography>
+                                        </Grid>
+                                        <SizedBox />
+                                        {actionsForStateTeacherRequest(item.submitter_request)}
+                                    </Grid>
+                                    <StyledDivider>
+                                    </StyledDivider>
+                                    <Grid container direction="column">
+                                        <Grid item>
+                                            <Typography variant="h5" component="h2">
+                                                Ações para usuário bloqueado
+                                            </Typography>
+                                        </Grid>
+                                        <SizedBox />
+                                        {actionsForBlockedUser(item.state)}
+                                    </Grid>
+                                </Grid>
+                            </CardContent>
+                        </Card>
+                    </Grid>
+                </Grid>
+            </Grid>
+        );
+    }
+};
+
+export default CollectionCard;
+
+const AvatarDiv = styled.div`
+    border-radius : 100%;
+    height : 126px;
+    width : 126px;
+    border : 2px solid #d4d4d4;
+`
+const ChipDiv = styled.div`
+    margin-right : 0.5em;
+    margin-bottom : 0.5em;
+`
+const SizedBox = styled.div`
+    height : 1em;
+`
+const StyledDivider = styled.div`
+    width : 100%; 
+    border-radius : 100%;
+    margin-top : 0.6em;
+    margin-bottom : 0.6em;
+    border : 0.5px solid #d4d4d4;
+`
\ No newline at end of file
diff --git a/src/Admin/Components/Components/DisplayIcon.js b/src/Admin/Components/Components/DisplayIcon.js
new file mode 100644
index 0000000000000000000000000000000000000000..0bb9bf56e0a44cfdd256b9172bb14079d8ff8664
--- /dev/null
+++ b/src/Admin/Components/Components/DisplayIcon.js
@@ -0,0 +1,77 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React from "react";
+import ListItemIcon from "@material-ui/core/ListItemIcon";
+import HomeIcon from "@material-ui/icons/Home";
+import PeopleRoundedIcon from "@material-ui/icons/PeopleRounded";
+import ContactSupportRoundedIcon from "@material-ui/icons/ContactSupportRounded";
+import LanguageRoundedIcon from "@material-ui/icons/LanguageRounded";
+import AccountBalanceRoundedIcon from "@material-ui/icons/AccountBalanceRounded";
+import MenuBookRoundedIcon from "@material-ui/icons/MenuBookRounded";
+import StarRoundedIcon from "@material-ui/icons/StarRounded";
+import AccountCircleRoundedIcon from "@material-ui/icons/AccountCircleRounded";
+import TrendingUpRoundedIcon from "@material-ui/icons/TrendingUpRounded";
+import HelpRoundedIcon from "@material-ui/icons/HelpRounded";
+import CheckRoundedIcon from "@material-ui/icons/CheckRounded";
+import PersonRoundedIcon from "@material-ui/icons/PersonRounded";
+import BlockRoundedIcon from "@material-ui/icons/BlockRounded";
+import AnnouncementRoundedIcon from "@material-ui/icons/AnnouncementRounded";
+import EmailRoundedIcon from "@material-ui/icons/EmailRounded";
+import TimelineRoundedIcon from "@material-ui/icons/TimelineRounded";
+import SettingsRoundedIcon from "@material-ui/icons/SettingsRounded";
+import ExitToAppRoundedIcon from "@material-ui/icons/ExitToAppRounded";
+import AllOutIcon from "@material-ui/icons/AllOut";
+
+//This file manipulate the icon that will be displayed in the left navigation menu
+
+const orange = "#ff7f00";
+const pink = "#e81f4f";
+const purple = "#673ab7";
+const blue = "#00bcd4";
+
+const icons = [
+    <HomeIcon style={{ fill: orange }} />,
+    <PeopleRoundedIcon style={{ fill: pink }} />,
+    <AllOutIcon style={{ fill: purple }} />,
+    <ContactSupportRoundedIcon style={{ fill: blue }} />,
+    <AccountBalanceRoundedIcon style={{ fill: orange }} />,
+    <LanguageRoundedIcon style={{ fill: pink }} />,
+    <MenuBookRoundedIcon style={{ fill: purple }} />,
+    <StarRoundedIcon style={{ fill: blue }} />,
+    <AccountCircleRoundedIcon style={{ fill: orange }} />,
+    <TrendingUpRoundedIcon style={{ fill: pink }} />,
+    <HelpRoundedIcon style={{ fill: purple }} />,
+    <CheckRoundedIcon style={{ fill: blue }} />,
+    <PersonRoundedIcon style={{ fill: orange }} />,
+    <BlockRoundedIcon style={{ fill: pink }} />,
+    <AnnouncementRoundedIcon style={{ fill: purple }} />,
+    <EmailRoundedIcon style={{ fill: blue }} />,
+    <TimelineRoundedIcon style={{ fill: orange }} />,
+    <SettingsRoundedIcon style={{ fill: pink }} />,
+    <ExitToAppRoundedIcon style={{ fill: purple }} />,
+];
+
+const DisplayIcon = (props) => {
+    return(
+        <ListItemIcon>
+            {icons[props.i]}
+        </ListItemIcon>
+    );
+};
+export default DisplayIcon;
diff --git a/src/Admin/Components/Components/Inputs/CreateInstitution.js b/src/Admin/Components/Components/Inputs/CreateInstitution.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b527cbaee24c249fa3c5f2b8a0420993df1b9ac
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/CreateInstitution.js
@@ -0,0 +1,276 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useContext } from 'react';
+//imports material ui componets
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import { postRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import Unauthorized from '../Unauthorized';
+//router
+import { Link } from 'react-router-dom';
+
+const CreateInstitution = (props) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [name, setName] = useState('Nova Instituição');
+    const [description, setDescription] = useState('');
+    const [adress, setAdress] = useState('');
+    const [city, setCity] = useState('');
+    const [country, setCountry] = useState('');
+
+    const [isLoading, setIsLoading] = useState(false)
+
+    // Handle error in name
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: '',
+    })
+
+    // Handle error in Country 
+    const [errorInCountry, setErrorInCountry] = useState({
+        error: false,
+        message: '',
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        setName(e.target.value)
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+    }
+    const DescriptionHandler = (e) => {
+        setDescription(e.target.value)
+    }
+    const AdressHandler = (e) => {
+        setAdress(e.target.value)
+    }
+    const CityHandler = (e) => {
+        setCity(e.target.value)
+    }
+    const CountryHandler = (e) => {
+        if (errorInCountry.error) {
+            setErrorInCountry({
+                error: false,
+                message: ''
+            })
+        }
+        setCountry(e.target.value)
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+
+    //Handle submit 
+    async function onSubmit() {
+        setIsLoading(true)
+        const api = '/institutions'
+        const body = {
+            "institution": {
+                'name': name,
+                'description': description,
+                'address': adress,
+                'city': city,
+                'country': country,
+            }
+        }
+        postRequest(
+            api,
+            body,
+            (data) => {
+                if (data.id)
+                    HandleSnack('A instituição foi criada com sucesso', true, 'success', '#228B22')
+                else {
+                    if (data.name) {
+                        let nameError = "";
+                        data.name.map((msg) => (
+                            nameError = nameError + msg + " e "
+                        ))
+                        setErrorInName({
+                            error: true,
+                            message: nameError
+                        })
+                    }
+                }
+                setIsLoading(false)
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'Nome',
+            value: name,
+            required: true,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event)
+        },
+        {
+            label: 'Descrição',
+            value: description,
+            required: false,
+
+            onChange: (event) => DescriptionHandler(event)
+        },
+        {
+            label: 'Endereço',
+            value: adress,
+            required: false,
+
+            onChange: (event) => AdressHandler(event)
+        },
+        {
+            label: 'Cidade',
+            value: city,
+            required: false,
+            onChange: (event) => CityHandler(event)
+        },
+        {
+            label: 'País',
+            value: country,
+            required: false,
+            error: errorInCountry.error,
+            errorMessage: errorInCountry.message,
+            onChange: (event) => CountryHandler(event)
+        }
+    ]
+
+    if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignContent="center" alignItems="center" xs={12}>
+                        <Grid item>
+                            <Typography variant='h4'>
+                                {name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link style={{ textDecoration: 'none' }} to={'/admin/intitutions'}>
+                                <Button
+                                    onClick={props.BackToList}
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <AddRoundedIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Adicionar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        );
+    } else return <Unauthorized />
+}
+
+export default CreateInstitution;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/CreateLanguage.js b/src/Admin/Components/Components/Inputs/CreateLanguage.js
new file mode 100644
index 0000000000000000000000000000000000000000..89176dfb9d49e98f799c9dfe988ffa57b2315a51
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/CreateLanguage.js
@@ -0,0 +1,256 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useContext } from 'react';
+//imports material ui componets
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import { postRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//router
+import { Link } from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const CreateLanguage = (props) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [name, setName] = useState('Nova linguagem');
+    const [code, setCode] = useState('');
+
+    const [isLoading, setIsLoading] = useState(false)
+
+    // Handle error in name
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: '',
+    })
+
+    // Handle error in Country 
+    const [errorInCode, setErrorInCode] = useState({
+        error: false,
+        message: '',
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        setName(e.target.value)
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+    }
+
+    const CodeHandler = (e) => {
+        if (errorInCode.error) {
+            setErrorInCode({
+                error: false,
+                message: ''
+            })
+        }
+        setCode(e.target.value)
+    }
+
+    // verify if the given text is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    //Handle submit 
+    async function onSubmit() {
+        setIsLoading(true)
+        const api = '/languages'
+        const body = {
+            "language": {
+                'name': name,
+                'code': code,
+            }
+        }
+        postRequest(
+            api,
+            body,
+            (data) => {
+                if (data.id)
+                    HandleSnack('A linguagem foi criada com sucesso', true, 'success', '#228B22')
+                else {
+                    if (data.name) {
+                        let nameError = "";
+                        data.name.map((msg) => (
+                            nameError = nameError + msg + " e "
+                        ))
+                        setErrorInName({
+                            error: true,
+                            message: nameError
+                        })
+                    }
+                    if (data.code) {
+                        let codeError = "";
+                        data.code.map((msg) => (
+                            codeError = codeError + msg + " e "
+                        ))
+                        setErrorInCode({
+                            error: true,
+                            message: codeError
+                        })
+                    }
+                }
+                setIsLoading(false)
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'Nome',
+            value: name,
+            required: true,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event)
+        },
+        {
+            label: 'Código',
+            value: code,
+            required: true,
+            error: errorInCode.error,
+            errorMessage: errorInCode.message,
+            onChange: (event) => CodeHandler(event)
+        }
+    ]
+
+    if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignItems="center" alignContent="center" xs={12}>
+                        <Grid item>
+                            <Typography variant='h4'>
+                                {name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link to={'/admin/languages'} style={{ textDecoration: 'none' }}>
+                                <Button
+                                    onClick={props.BackToList}
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                            </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <AddRoundedIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Adicionar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        )
+    } else return <Unauthorized />
+}
+
+export default CreateLanguage;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/CreateQuestion.js b/src/Admin/Components/Components/Inputs/CreateQuestion.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f532891768d45bb4279d692c34757f8bbbec391
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/CreateQuestion.js
@@ -0,0 +1,273 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useContext } from 'react';
+//imports material ui componets
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import MenuItem from "@material-ui/core/MenuItem";
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+//imports local files
+import { Store } from '../../../../Store';
+import { postRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import Unauthorized from '../Unauthorized';
+import SnackBar from '../../../../Components/SnackbarComponent';
+//router
+import { Link } from 'react-router-dom';
+
+const CreateQuestion = (props) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [status, setStatus] = useState('');
+    const [description, setDescription] = useState('');
+
+    const [isLoading, setIsLoading] = useState(false)
+
+    // Handle error in name
+    const [errorInStatus, setErrorInStatus] = useState({
+        error: false,
+        message: '',
+    })
+
+    // Handle error in Country 
+    const [errorInDescription, setErrorInDescription] = useState({
+        error: false,
+        message: '',
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const DescriptionHandler = (e) => {
+        if (errorInDescription.error) {
+            setErrorInDescription({
+                error: false,
+                message: ''
+            })
+        }
+        setDescription(e.target.value)
+    }
+
+    // verify if the given text is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+
+    //Handle submit 
+    async function onSubmit() {
+        if (!isEmpty(description)) {
+            setIsLoading(true)
+            const api = '/questions'
+            const body = {
+                "question": {
+                    'status': status,
+                    'description': description,
+                }
+            }
+            postRequest(
+                api,
+                body,
+                (data) => {
+                    if(data.errors)
+                        HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                    else
+                        HandleSnack('A pergunta foi criada com sucesso', true, 'success', '#228B22')
+                    setIsLoading(false)
+                },
+                (error) => {
+                    HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                    setIsLoading(false)
+                }
+            )
+        }
+        else
+        {
+            setErrorInDescription(
+                {
+                    error : true, 
+                    message : "Você precisa preencher este campo!"
+                }
+            )
+        }
+    }
+
+    //handle change of staus
+
+    const handleChange = (e) => {
+        const value = e.target.value;
+        setStatus(value);
+        console.log(status)
+    };
+
+    // Fields
+    const fields = [
+        {
+            label: 'Descrição',
+            value: description,
+            required: true,
+            error: errorInDescription.error,
+            errorMessage: errorInDescription.message,
+            onChange: (event) => DescriptionHandler(event)
+        }
+    ]
+
+    const STATUS_OPTIONS = [
+        {
+            value: "active",
+            label: "Ativo",
+        },
+        {
+            value: "inactive",
+            label: "Inativo",
+        },
+    ];
+
+    if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignContent="center" alignItems="center" xs={12}>
+                        <Grid item>
+                            <Typography variant='h4'>
+                                Nova question
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link to={'/admin/Questions'} style={{ textDecoration: 'none' }}>
+                                <Button
+                                    onClick={props.BackToList}
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        <>
+                            <TextField
+                                select
+                                label="Status"
+                                value={status ? status : ""}
+                                error={errorInStatus.error}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                helperText={errorInStatus.error ? errorInStatus.errorMessage : ''}
+                                onChange={handleChange}
+                            >
+                                {STATUS_OPTIONS.map((option, index) => (
+                                    <MenuItem
+                                        key={option.value}
+                                        value={option.value}
+                                        style={option.value === status ? { color: 'blue' } : { color: 'black' }}
+                                    >
+                                        {
+                                            option.label
+                                        }
+                                    </MenuItem>
+                                ))}
+                            </TextField>
+                            {fields.map((field, index) => (
+                                <TextField
+                                    key={index}
+                                    required={field.required}
+                                    error={field.error}
+                                    helperText={field.error ? field.errorMessage : ''}
+                                    style={{ width: '250px', marginBottom: '1em' }}
+                                    label={field.label}
+                                    value={field.value}
+                                    onChange={field.onChange}
+                                    type="search"
+                                    multiline={true}
+                                />
+                            ))}
+                        </>
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <AddRoundedIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Adicionar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        );
+    } else return <Unauthorized />
+}
+
+export default CreateQuestion;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/CreateRating.js b/src/Admin/Components/Components/Inputs/CreateRating.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef12cd2766b68187906f94c61f284e3af10c1766
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/CreateRating.js
@@ -0,0 +1,254 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useContext } from 'react';
+//imports material ui componets
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+//imports local files
+import { Store } from '../../../../Store';
+import SnackBar from '../../../../Components/SnackbarComponent';
+//imports services 
+import { postRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//router
+import {Link} from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const CreateRating = (props) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [name, setName] = useState('Novo rating');
+    const [description, setDescription] = useState('');
+
+    const [isLoading, setIsLoading] = useState(false)
+
+    // Handle error in name
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: '',
+    })
+
+    // Handle error in Country 
+    const [errorInDescription, setErrorInDescription] = useState({
+        error: false,
+        message: '',
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        setName(e.target.value)
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+    }
+
+    const DescriptionHandler = (e) => {
+        if (errorInDescription.error) {
+            setErrorInDescription({
+                error: false,
+                message: ''
+            })
+        }
+        setDescription(e.target.value)
+    }
+
+    // verify if the given text is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    //Handle submit 
+    async function onSubmit() {
+        setIsLoading(true)
+        if (!isEmpty(name) && !isEmpty(description)) {
+            const api = '/ratings'
+            const body = {
+                "rating": {
+                    'name': name,
+                    'description': description,
+                }
+            }
+            postRequest(
+                api,
+                body,
+                (data) => {
+                    if(data.errors)
+                        HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                    else
+                        HandleSnack('O rating foi criada com sucesso', true, 'success', '#228B22')
+                    setIsLoading(false)
+                },
+                (error) => {
+                    HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                    setIsLoading(false)
+                }
+            )
+        } else {
+            HandleSnack('Você precisa preencher algumas informações obrigatórias', true, 'warning', '#FFC125')
+            if (isEmpty(name)) {
+                setErrorInName({
+                    error: true,
+                    message: 'Esse campo está vazio'
+                })
+            }
+            if (isEmpty(description)) {
+                setErrorInDescription({
+                    error: true,
+                    message: 'Esse campo está vazio'
+                })
+            }
+            setIsLoading(false)
+        }
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'Nome',
+            value: name,
+            required: true,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event)
+        },
+        {
+            label: 'Descrição',
+            value: description,
+            required: true,
+            error: errorInDescription.error,
+            errorMessage: errorInDescription.message,
+            onChange: (event) => DescriptionHandler(event)
+        }
+    ]
+
+    if(CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignItems="center" alignContent="center" xs={12}>
+                        <Grid item> 
+                            <Typography variant='h4'>
+                                {name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link to={'/admin/Ratings'} style={{textDecoration: 'none'}}>
+                                <Button
+                                    onClick={props.BackToList}
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+    
+                    <div style={{ height: '1em' }}></div>
+    
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <AddRoundedIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Adicionar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        );
+    } else return <Unauthorized/>
+}
+
+export default CreateRating;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/CreateRole.js b/src/Admin/Components/Components/Inputs/CreateRole.js
new file mode 100644
index 0000000000000000000000000000000000000000..050203e0c267c85b6ac69106e60637ff4b0d4bed
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/CreateRole.js
@@ -0,0 +1,242 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useContext } from 'react';
+//imports material ui componets
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import { postRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//router
+import { Link } from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const CreateRole = (props) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [name, setName] = useState('Nova role');
+    const [desc, setDesc] = useState('');
+
+    const [isLoading, setIsLoading] = useState(false)
+
+    // Handle error in name
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: '',
+    })
+
+    // Handle error in Country 
+    const [errorInDesc, setErrorInDesc] = useState({
+        error: false,
+        message: '',
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        setName(e.target.value)
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+    }
+
+    const DescHandler = (e) => {
+        if (errorInDesc.error) {
+            setErrorInDesc({
+                error: false,
+                message: ''
+            })
+        }
+        setDesc(e.target.value)
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+
+    //Handle submit 
+    async function onSubmit() {
+        setIsLoading(true)
+        const api = '/roles'
+        const body = {
+            "role": {
+                'name': name,
+                'description': desc,
+            }
+        }
+        postRequest(
+            api,
+            body,
+            (data) => {
+                if (data.id)
+                    HandleSnack('A role foi criada com sucesso!', true, 'success', '#228B22')
+                else {
+                    if (data.name) {
+                        let errorName = "";
+                        data.name.map((err) => (
+                            errorName = errorName + err + " e "
+                        ))
+                        setErrorInName({
+                            error: true,
+                            message: errorName
+                        })
+                    }
+                }
+                setIsLoading(false)
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'Nome',
+            value: name,
+            required: true,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event)
+        },
+        {
+            label: 'Descrição',
+            value: desc,
+            required: true,
+            error: errorInDesc.error,
+            errorMessage: errorInDesc.message,
+            onChange: (event) => DescHandler(event)
+        }
+    ]
+
+    if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignItems="center" alignContent="center" xs={12}>
+                        <Grid item>
+                            <Typography variant='h4'>
+                                {name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link to={'/admin/permissions'} style={{ textDecoration: 'none' }}>
+                                <Button
+                                    onClick={props.BackToList}
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                            </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <AddRoundedIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Adicionar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        )
+    } else return <Unauthorized />
+}
+
+export default CreateRole;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/EditCollection.js b/src/Admin/Components/Components/Inputs/EditCollection.js
new file mode 100644
index 0000000000000000000000000000000000000000..e455706258f0ae86a984beaefa02f17a6b902803
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/EditCollection.js
@@ -0,0 +1,296 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useRef, useContext } from 'react';
+//imports material ui components
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+import SaveIcon from '@material-ui/icons/Save';
+import MenuItem from "@material-ui/core/MenuItem";
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import Unauthorized from '../Unauthorized';
+import { getRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import { EditFilter, GetAData } from '../../../Filters';
+//routers
+import { Link } from 'react-router-dom';
+import ReactRichEditor from "react-rich-text-editor";
+
+const EditCollection = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+
+    const [isLoading, setIsLoading] = useState(false);
+    const id = match.params.id
+    const [name, setName] = useState('')
+    const [privacy, setPrivacy] = useState('')
+    const [description, setDescription] = useState('');
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [errorInPrivacy, setErrorInPrivacy] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+        setName(e.target.value)
+    }
+
+    //Verify if the string is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'ID',
+            value: id,
+            default: true,
+            type: 'text'
+        },
+        {
+            label: 'Nome',
+            value: name,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event),
+            default: false,
+            type: 'text',
+        },
+    ]
+
+    const privacyOptions = [
+        {
+            value: "private",
+            label: "Privado",
+        },
+        {
+            value: "public",
+            label: "Público",
+        },
+    ];
+
+    //handle change of privacy
+    const handleChange = (e) => {
+        const value = e.target.value;
+        setPrivacy(value);
+        console.log(privacy)
+    };
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    const onSubmit = async () => {
+        setIsLoading(true)
+        const api = EditFilter('collections', id)
+            let body = {
+                "collection": {
+                    "name": name,
+                    "privacy": privacy,
+                    "description": description
+                }
+            }
+            putRequest(
+                api,
+                body,
+                (data) => {
+                    HandleSnack('A Coleção foi alterada com sucesso', true, 'success', '#228B22')
+                    setIsLoading(false)
+                },
+                (error) => {
+                    HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                    setIsLoading(false)
+                }
+            )
+        }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("collections", match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setError(false);
+                setName(data.name)
+                setPrivacy(data.privacy)
+                setDescription(data.description)
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div> Houve um erro... </div>
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' xs={12} alignItems="center">
+                        <Grid item>
+                            <Typography variant='h4'>
+                                {name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link style={{ textDecoration: 'none' }} to={'/admin/Collections'}>
+                                <Button
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                disabled={field.default}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                        <TextField
+                            select
+                            label="Privacidade"
+                            value={privacy ? privacy : ""}
+                            error={errorInPrivacy.error}
+                            helperText={errorInPrivacy.error ? errorInPrivacy.errorMessage : ''}
+                            style={{ marginBottom: '1em' }}
+                            onChange={handleChange}
+                        >
+                            {privacyOptions.map((option, index) => (
+                                <MenuItem
+                                    key={option.value}
+                                    value={option.value}
+                                    style={option.value === privacy ? { color: 'blue' } : { color: 'black' }}
+                                >
+                                    {
+                                        option.value
+                                    }
+                                </MenuItem>
+                            ))}
+                        </TextField>
+                        <ReactRichEditor
+                            height={200}
+                            onCodeChange={(word) => {
+                                setDescription(word)
+                            }}
+                            showAll={true}
+                        />
+                    </form>
+                </CardContent>
+
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <SaveIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Salvar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        )
+    } else return <Unauthorized />
+}
+
+export default EditCollection;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/EditEducationalObect.js b/src/Admin/Components/Components/Inputs/EditEducationalObect.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c6c3ef96ebf3422df1eff9f9bfe800ec9203f8f
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/EditEducationalObect.js
@@ -0,0 +1,630 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useRef, useContext } from "react";
+import PropTypes from "prop-types";
+import SwipeableViews from "react-swipeable-views";
+import moment from "moment";
+//imports material ui components
+import { Typography, TextField, Button, Grid } from "@material-ui/core";
+import CircularProgress from "@material-ui/core/CircularProgress";
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from "@material-ui/core/CardActions";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import Chip from "@material-ui/core/Chip";
+import MenuItem from "@material-ui/core/MenuItem";
+import { useTheme, makeStyles } from "@material-ui/core/styles";
+import Tabs from "@material-ui/core/Tabs";
+import Tab from "@material-ui/core/Tab";
+import Box from "@material-ui/core/Box";
+import SaveIcon from "@material-ui/icons/Save";
+//imports local files
+import SnackBar from "../../../../Components/SnackbarComponent";
+import { Store } from "../../../../Store";
+import Unauthorized from "../Unauthorized";
+import LoadingSpinner from "../../../../Components/LoadingSpinner";
+import {
+    fetchAllRequest,
+    putRequest,
+} from "../../../../Components/HelperFunctions/getAxiosConfig";
+import { EditFilter } from "../../../Filters";
+//routers
+import { Link } from "react-router-dom";
+import ReactRichEditor from "react-rich-text-editor";
+
+const useStyles = makeStyles((theme) => ({
+    root: {
+        width: "100%",
+        maxWidth: 250,
+        backgroundColor: theme.palette.background.paper,
+        position: "relative",
+        overflow: "auto",
+        maxHeight: 300,
+    },
+}));
+
+let text;
+
+const EditEducationalObject = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+
+    const theme = useTheme();
+    const classes = useStyles();
+
+    const id = match.params.id;
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [isLoading, setIsLoading] = useState(false); //is loading to submit
+
+    const [value, setValue] = React.useState(0);
+
+    //mutables
+    const [name, setName] = useState();
+    const [owner, setOwner] = useState();
+    const [author, setAuthor] = useState();
+    const [objectType, setObjectType] = useState({});
+    const [description, setDescription] = useState("");
+    const [languagesID, setLanguagesID] = useState([]);
+    const [objectTypeID, setObjectTypeID] = useState();
+    const [listOfLanguages, setListOfLanguages] = useState([]);
+    const [listOfObjectTypes, setListOfObjectTypes] = useState([]);
+
+    // Imutables
+    const [CREATE_AT, setCreateAt] = useState("");
+    const [UPDATE_AT, setUpdateAt] = useState("");
+    const [VIEWS_COUNT, setViewsCount] = useState("");
+    const [LIKES_COUNT, setLikesCount] = useState("");
+    const [REVIEW_AVERAGE, setReviewAverage] = useState("");
+    const [SCORE, setScore] = useState("");
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: "",
+    });
+
+    const [errorInOwner, setErrorInOwner] = useState({
+        error: false,
+        message: "",
+    });
+
+    const [errorInAuthor, setErrorInAuthor] = useState({
+        error: false,
+        message: "",
+    });
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: "",
+            });
+        }
+        setName(e.target.value);
+    };
+
+    const OwnerHandler = (e) => {
+        if (errorInOwner.error) {
+            setErrorInOwner({
+                error: false,
+                message: "",
+            });
+        }
+        setOwner(e.target.value);
+    };
+
+    const AuthorHandler = (e) => {
+        if (errorInAuthor.error) {
+            setErrorInAuthor({
+                error: false,
+                message: "",
+            });
+        }
+        setAuthor(e.target.value);
+    };
+
+    function TabPanel(props) {
+        const { children, value, index, ...other } = props;
+
+        return (
+            <div
+                role="tabpanel"
+                hidden={value !== index}
+                id={`full-width-tabpanel-${index}`}
+                aria-labelledby={`full-width-tab-${index}`}
+                {...other}
+            >
+                {value === index && <Box style={{ marginTop: "2em" }}>{children}</Box>}
+            </div>
+        );
+    }
+
+    TabPanel.propTypes = {
+        children: PropTypes.node,
+        index: PropTypes.any.isRequired,
+        value: PropTypes.any.isRequired,
+    };
+
+    function a11yProps(index) {
+        return {
+            id: `full-width-tab-${index}`,
+            "aria-controls": `full-width-tabpanel-${index}`,
+        };
+    }
+
+    const handleChangeLan = (id, value) => {
+        const currLanguagesId = [...languagesID];
+        currLanguagesId.push({
+            id: id,
+            name: value,
+        });
+        setListOfLanguages((chips) => chips.filter((chip) => chip.id !== id));
+        setLanguagesID(currLanguagesId);
+    };
+
+    const handleDeleteLan = (chipToDelete) => () => {
+        const currLanguageList = [...listOfLanguages];
+        currLanguageList.push({
+            id: chipToDelete.id,
+            name: chipToDelete.name,
+        });
+        setListOfLanguages(currLanguageList);
+        setLanguagesID((chips) =>
+            chips.filter((chip) => chip.id !== chipToDelete.id)
+        );
+    };
+
+    const handleChangeObj = (id, value) => {
+        let currListOfObjs = [...listOfObjectTypes];
+        currListOfObjs.push({
+            id: objectType.id,
+            name: objectType.name,
+        });
+        currListOfObjs = currListOfObjs.filter((chip) => chip.id !== id);
+        setListOfObjectTypes(currListOfObjs);
+        setObjectType({
+            id: id,
+            name: value,
+        });
+    };
+
+    const handleChangeTab = (event, newValue) => {
+        setValue(newValue);
+    };
+
+    const handleChangeIndex = (index) => {
+        setValue(index);
+    };
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const SaveData = (data) => {
+        setName(data.name);
+        setOwner(data.publisher.name);
+        setAuthor(data.author);
+        setReviewAverage(data.review_average);
+        setLikesCount(data.likes_count);
+        setViewsCount(data.views_count);
+        setScore(data.score);
+        setCreateAt(DisplayDate(data.created_at));
+        setUpdateAt(DisplayDate(data.updated_at));
+        setDescription(data.description);
+    };
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    //handle submit
+    const onSubmit = async () => {
+        setIsLoading(true);
+        const api = EditFilter("learning_objects", id);
+        const body = {
+            "learning_object": {
+                "author": author,
+                "name": name,
+                "description": text,
+                "object_type_id": [objectType.id],
+                "language_ids": languagesID,
+            },
+        };
+        console.log(text)
+        putRequest(
+            api,
+            body,
+            (data, header) => {
+                if (data.id) {
+                    HandleSnack(
+                        "O objeto educacional foi alterada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                } else {
+                    if (data.author) {
+                        let authorError = "";
+                        data.author.map((msg) => (authorError = authorError + msg + " e "));
+                        setErrorInAuthor({
+                            error: true,
+                            message: authorError,
+                        });
+                    }
+                    if (data.language) {
+                        let languageErr = "";
+                        data.language.map(
+                            (msg) => (languageErr = languageErr + msg + " e ")
+                        );
+                        HandleSnack("Língua" + languageErr, true, "warning", "#FFC125");
+                    }
+                }
+                setIsLoading(false);
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                setIsLoading(false);
+            }
+        );
+    };
+
+    // Fields
+    const fields = [
+        {
+            label: "ID",
+            value: id,
+            default: true,
+            type: "text",
+        },
+        {
+            label: "Nome",
+            value: name,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event),
+            default: false,
+            required: true,
+            type: "text",
+        },
+        {
+            label: "Dono(a)",
+            value: owner,
+            error: errorInOwner.error,
+            errorMessage: errorInOwner.message,
+            onChange: (event) => OwnerHandler(event),
+            default: false,
+            required: true,
+            type: "text",
+        },
+        {
+            label: "Autor(a)",
+            value: author,
+            error: errorInAuthor.error,
+            errorMessage: errorInAuthor.message,
+            onChange: (event) => AuthorHandler(event),
+            default: false,
+            required: true,
+            type: "text",
+        },
+    ];
+
+    const Imutables = [
+        {
+            label: "Score",
+            value: SCORE,
+            default: true,
+            type: "text",
+        },
+        {
+            label: "Criado em",
+            value: CREATE_AT,
+            default: true,
+            type: "text",
+        },
+        {
+            label: "Atualizado em",
+            value: UPDATE_AT,
+            default: true,
+            type: "text",
+        },
+        {
+            label: "View count",
+            value: VIEWS_COUNT,
+            default: true,
+            type: "text",
+        },
+        {
+            label: "Likes count",
+            value: LIKES_COUNT,
+            default: true,
+            type: "text",
+        },
+        {
+            label: "Review average",
+            value: REVIEW_AVERAGE,
+            default: true,
+            type: "text",
+        },
+    ];
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === "admin" || roles[i].name === "editor")
+                    canUserEdit = true;
+        } else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    };
+
+    useEffect(() => {
+        const urls = [
+            `/learning_objects/${match.params.id}`,
+            "/languages",
+            "/object_types",
+        ];
+        fetchAllRequest(
+            urls,
+            (data) => {
+                const auxiliarLanguages = [...data[1]];
+                const auxiliarLanguagesId = [];
+                const objectLanguagesId = [];
+                data[0].language.map((lan) => objectLanguagesId.push(lan.id));
+                data[1].map((lan) => auxiliarLanguagesId.push(lan.id));
+                objectLanguagesId.map((lan) => {
+                    const index = auxiliarLanguagesId.indexOf(lan);
+                    auxiliarLanguages.splice(index, 1);
+                    auxiliarLanguagesId.splice(index, 1);
+                });
+
+                const auxiliarObjects = [...data[2]];
+                const auxiliarObjectsName = [];
+                const objectTypeName = data[0].object_type;
+                data[2].map((obj) => auxiliarObjectsName.push(obj.name));
+                const index = auxiliarObjectsName.indexOf(objectTypeName);
+                setObjectType({
+                    id: auxiliarObjects[index].id,
+                    name: auxiliarObjects[index].name,
+                });
+                auxiliarObjects.splice(index, 1);
+                auxiliarObjectsName.splice(index, 1);
+
+                SaveData(data[0]);
+                setLanguagesID(data[0].language);
+                setListOfLanguages(auxiliarLanguages);
+                setListOfObjectTypes(auxiliarObjects);
+                setIsLoaded(true);
+            },
+            (error) => {
+                console.log(error);
+                setError(true);
+            }
+        );
+    }, []);
+
+    if (error) {
+        return <div> Houve um erro... </div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />;
+    } else if (CheckUserPermission()) {
+        return (
+            <Card variant="outlined">
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() =>
+                        setSnackInfo({
+                            message: "",
+                            icon: "",
+                            open: false,
+                            color: "",
+                        })
+                    }
+                />
+                <CardContent>
+                    <Grid
+                        container
+                        direction="row"
+                        justify="space-between"
+                        xs={12}
+                        alignContent="center"
+                        alignItems="center"
+                    >
+                        <Grid item>
+                            <Typography variant="h4">{name}</Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link
+                                style={{ textDecoration: "none" }}
+                                to={"/admin/learningObjects"}
+                            >
+                                <Button
+                                    startIcon={<ListRoundedIcon />}
+                                    variant="outlined"
+                                    color="primary"
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <Tabs
+                        value={value}
+                        onChange={handleChangeTab}
+                        indicatorColor="primary"
+                        textColor="primary"
+                        variant="fullWidth"
+                        aria-label="full width tabs example"
+                    >
+                        <Tab label="Resumo" {...a11yProps(0)} />
+                        <Tab label="Descrição" {...a11yProps(1)} />
+                        <Tab label="Imutáveis" {...a11yProps(2)} />
+                    </Tabs>
+
+                    <SwipeableViews
+                        axis={theme.direction === "rtl" ? "x-reverse" : "x"}
+                        index={value}
+                        onChangeIndex={handleChangeIndex}
+                    >
+                        <TabPanel value={value} index={0} dir={theme.direction}>
+                            <form style={{ display: "flex", flexDirection: "column" }}>
+                                {fields.map((field, index) => (
+                                    <TextField
+                                        key={index}
+                                        required={field.required}
+                                        disabled={field.default}
+                                        error={field.error}
+                                        helperText={field.error ? field.errorMessage : ""}
+                                        style={{ width: "250px", marginBottom: "1em" }}
+                                        label={field.label}
+                                        defaultValue={field.value}
+                                        onBlur={field.onChange}
+                                        type="search"
+                                        multiline
+                                    />
+                                ))}
+                                {languagesID.map((data) => {
+                                    return (
+                                        <li
+                                            key={data.id}
+                                            style={{ listStyleType: "none", marginBottom: "0.5em" }}
+                                        >
+                                            <Chip
+                                                label={data.name}
+                                                onDelete={
+                                                    data === "React" ? undefined : handleDeleteLan(data)
+                                                }
+                                                className={classes.chip}
+                                            />
+                                        </li>
+                                    );
+                                })}
+                                <TextField
+                                    id="standard-select-currency"
+                                    select
+                                    label="Línguas"
+                                    style={{ width: "250px", marginBottom: "1em" }}
+                                >
+                                    {listOfLanguages.map((option) => (
+                                        <MenuItem
+                                            key={option.id}
+                                            value={option.name}
+                                            onClick={() => {
+                                                handleChangeLan(option.id, option.name);
+                                            }}
+                                        >
+                                            {option.name}
+                                        </MenuItem>
+                                    ))}
+                                </TextField>
+
+                                <li style={{ listStyleType: "none", marginBottom: "0.5em" }}>
+                                    <Chip label={objectType.name} className={classes.chip} />
+                                </li>
+                                <TextField
+                                    id="standard-select-currency"
+                                    select
+                                    label="Object type"
+                                    style={{ width: "250px", marginBottom: "1em" }}
+                                >
+                                    {listOfObjectTypes.map((option) => (
+                                        <MenuItem
+                                            key={option.id}
+                                            value={option.name}
+                                            onClick={() => {
+                                                handleChangeObj(option.id, option.name);
+                                            }}
+                                        >
+                                            {option.name}
+                                        </MenuItem>
+                                    ))}
+                                </TextField>
+                            </form>
+                        </TabPanel>
+
+                        <TabPanel value={value} index={1} dir={theme.direction}>
+                            <ReactRichEditor
+                                height={200}
+                                onCodeChange={(word) => {
+                                    text = word
+                                }}
+                                showAll={true}
+
+                            />
+                        </TabPanel>
+
+                        <TabPanel value={value} index={2} dir={theme.direction}>
+                            <form style={{ display: "flex", flexDirection: "column" }}>
+                                {Imutables.map((field, index) => (
+                                    <TextField
+                                        key={index}
+                                        disabled={field.default}
+                                        style={{ width: "250px", marginBottom: "1em" }}
+                                        label={field.label}
+                                        defaultValue={field.value}
+                                    />
+                                ))}
+                            </form>
+                        </TabPanel>
+                    </SwipeableViews>
+                </CardContent>
+
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <SaveIcon />}
+                    >
+                        {isLoading ? <CircularProgress size={24} /> : "Salvar"}
+                    </Button>
+                </CardAction>
+            </Card>
+        );
+    } else return <Unauthorized />;
+};
+
+export default EditEducationalObject;
diff --git a/src/Admin/Components/Components/Inputs/EditLanguage.js b/src/Admin/Components/Components/Inputs/EditLanguage.js
new file mode 100644
index 0000000000000000000000000000000000000000..a099bf35cd7bf6fda69bebdc4d6c2f92d3ac0501
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/EditLanguage.js
@@ -0,0 +1,319 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from 'react';
+//imports material ui components
+import { Typography, TextField, Button, Grid, ButtonGroup } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+import SaveIcon from '@material-ui/icons/Save';
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//imports services 
+import { getRequest, putRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { EditFilter, GetAData, DeleteFilter } from '../../../Filters';
+import DeleteRoundedIcon from "@material-ui/icons/DeleteRounded";
+//routers
+import { Link, useHistory } from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const EditLanguage = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+    let history = useHistory()
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+
+    const [isLoading, setIsLoading] = useState(false);
+    const id = match.params.id
+    const [name, setName] = useState()
+    const [code, setCode] = useState()
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [errorInCode, setErrorInCode] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    async function DeleteHandler() {
+        const id = match.params.id
+        deleteRequest(
+            DeleteFilter("languages", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A língua foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    history.push("/admin/languages")
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+            }
+        );
+    }
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+        setName(e.target.value)
+    }
+
+    const CodeHandler = (e) => {
+        if (errorInCode.error) {
+            setErrorInCode({
+                error: false,
+                message: ''
+            })
+        }
+        setCode(e.target.value)
+    }
+
+
+    //Verify if the string is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'ID',
+            value: id,
+            default: true,
+            type: 'text'
+        },
+        {
+            label: 'Nome',
+            value: name,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event),
+            default: false,
+            type: 'text',
+        },
+        {
+            label: 'Código',
+            value: code,
+            error: errorInCode.error,
+            errorMessage: errorInCode.message,
+            onChange: (event) => CodeHandler(event),
+            default: false,
+            type: 'text'
+        },
+    ]
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+
+    const onSubmit = async () => {
+        setIsLoading(true)
+        const api = EditFilter('languages', id)
+        const body = {
+            "language": {
+                'name': name,
+                'code': code,
+            }
+        }
+        putRequest(
+            api,
+            body,
+            (data) => {
+                if (data.id)
+                    HandleSnack('A linguagem foi alterada com sucesso!', true, 'success', '#228B22')
+                else {
+                    if (data.name) {
+                        let errorName = "";
+                        data.name.map((err) => (
+                            errorName = errorName + err + " e "
+                        ))
+                        setErrorInName({
+                            error: true,
+                            message: errorName
+                        })
+                    }
+                    if (data.code) {
+                        let errorcode = "";
+                        data.code.map((err) => (
+                            errorcode = errorcode + err + " e "
+                        ))
+                        setErrorInCode({
+                            error: true,
+                            message: errorcode
+                        })
+                    }
+                }
+                setIsLoading(false)
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("languages", match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setName(data.name)
+                setCode(data.code)
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(error);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div> Houve um erro... </div>
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignContent="center" alignItems="center">
+                        <Typography variant='h4'>
+                            {name}
+                        </Typography>
+                        <ButtonGroup>
+                            <Link style={{ textDecoration: 'none' }} to={'/admin/languages'}>
+                                <Button
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                            <Button
+                                startIcon={<DeleteRoundedIcon />}
+                                color="secondary"
+                                variant="outlined"
+                                onClick={DeleteHandler}
+                            >
+                                Deletar
+                                </Button>
+                        </ButtonGroup>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                disabled={field.default}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <SaveIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Salvar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        )
+    } else return <Unauthorized />
+}
+
+export default EditLanguage;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/EditRating.js b/src/Admin/Components/Components/Inputs/EditRating.js
new file mode 100644
index 0000000000000000000000000000000000000000..2229d02f9664b008a7aab833c0222d93128c4c33
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/EditRating.js
@@ -0,0 +1,288 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from 'react';
+//imports material ui components
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+import SaveIcon from '@material-ui/icons/Save';
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//imports services 
+import { getRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { EditFilter, GetAData } from '../../../Filters';
+//routers
+import {Link} from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const EditRating = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+
+    const [isLoading, setIsLoading] = useState(false);
+    const id = match.params.id
+    const [name, setName] = useState()
+    const [description, setDescription] = useState()
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [errorInDescription, setErrorInDescription] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+        setName(e.target.value)
+    }
+
+    const DescriptionHandler = (e) => {
+        if (errorInDescription.error) {
+            setErrorInDescription({
+                error: false,
+                message: ''
+            })
+        }
+        setDescription(e.target.value)
+    }
+
+
+    //Verify if the string is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'ID',
+            value: id,
+            default: true,
+            type: 'text'
+        },
+        {
+            label: 'Nome',
+            value: name,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event),
+            default: false,
+            required: true,
+            type: 'text',
+        },
+        {
+            label: 'Descrição',
+            value: description,
+            error: errorInDescription.error,
+            errorMessage: errorInDescription.message,
+            onChange: (event) => DescriptionHandler(event),
+            default: false,
+            required: true,
+            type: 'text'
+        },
+    ]
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+
+    const onSubmit = async () => {
+        setIsLoading(true)
+        if (!isEmpty(name) && !isEmpty(description)) {
+            const api = EditFilter('ratings', id)
+            const body = {
+                "rating": {
+                    'name': name,
+                    'description': description,
+                }
+            }
+            putRequest(
+                api,
+                body,
+                (data, header) => {
+                    if(data.errors)
+                        HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                    else
+                        HandleSnack('O rating foi alterada com sucesso', true, 'success', '#228B22')
+                    setIsLoading(false)
+                },
+                (error) => {
+                    HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                    setIsLoading(false)
+                }
+            )
+        }
+        else {
+            HandleSnack('Você precisa preencher algumas informações obrigatórias', true, 'warning', '#FFC125')
+            if (isEmpty(name)) {
+                setErrorInName({
+                    error: true,
+                    message: 'Este campo precisa ser preenchido'
+                })
+            }
+            if (isEmpty(description)) {
+                setErrorInDescription({
+                    error: true,
+                    message: 'Este campo precisa ser preenchido'
+                })
+            }
+            setIsLoading(false)
+        }
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("ratings", match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setName(data.name)
+                setDescription(data.description)
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div> Houve um erro... </div>
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..."/>
+    } else if(CheckUserPermission()){
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignContent="center" alignItems="center" xs={12}>
+                        <Grid item>
+                            <Typography variant='h4'>
+                                {name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Link style={{textDecoration: 'none'}} to={'/admin/Ratings'}>
+                                <Button
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                disabled={field.default}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <SaveIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Salvar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        )
+    } else return <Unauthorized/>
+}
+
+export default EditRating;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/EditRoles.js b/src/Admin/Components/Components/Inputs/EditRoles.js
new file mode 100644
index 0000000000000000000000000000000000000000..68dc00133f86b99b983d86ed8c1f2b8bd22181f8
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/EditRoles.js
@@ -0,0 +1,310 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from 'react';
+//imports material ui components
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+import SaveIcon from '@material-ui/icons/Save';
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+import DeleteRoundedIcon from "@material-ui/icons/DeleteRounded";
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//imports services 
+import { getRequest, putRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { EditFilter, GetAData, DeleteFilter } from '../../../Filters';
+//routers
+import { Link, useHistory } from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const EditLanguage = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+    let history = useHistory()
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+
+    const [isLoading, setIsLoading] = useState(false);
+    const id = match.params.id
+    const [name, setName] = useState()
+    const [desc, setDesc] = useState()
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [errorInDesc, setErrorInDesc] = useState({
+        error: false,
+        message: ''
+    })
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+        setName(e.target.value)
+    }
+
+    const DescHandler = (e) => {
+        if (errorInDesc.error) {
+            setErrorInDesc({
+                error: false,
+                message: ''
+            })
+        }
+        setDesc(e.target.value)
+    }
+
+
+    //Verify if the string is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'ID',
+            value: id,
+            default: true,
+            type: 'text'
+        },
+        {
+            label: 'Nome',
+            value: name,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event),
+            default: false,
+            type: 'text',
+        },
+        {
+            label: 'Descrição',
+            value: desc,
+            error: errorInDesc.error,
+            errorMessage: errorInDesc.message,
+            onChange: (event) => DescHandler(event),
+            default: false,
+            type: 'text'
+        },
+    ]
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+
+    const onSubmit = async () => {
+        setIsLoading(true)
+        const api = EditFilter('roles', id)
+        const body = {
+            "role": {
+                'name': name,
+                'description': desc,
+            }
+        }
+        putRequest(
+            api,
+            body,
+            (data) => {
+                if (data.id)
+                    HandleSnack('A role foi alterada com sucesso', true, 'success', '#228B22')
+                else {
+                    if (data.name) {
+                        let errorName = "";
+                        data.name.map((err) => (
+                            errorName = errorName + err + " e "
+                        ))
+                        setErrorInName({
+                            error: true,
+                            message: errorName
+                        })
+                    }
+                }
+                setIsLoading(false)
+            },
+            (error) => {
+                console.log(error)
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    async function DeleteHandler() {
+        const id = match.params.id
+        deleteRequest(
+            DeleteFilter("roles", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A permissão foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    history.goBack()
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+            }
+        );
+    }
+
+    useEffect(() => {
+        getRequest(
+            GetAData("roles", match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setName(data.name)
+                setDesc(data.description)
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(error);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div> Houve um erro... </div>
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignContent="center" alignItems="center">
+                        <Typography variant='h4'>
+                            {name}
+                        </Typography>
+                        <ButtonGroup>
+                            <Link style={{ textDecoration: 'none' }} to={'/admin/permissions'}>
+                                <Button
+                                    startIcon={<ListRoundedIcon />}
+                                    variant='outlined'
+                                    color='primary'
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                            <Button
+                                startIcon={<DeleteRoundedIcon />}
+                                color="secondary"
+                                variant="outlined"
+                                onClick={DeleteHandler}
+                            >
+                                Deletar
+                        </Button>
+                        </ButtonGroup>
+                    </Grid>
+
+                    <div style={{ height: '1em' }}></div>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                required={field.required}
+                                disabled={field.default}
+                                error={field.error}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type="search"
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+                </CardContent>
+                <CardAction>
+                    <Button
+                        onClick={() => {
+                            onSubmit();
+                        }}
+                        variant="contained"
+                        color="primary"
+                        disabled={isLoading}
+                        startIcon={isLoading ? null : <SaveIcon />}
+                    >
+                        {
+                            isLoading ? <CircularProgress size={24} /> : 'Salvar'
+                        }
+                    </Button>
+                </CardAction>
+            </Card>
+        )
+    } else return <Unauthorized />
+}
+
+export default EditLanguage;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/EditUser.js b/src/Admin/Components/Components/Inputs/EditUser.js
new file mode 100644
index 0000000000000000000000000000000000000000..5152ff93438f3c0b3513028dd4fde0fdf3a3790f
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/EditUser.js
@@ -0,0 +1,621 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from 'react';
+//imports material ui components
+import { Typography, TextField, Button, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import CardAction from '@material-ui/core/CardActions';
+import ListRoundedIcon from '@material-ui/icons/ListRounded';
+import Chip from '@material-ui/core/Chip';
+import { makeStyles } from '@material-ui/core/styles';
+import SaveIcon from '@material-ui/icons/Save';
+import DeleteRoundedIcon from '@material-ui/icons/DeleteRounded';
+import FormControlLabel from '@material-ui/core/FormControlLabel';
+import Switch from '@material-ui/core/Switch';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import MenuItem from '@material-ui/core/MenuItem';
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//imports services 
+import { getRequest, putRequest, deleteRequest, postRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { EditFilter, GetAData } from '../../../Filters';
+//routers
+import { Link, useHistory } from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const useStyles = makeStyles((theme) => ({
+    root: {
+        display: 'flex',
+        justifyContent: 'center',
+        flexWrap: 'wrap',
+        listStyle: 'none',
+        padding: theme.spacing(0.5),
+        margin: 0,
+    },
+    chip: {
+        margin: theme.spacing(0.5),
+    },
+}));
+
+const EditUser = ({ match }) => {
+    const classes = useStyles();
+    let history = useHistory();
+    const { state, dispatch } = useContext(Store)
+    const id = match.params.id
+
+    const [error, setError] = useState(id !== "-1" ? null : false); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(id === "-1" ? true : false); //Necessary to consult the API, wait until complete
+
+    const [switchState, setSwitchState] = useState(id !== "-1" ? false : false)
+    const [isLoading, setIsLoading] = useState(false);
+    const [name, setName] = useState(id !== "-1" ? "" : "Novo usuário")
+    const [email, setEmail] = useState("")
+    const [description, setDescription] = useState("")
+    const [pass, setPass] = useState("")
+    const [confirmPass, setConfirmPass] = useState("")
+    const [rolesList, setRolesList] = useState([
+        {
+            id: 1,
+            value: "teacher"
+        },
+        {
+            id: 2,
+            value: "student"
+        },
+        {
+            id: 3,
+            value: "admin"
+        },
+        {
+            id: 4,
+            value: "curator"
+        },
+        {
+            id: 5,
+            value: "moderator"
+        },
+        {
+            id: 6,
+            value: "supervisor"
+        },
+        {
+            id: 7,
+            value: "editor"
+        },
+        {
+            id: 9,
+            value: "partner"
+        },
+        {
+            id: 10,
+            value: "publisher"
+        },
+        {
+            id: 11,
+            value: "submitter"
+        },
+    ])
+    const [userRoles, setUserRoles] = useState([])
+
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: ''
+    })
+    const [errorInEmail, setErrorInEmail] = useState({
+        error: false,
+        message: ''
+    })
+    const [errorInDesc, setErrorInDesc] = useState({
+        error: false,
+        message: ''
+    })
+    const [errorInPass, setErrorInPass] = useState({
+        error: false,
+        message: ''
+    })
+    const [errorInConfirmPass, setErrorInConfirmPass] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+        setName(e.target.value)
+    }
+
+    const EmailHandler = (e) => {
+        if (errorInEmail.error) {
+            setErrorInEmail({
+                error: false,
+                message: ''
+            })
+        }
+        setEmail(e.target.value)
+    }
+
+    const DescHandler = (e) => {
+        if (errorInDesc.error) {
+            setErrorInDesc({
+                error: false,
+                message: ''
+            })
+        }
+        setDescription(e.target.value)
+    }
+
+    const PassHandler = (e) => {
+        if (errorInPass.error) {
+            setErrorInPass({
+                error: false,
+                message: ''
+            })
+        }
+        setPass(e.target.value)
+    }
+
+    const ConfirmPassHandler = (e) => {
+        if (errorInConfirmPass.error) {
+            setErrorInConfirmPass({
+                error: false,
+                message: ''
+            })
+        }
+        setConfirmPass(e.target.value)
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'ID',
+            value: id,
+            default: true,
+            type: 'text'
+        },
+        {
+            label: 'Nome',
+            value: name,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event),
+            default: false,
+            type: 'text',
+        },
+        {
+            label: 'Email',
+            value: email,
+            error: errorInEmail.error,
+            errorMessage: errorInEmail.message,
+            onChange: (event) => EmailHandler(event),
+            default: false,
+            type: 'text'
+        },
+        {
+            label: 'Descrição',
+            value: description,
+            error: errorInDesc.error,
+            errorMessage: errorInDesc.message,
+            onChange: (event) => DescHandler(event),
+            default: false,
+            type: 'text'
+        },
+        {
+            label: 'Senha',
+            value: pass,
+            error: errorInPass.error,
+            errorMessage: errorInPass.message,
+            onChange: (event) => PassHandler(event),
+            default: id !== "-1" ? true : false,
+            type: 'text'
+        },
+        {
+            label: 'Confirmar senha',
+            value: confirmPass,
+            error: errorInConfirmPass.error,
+            errorMessage: errorInConfirmPass.message,
+            onChange: (event) => ConfirmPassHandler(event),
+            default: id !== "-1" ? true : false,
+            type: 'text'
+        },
+    ]
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    const handleDelete = (chipToDelete) => () => {
+        const currRolesList = [...rolesList];
+        currRolesList.push({
+            id: chipToDelete.id,
+            value: chipToDelete.name
+        })
+        setRolesList(currRolesList)
+        setUserRoles((chips) => chips.filter((chip) => chip.id !== chipToDelete.id));
+    };
+
+    const deleteUser = (userId) => {
+        deleteRequest(
+            `/users/${userId}`,
+            (data) => {
+                if(data.errors)
+                    HandleSnack("Erro!", true, "warning", "#FA8072");
+                else
+                {
+                    HandleSnack(`${name} deletado com sucesso!`, true, "success", "#228B22");
+                    history.push("/admin/usersList")
+                }
+            },
+            (error) => {
+                HandleSnack("Erro!", true, "warning", "#FA8072");
+            }
+        )
+    }
+
+    const onSubmit = async () => {
+        setIsLoading(true)
+        let userRolesID = [];
+        const api = EditFilter('users', id)
+        userRoles.map((role) => (
+            userRolesID.push(role.id)
+        ))
+        const body = {
+            "user": {
+                "name": name,
+                "email": email,
+                "description": description,
+                "role_ids": userRolesID,
+                "terms_of_service": switchState
+            }
+        }
+        putRequest(
+            api,
+            body,
+            (data) => {
+                setIsLoading(false)
+                if (data.id)
+                    HandleSnack(`O usuário: ${name} foi atualizado`, true, 'success', '#228B22')
+                else {
+                    if (data.email) {
+                        let emailError = "";
+                        data.email.map((msg) => (
+                            emailError = emailError + msg + " e "
+                        ))
+                        setErrorInEmail({
+                            error: true,
+                            message: emailError
+                        })
+                    }
+                    if (data.terms_of_service) {
+                        let termsError = "termos de serviço ";
+                        data.terms_of_service.map((msg) => (
+                            termsError = termsError + msg + " e "
+                        ))
+                        HandleSnack(termsError, true, 'warning', '#FFC125')
+                    }
+                }
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    const onCreate = () => {
+        setIsLoading(true)
+        let userRolesID = [];
+        const api = "/users"
+        userRoles.map((role) => (
+            userRolesID.push(role.id)
+        ))
+        const body = {
+            "user": {
+                "name": name,
+                "email": email,
+                "description": description,
+                "role_ids": userRolesID,
+                "password": pass,
+                "password_confirmation": confirmPass,
+                "terms_of_service": switchState
+            }
+        }
+        postRequest(
+            api,
+            body,
+            (data) => {
+                setIsLoading(false)
+                if (data.id)
+                {
+                    HandleSnack(`O usuário: ${name} foi criado`, true, 'success', '#228B22')
+                    history.push("/admin/usersList")
+                }
+                else {
+                    if (data.password) {
+                        let passError = "";
+                        data.password.map((msg) => (
+                            passError = passError + msg + " e "
+                        ))
+                        setErrorInPass({
+                            error: true,
+                            message: passError
+                        })
+                    }
+                    if (data.email) {
+                        let emailError = "";
+                        data.email.map((msg) => (
+                            emailError = emailError + msg + " e "
+                        ))
+                        setErrorInEmail({
+                            error: true,
+                            message: emailError
+                        })
+                    }
+                    if (data.terms_of_service) {
+                        let termsError = "";
+                        data.terms_of_service.map((msg) => (
+                            termsError = termsError + msg + " e "
+                        ))
+                        HandleSnack(termsError, true, 'warning', '#FFC125')
+                    }
+                    if (data.password_confirmation) {
+                        let confirmError = "";
+                        data.password_confirmation.map((msg) => (
+                            confirmError = confirmError + msg + " e "
+                        ))
+                        setErrorInConfirmPass({
+                            error: true,
+                            message: confirmError
+                        })
+                    }
+                }
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    const handleChange = (id, value) => {
+        const currUserRoles = [...userRoles];
+        currUserRoles.push(
+            {
+                id: id,
+                name: value,
+            }
+        )
+        setRolesList((chips) => chips.filter((chip) => chip.id !== id));
+        setUserRoles(currUserRoles);
+    };
+
+    useEffect(() => {
+        if (id !== "-1") {
+            getRequest(
+                GetAData("users", id),
+                (data, header) => {
+                    const currRolesList = [...rolesList];
+                    const auxiliarRolesId = [
+                        1, 2, 3, 4, 5, 6, 7, 9, 10, 11
+                    ]
+                    data.roles.map((data) => {
+                        const index = auxiliarRolesId.indexOf(data.id);
+                        currRolesList.splice(index, 1);
+                        auxiliarRolesId.splice(index, 1);
+                    })
+                    setRolesList(currRolesList);
+                    setName(data.name)
+                    setEmail(data.email)
+                    setDescription(data.description)
+                    setUserRoles(data.roles)
+                    setSwitchState(data.terms_accepted_at ? true : false)
+                    setIsLoaded(true);
+                },
+                (error) => {
+                    setIsLoaded(true);
+                    setError(error);
+                }
+            )
+        }
+    }, []);
+
+    if (error) {
+        return <div> Houve um erro... </div>
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container direction='row' justify='space-between' alignItems="center">
+                        <Grid item>
+                            <Typography variant='h4'>
+                                {name}
+                            </Typography>
+                        </Grid>
+                        <Grid item>
+                            <Grid container direction="row">
+                                <Grid item>
+                                    <Link style={{ textDecoration: 'none' }} to={'/admin/usersList'}>
+                                        <Button
+                                            startIcon={<ListRoundedIcon />}
+                                            variant='outlined'
+                                            color='primary'
+                                        >
+                                            Listar
+                                        </Button>
+                                    </Link>
+                                </Grid>
+                                {
+                                    id !== "-1" ?
+                                        <Grid item>
+                                            <Button
+                                                startIcon={<DeleteRoundedIcon />}
+                                                color="secondary"
+                                                variant="outlined"
+                                                onClick={() => { deleteUser(id) }}
+                                            >
+                                                Deletar
+                                            </Button>
+                                        </Grid> : null
+                                }
+                            </Grid>
+                        </Grid>
+                    </Grid>
+                    <div style={{ height: '1em' }}></div>
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            field.value !== "-1" ?
+                                <TextField
+                                    key={index}
+                                    required={field.required}
+                                    disabled={field.default}
+                                    error={field.error}
+                                    helperText={field.error ? field.errorMessage : ''}
+                                    style={{ width: '250px', marginBottom: '1em' }}
+                                    label={field.label}
+                                    value={field.value}
+                                    onChange={field.onChange}
+                                    type="search"
+                                    multiline={true}
+                                /> : null
+                        ))}
+                        {userRoles.map((data) => {
+                            return (
+                                <li key={data.id} style={{ listStyleType: "none" }}>
+                                    <Chip
+                                        label={data.name}
+                                        onDelete={data === 'React' ? undefined : handleDelete(data)}
+                                        className={classes.chip}
+                                    />
+                                </li>
+                            );
+                        })}
+                        <TextField
+                            id="standard-select-currency"
+                            select
+                            label="Permissões"
+                            style={{ width: '250px', marginBottom: '1em' }}
+                        >
+                            {rolesList.map((option) => (
+                                <MenuItem key={option.id} value={option.value} onClick={() => { handleChange(option.id, option.value) }}>
+                                    {option.value}
+                                </MenuItem>
+                            ))}
+                        </TextField>
+                        <FormControlLabel
+                            control={
+                                <Switch
+                                    checked={switchState}
+                                    onChange={() => { setSwitchState(!switchState) }}
+                                    name="checkedB"
+                                    color="primary"
+                                />
+                            }
+                            label="Concorda com os termos de serviço?"
+                        />
+                    </form>
+                </CardContent>
+                <CardAction>
+                    {
+                        id !== "-1" ?
+                            <Button
+                                onClick={() => {
+                                    onSubmit();
+                                }}
+                                variant="contained"
+                                color="primary"
+                                disabled={isLoading}
+                                startIcon={isLoading ? null : <SaveIcon />}
+                            >
+                                {
+                                    isLoading ? <CircularProgress size={24} /> : 'Salvar'
+                                }
+                            </Button>
+                            :
+                            <Button
+                                onClick={() => {
+                                    onCreate();
+                                }}
+                                variant="contained"
+                                color="primary"
+                                disabled={isLoading}
+                                startIcon={isLoading ? null : <AddRoundedIcon />}
+                            >
+                                {
+                                    isLoading ? <CircularProgress size={24} /> : 'Criar'
+                                }
+                            </Button>
+                    }
+                </CardAction>
+            </Card>
+        )
+    } else return <Unauthorized />
+}
+
+export default EditUser;
diff --git a/src/Admin/Components/Components/Inputs/EmailInputs.js b/src/Admin/Components/Components/Inputs/EmailInputs.js
new file mode 100644
index 0000000000000000000000000000000000000000..8790e927f9ff46fb0ebaf4a84e805a5c15319d0f
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/EmailInputs.js
@@ -0,0 +1,440 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useRef } from "react";
+//material ui components
+import TextField from "@material-ui/core/TextField";
+import MenuItem from "@material-ui/core/MenuItem";
+import FormGroup from "@material-ui/core/FormGroup";
+import FormControlLabel from "@material-ui/core/FormControlLabel";
+import CircularProgress from "@material-ui/core/CircularProgress";
+import Checkbox from "@material-ui/core/Checkbox";
+import SendRoundedIcon from "@material-ui/icons/SendRounded";
+import Button from "@material-ui/core/Button";
+import { makeStyles } from '@material-ui/core/styles';
+import Chip from '@material-ui/core/Chip';
+//imports from local files
+import SnackBar from "../../../../Components/SnackbarComponent";
+import { postRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import ReactRichEditor from "react-rich-text-editor";
+
+let sendToAll = false;
+
+const useStyles = makeStyles((theme) => ({
+    root: {
+        display: 'flex',
+        justifyContent: 'center',
+        flexWrap: 'wrap',
+        listStyle: 'none',
+        padding: theme.spacing(0.5),
+        margin: 0,
+    },
+    chip: {
+        margin: theme.spacing(0.5),
+    },
+}));
+
+const EmailInputs = (props) => {
+    const classes = useStyles();
+    const [option, setOption] = useState("Todos os usuários"); //labels of the text field 'to'
+    const [index, setIndex] = useState(0); //Used to display something above the text field 'to' depending on what the user clicks
+
+    // Capture th text insert by the user in the fields
+    const [emails, setEmails] = useState(props.email);
+    const [emailsAdress, setEmailsAdress] = useState([]);
+    const [subject, setSubject] = useState("");
+    const [message, setMessage] = useState("");
+
+    const [isSending, setIsSending] = useState(false);
+
+    //Handle snack bar
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    //Controls the state of error in the textfields
+    const [errorInEmails, setErrorInEmail] = useState({
+        error: false,
+        arroba: false,
+        message: "",
+    });
+    const [errorInSubject, setErrorInSubject] = useState({
+        error: false,
+        message: "",
+    });
+
+    const options = [
+        {
+            value: "All",
+            label: "Todos os usuários",
+        },
+        {
+            value: "Roles",
+            label: "Roles/Permissões específicas",
+        },
+        {
+            value: "Emails",
+            label: "1 ou mais emails",
+        },
+    ];
+
+    //Roles of permissions
+    const [roles, setRoles] = useState([
+        {
+            label: "Editor",
+            value: 7,
+            isChecked: false,
+        },
+        {
+            label: "Admin",
+            value: 3,
+            isChecked: false,
+        },
+        {
+            label: "Curador",
+            value: 4,
+            isChecked: false,
+        },
+        {
+            label: "Professor",
+            value: 1,
+            isChecked: false,
+        },
+        {
+            label: "Submetedor",
+            value: 8,
+            isChecked: false,
+        },
+        {
+            label: "Aluno",
+            value: 2,
+            isChecked: false,
+        },
+        {
+            label: "Moderador",
+            value: 5,
+            isChecked: false,
+        },
+        {
+            label: "Parceiro",
+            value: 9,
+            isChecked: false,
+        },
+        {
+            label: "Supervisor",
+            value: 6,
+            isChecked: false,
+        },
+        {
+            label: "Publicador",
+            value: 10,
+            isChecked: false,
+        },
+    ]);
+
+    const handleChange = (e) => {
+        const value = e.target.value;
+        if (value === "All") {
+            sendToAll = true;
+        } else {
+            sendToAll = false;
+        }
+        setOption(value);
+    };
+
+    const handleChangeCheckBox = (i) => {
+        const currState = [...roles];
+        currState[i].isChecked = !currState[i].isChecked;
+        setRoles(currState);
+    };
+
+    const EmailsHandler = (e) => {
+        if (errorInEmails.error)
+            setErrorInEmail({
+                error: false,
+                message: "",
+            });
+        setEmails(e.target.value)
+    };
+
+    const SubjectHandler = (e) => {
+        if (errorInSubject.error) {
+            setErrorInSubject({
+                error: false,
+                message: "",
+            });
+        }
+        setSubject(e.target.value);
+    };
+
+    const OnKeyPressHandler = (key) => {
+        if (key === 13) {
+            if (!isEmpty(emails)) {
+                if (emails.includes("@")) {
+                    const arr = [...emailsAdress];
+                    arr.push(emails);
+                    setEmails("");
+                    setEmailsAdress(arr);
+                } else {
+                    setErrorInEmail({
+                        error: true,
+                        message: "Esse email não contém o caractere @",
+                        arroba: false,
+                    });
+                }
+            } else {
+                setErrorInEmail({
+                    error: true,
+                    message: "Esse campo precisa ser preenchido",
+                    arroba: false,
+                });
+            }
+        }
+    };
+
+    //Delete emails adress from the list to be sent a message
+    const HandleDelete = (i) => {
+        const copyEmail = [...emailsAdress];
+        copyEmail.splice(i, 1);
+        setEmailsAdress(copyEmail);
+    };
+
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    };
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const CleanFields = () => {
+        setMessage("");
+        setSubject("");
+        setEmailsAdress([]);
+    };
+
+    const submitRequest = async () => {
+        // setIsSending(true);
+        const rolesArr = [];
+        roles.map((role) => {
+            if (role.isChecked)
+                rolesArr.push(role.value)
+        })
+        console.log(rolesArr)
+        console.log(sendToAll)
+        const api = `/email`;
+        const body = {
+            "email": {
+                "all_users": sendToAll,
+                "subject": subject,
+                "body": message,
+                "emails": emailsAdress,
+                "roles": rolesArr,
+            },
+        };
+        postRequest(
+            api,
+            body,
+            (data, header) => {
+                HandleSnack(
+                    "O email foi enviado com sucesso",
+                    true,
+                    "success",
+                    "#228B22"
+                );
+                setIsSending(false);
+                CleanFields();
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                setIsSending(false);
+                CleanFields();
+            }
+        )
+    };
+
+    return (
+        <div
+            style={{
+                width: "100%",
+                display: "flex",
+                flexDirection: "column",
+                justifyContent: "space-around",
+            }}
+        >
+            <form
+                style={{
+                    flex: 1,
+                    display: "flex",
+                    flexDirection: "column",
+                }}
+            >
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() =>
+                        setSnackInfo({
+                            message: "",
+                            icon: "",
+                            open: false,
+                            color: "",
+                        })
+                    }
+                />
+
+                <TextField
+                    id="outlined-input"
+                    label="De *"
+                    defaultValue="integrada.contato@mec.gov.br"
+                    variant="outlined"
+                    disabled={true}
+                />
+                <div style={{ height: "1em" }} />
+
+                <TextField
+                    select
+                    label="Para *"
+                    value={option ? option : ""}
+                    onChange={handleChange}
+                    helperText="Por favor, selecione uma das opções"
+                >
+                    {options.map((option, index) => (
+                        <MenuItem
+                            onClick={() => setIndex(index)}
+                            key={option.value}
+                            value={option.value}
+                        >
+                            {option.label}
+                        </MenuItem>
+                    ))}
+                </TextField>
+                <div style={{ height: "1em" }} />
+
+                {index === 0 ? null : index === 1 ? (
+                    <FormGroup style={{ marginBottom: "1em" }}>
+                        {roles.map((role, index) => (
+                            <FormControlLabel
+                                key={index}
+                                control={
+                                    <Checkbox
+                                        checked={role.isChecked}
+                                        onChange={() => handleChangeCheckBox(index)}
+                                        name={role.label}
+                                        color="primary"
+                                    />
+                                }
+                                label={role.label}
+                            />
+                        ))}
+                    </FormGroup>
+                ) : (
+                        <>
+                            <div
+                                style={{
+                                    display: "flex",
+                                    flexDirection: "row",
+                                    flexWrap: "wrap",
+                                    justifyContent: "Space-between",
+                                    marginBottom: "1em"
+                                }}
+                            >
+                                {emailsAdress.map((email, index) => (
+                                    <li key={index} style={{ listStyleType: "none", marginBottom: "0.5em" }}>
+                                        <Chip
+                                            label={email}
+                                            onDelete={() => HandleDelete(index)}
+                                            classes={classes.chip}
+                                        />
+                                    </li>
+                                ))}
+                            </div>
+
+                            <TextField
+                                id="outlined-input"
+                                label="Emails"
+                                rows={1}
+                                error={errorInEmails.error}
+                                helperText={errorInEmails.message}
+                                value={emails}
+                                onKeyPress={(key) => OnKeyPressHandler(key.which)}
+                                onChange={EmailsHandler}
+                                // onBlur={ShowEmails}
+                                placeholder="Digite um email por vez e pressione Enter"
+                                variant="outlined"
+                                style={{ marginBottom: "1em" }}
+                            />
+                        </>
+                    )}
+
+                <TextField
+                    id="outlined-input"
+                    label="Assunto"
+                    value={subject}
+                    error={errorInSubject.error}
+                    helperText={errorInSubject.message}
+                    placeholder="Digite o assunto do email"
+                    onChange={SubjectHandler}
+                    variant="outlined"
+                />
+            </form>
+
+            <div style={{ height: "1em" }} />
+
+            <div style={{ flex: 1 }}>
+                <ReactRichEditor
+                    height={200}
+                    onCodeChange={(word) => {
+                        setMessage(word)
+                    }}
+                    showAll={true}
+                />
+            </div>
+
+            <div style={{ fontSize: 14 }}>
+                * Se você deseja enviar foto da sua máquina, é preciso <a href="mailto:name@email.com">Clicar aqui</a>
+            </div>
+
+            <div style={{ marginTop: 18 }}>
+                <Button
+                    onClick={() => {
+                        submitRequest();
+                    }}
+                    variant="contained"
+                    disabled={isSending}
+                    color="primary"
+                    startIcon={<SendRoundedIcon />}
+                >
+                    {isSending ? <CircularProgress /> : "Enviar"}
+                </Button>
+            </div>
+        </div>
+    );
+};
+
+export default EmailInputs;
diff --git a/src/Admin/Components/Components/Inputs/IntitutionsInputs.js b/src/Admin/Components/Components/Inputs/IntitutionsInputs.js
new file mode 100644
index 0000000000000000000000000000000000000000..10761cc4b2776b2fb8485848eb309687e18a79e1
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/IntitutionsInputs.js
@@ -0,0 +1,320 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from 'react';
+//imports material ui components
+import { TextField, Button } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import SaveIcon from '@material-ui/icons/Save';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import Grid from "@material-ui/core/Grid";
+//imports local files
+import Unauthorized from '../Unauthorized';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//imports services 
+import { putRequest, getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { EditFilter, GetAData } from '../../../Filters';
+//Routers
+import { Link } from 'react-router-dom';
+
+let id;
+
+const EditInstitution = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+
+    const [name, setName] = useState();
+    const [description, setDescription] = useState();
+    const [adress, setAdress] = useState();
+    const [city, setCity] = useState();
+    const [country, setCountry] = useState();
+
+    //Used to display circle progress indicator when user click to save
+    const [isLoading, setIsLoading] = useState(false);
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: '',
+    })
+
+    const [errorInCountry, setErrorInCountry] = useState({
+        error: false,
+        message: '',
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+        setName(e.target.value)
+    }
+    const DescriptionHandler = (e) => {
+        setDescription(e.target.value)
+    }
+    const AdressHandler = (e) => {
+        setAdress(e.target.value)
+    }
+    const CityHandler = (e) => {
+        setCity(e.target.value)
+    }
+    const CountryHandler = (e) => {
+        if (errorInCountry.error) {
+            setErrorInCountry({
+                error: false,
+                message: ''
+            })
+        }
+        setCountry(e.target.value)
+    }
+
+    // verify if the given text is empty
+    const isEmpty = (text) => {
+        return text ? false : true;
+    }
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    //Handle submit 
+    async function onSubmit() {
+        setIsLoading(true)
+        const api = EditFilter('institutions', id)
+        const body = {
+            "institution": {
+                'name': name,
+                'description': description,
+                'address': adress,
+                'city': city,
+                'country': country,
+            }
+        }
+        putRequest(
+            api,
+            body,
+            (data) => {
+                if (data.id)
+                    HandleSnack('A instituição foi criada com sucesso!', true, 'success', '#228B22')
+                else {
+                    if (data.name) {
+                        let errorName = "";
+                        data.name.map((err) => (
+                            errorName = errorName + err + " e "
+                        ))
+                        setErrorInName({
+                            error: true,
+                            message: errorName
+                        })
+                    }
+                }
+                setIsLoading(false)
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'Nome',
+            value: name,
+            required: true,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event)
+        },
+        {
+            label: 'Descrição',
+            value: description,
+            required: false,
+
+            onChange: (event) => DescriptionHandler(event)
+        },
+        {
+            label: 'Endereço',
+            value: adress,
+            required: false,
+
+            onChange: (event) => AdressHandler(event)
+        },
+        {
+            label: 'Cidade',
+            value: city,
+            required: false,
+            onChange: (event) => CityHandler(event)
+        },
+        {
+            label: 'País',
+            value: country,
+            required: true,
+            error: errorInCountry.error,
+            errorMessage: errorInCountry.message,
+            onChange: (event) => CountryHandler(event)
+        }
+    ]
+
+    useEffect(() => {
+        getRequest(
+            GetAData("institutions", match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setName(data.name)
+                setDescription(data.description)
+                setAdress(data.adress)
+                setCity(data.city)
+                setCountry(data.country)
+                id = data.id
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(error);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div> Erro... </div>
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+                    <Grid container xs={12} justify="space-between" alignItems="center" alignContent="center">
+                        <Grid item>
+                            <Typography
+                                variant='h4'
+                                color="inherit"
+                                gutterBottom
+                            >
+                                {name}
+                            </Typography>
+                        </Grid>
+
+                        <Grid item>
+                            <Link style={{ textDecoration: 'none' }} to={`/admin/intitutions`}>
+                                <Button
+                                    startIcon={<ListRoundedIcon />}
+                                    color="primary"
+                                    variant="outlined"
+                                >
+                                    Listar
+                                </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <div>
+                        <div>
+                            <form style={{ display: 'flex', flexDirection: 'column' }}>
+                                {fields.map((field, index) => (
+                                    <TextField
+                                        key={index}
+                                        required={field.required}
+                                        error={field.error}
+                                        helperText={field.error ? field.errorMessage : ''}
+                                        style={{ width: '250px', marginBottom: '1em' }}
+                                        label={field.label}
+                                        value={field.value}
+                                        onChange={field.onChange}
+                                        type="search"
+                                        multiline={true}
+                                    />
+                                ))}
+                            </form>
+                        </div>
+                        <div>
+                            <Button
+                                onClick={() => {
+                                    onSubmit();
+                                }}
+                                variant="contained"
+                                color="primary"
+                                disabled={isLoading}
+                                startIcon={isLoading ? null : <SaveIcon />}
+                            >
+                                {
+                                    isLoading ? <CircularProgress size={24} /> : 'Salvar'
+                                }
+                            </Button>
+                        </div>
+                    </div>
+
+                </CardContent>
+            </Card>
+        );
+    } else {
+        return <Unauthorized />
+    }
+}
+
+export default EditInstitution;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Inputs/NoteVarInputs.js b/src/Admin/Components/Components/Inputs/NoteVarInputs.js
new file mode 100644
index 0000000000000000000000000000000000000000..3043cd68252bdfd1ce0f6ab6eaf3bfdd07d0b8ae
--- /dev/null
+++ b/src/Admin/Components/Components/Inputs/NoteVarInputs.js
@@ -0,0 +1,320 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect, useContext } from 'react';
+//imports material ui components
+import { TextField, Button } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import SaveIcon from '@material-ui/icons/Save';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import Typography from "@material-ui/core/Typography";
+import ListRoundedIcon from "@material-ui/icons/ListRounded";
+import Grid from '@material-ui/core/Grid';
+//imports local files
+import SnackBar from '../../../../Components/SnackbarComponent';
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//imports services 
+import { getRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { EditFilter, GetAData } from '../../../Filters';
+//Routers
+import { Link } from 'react-router-dom';
+import Unauthorized from '../Unauthorized';
+
+const NoteVarInputs = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+
+    const [isLoading, setIsLoading] = useState(false);
+    const id = match.params.id
+    const [name, setName] = useState()
+    const [code, setCode] = useState()
+    const [weight, setWeight] = useState()
+
+    const [errorInName, setErrorInName] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [errorInCode, setErrorInCode] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [errorInWeight, setErrorInWeight] = useState({
+        error: false,
+        message: ''
+    })
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const NameHandler = (e) => {
+        if (errorInName.error) {
+            setErrorInName({
+                error: false,
+                message: ''
+            })
+        }
+        setName(e.target.value)
+    }
+
+    const CodeHandler = (e) => {
+        if (errorInCode.error) {
+            setErrorInCode({
+                error: false,
+                message: ''
+            })
+        }
+        setCode(e.target.value)
+    }
+
+    const WeightHandler = (e) => {
+        if (errorInWeight.error) {
+            setErrorInWeight({
+                error: false,
+                message: ''
+            })
+        }
+        setWeight(e.target.value)
+    }
+
+    //Verify if the string is empty
+    const isEmpty = (text) => {
+        return text.length === 0 ? true : false;
+    }
+
+    // Fields
+    const fields = [
+        {
+            label: 'ID',
+            value: id,
+            default: true,
+            type: 'text'
+        },
+        {
+            label: 'Código',
+            value: code,
+            error: errorInCode.error,
+            errorMessage: errorInCode.message,
+            onChange: (event) => CodeHandler(event),
+            default: true,
+            type: 'text'
+        },
+        {
+            label: 'Nome',
+            value: name,
+            error: errorInName.error,
+            errorMessage: errorInName.message,
+            onChange: (event) => NameHandler(event),
+            default: false,
+            type: 'text',
+        },
+        {
+            label: 'Peso',
+            value: weight,
+            error: errorInWeight.error,
+            errorMessage: errorInWeight.message,
+            onChange: (event) => WeightHandler(event),
+            default: false,
+            type: 'number',
+        }
+    ]
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const onSubmit = async () => {
+        setIsLoading(true)
+        const api = EditFilter('scores', id)
+        const body = {
+            "score": {
+                'name': name,
+                'code': code,
+                'weight': weight
+            }
+        }
+        putRequest(
+            api,
+            body,
+            (data) => {
+                if (data.id)
+                    HandleSnack('A variável de nota foi atualizada com sucesso!', true, 'success', '#228B22')
+                else {
+                    if (data.name) {
+                        let errorName = "";
+                        data.name.map((err) => (
+                            errorName = errorName + err + " e "
+                        ))
+                        setErrorInName({
+                            error: true,
+                            message: errorName
+                        })
+                    }
+                    if(data.weight){
+                        let weightError = ""; 
+                        data.weight.map((err) => (
+                            weightError = weightError + err + " e "
+                        ))
+                        setErrorInWeight({
+                            error: true, 
+                            message : weightError
+                        })
+                    }
+                }
+                setIsLoading(false)
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                setIsLoading(false)
+            }
+        )
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+
+    useEffect(() => {
+        getRequest(
+            GetAData("scores", match.params.id),
+            (data, header) => {
+                setIsLoaded(true);
+                setName(data.name)
+                setCode(data.code)
+                setWeight(data.weight)
+            },
+            (error) => {
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Houve um erro...</div>
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        return (
+            <Card>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() => setSnackInfo({
+                        message: '',
+                        icon: '',
+                        open: false,
+                        color: ''
+                    })}
+                />
+                <CardContent>
+
+                    <Grid container xs={12} justify="space-between" alignItems="center" alignContent="center">
+                        <Grid>
+                            <Typography
+                                variant='h4'
+                                color="inherit"
+                                gutterBottom
+                            >
+                                {name}
+                            </Typography>
+                        </Grid>
+
+                        <Grid>
+                            <Link style={{ textDecoration: 'none' }} to={`/admin/noteVars`}>
+                                <Button
+                                    startIcon={<ListRoundedIcon />}
+                                    color="primary"
+                                    variant="outlined"
+                                >
+                                    Listar
+                            </Button>
+                            </Link>
+                        </Grid>
+                    </Grid>
+
+                    <form style={{ display: 'flex', flexDirection: 'column' }}>
+                        {fields.map((field, index) => (
+                            <TextField
+                                key={index}
+                                error={field.error}
+                                disabled={field.default}
+                                helperText={field.error ? field.errorMessage : ''}
+                                style={{ width: '250px', marginBottom: '1em' }}
+                                label={field.label}
+                                value={field.value}
+                                onChange={field.onChange}
+                                type={field.type}
+                                multiline={true}
+                            />
+                        ))}
+                    </form>
+
+                    <div>
+                        <Button
+                            onClick={() => {
+                                onSubmit();
+                            }}
+                            variant="contained"
+                            color="primary"
+                            disabled={isLoading}
+                            startIcon={isLoading ? null : <SaveIcon />}
+                        >
+                            {
+                                isLoading ? <CircularProgress size={24} /> : 'Salvar'
+                            }
+                        </Button>
+                    </div>
+
+                </CardContent>
+            </Card>
+        )
+    } else return <Unauthorized />
+}
+
+export default NoteVarInputs;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/MobileComponents/SimpleList.js b/src/Admin/Components/Components/MobileComponents/SimpleList.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7afb24bc6b5a48f775d7561b71ceb57fe65b392
--- /dev/null
+++ b/src/Admin/Components/Components/MobileComponents/SimpleList.js
@@ -0,0 +1,123 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+
+import React from "react";
+import { makeStyles } from "@material-ui/core/styles";
+import clsx from "clsx";
+import Card from "@material-ui/core/Card";
+import CardHeader from "@material-ui/core/CardHeader";
+import CardContent from "@material-ui/core/CardContent";
+import Collapse from "@material-ui/core/Collapse";
+import Avatar from "@material-ui/core/Avatar";
+import IconButton from "@material-ui/core/IconButton";
+import Typography from "@material-ui/core/Typography";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
+import { Link } from "react-router-dom";
+
+const useStyles = makeStyles((theme) => ({
+    expand: {
+        transform: "rotate(0deg)",
+        marginLeft: "auto",
+        transition: theme.transitions.create("transform", {
+            duration: theme.transitions.duration.shortest,
+        }),
+    },
+    expandOpen: {
+        transform: "rotate(180deg)",
+    },
+    displayColumn: {
+        display: "flex",
+        flexDirection: "column",
+        marginBottom: "1em",
+    },
+    subTitle: {
+        fontSize: 14,
+        fontWeight: "500",
+    },
+}));
+
+export default function MobileList(props) {
+    const classes = useStyles();
+    const [expanded, setExpanded] = React.useState(false);
+
+    const handleExpandClick = () => {
+        setExpanded(!expanded);
+    };
+
+    return (
+        <Card className={classes.root}>
+            <CardHeader
+                avatar={
+                    <Avatar
+                        aria-label="avatar"
+                        style={
+                            props.backColor
+                                ? { backgroundColor: props.backColor }
+                                : { backgroundColor: "grey" }
+                        }
+                    >
+                        {props.avatar}
+                    </Avatar>
+                }
+                title={props.title}
+                subheader={props.subtitle}
+                action={
+                    <>
+                        {
+                            props.href ?
+                                <Link to={props.href}>
+                                    <IconButton
+                                        onClick={props.reset}
+                                    >
+                                        <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                                    </IconButton>
+                                </Link> : null
+                        }
+
+                        <IconButton
+                            className={clsx(classes.expand, {
+                                [classes.expandOpen]: expanded,
+                            })}
+                            onClick={handleExpandClick}
+                            aria-expanded={expanded}
+                            aria-label="show more"
+                        >
+                            <ExpandMoreIcon />
+                        </IconButton>
+                    </>
+                }
+            />
+            <Collapse in={expanded} timeout="auto" unmountOnExit>
+                <CardContent>
+                    {props.data.map((info, index) => (
+                        <div className={classes.displayColumn} key={index}>
+                            <Typography color="initial" className={classes.subTitle}>
+                                {info.title}
+                            </Typography>
+                            <Typography color="textSecondary">
+                                {info.subtitle}
+                            </Typography>
+                        </div>
+                    ))}
+                </CardContent>
+            </Collapse>
+        </Card>
+    );
+}
diff --git a/src/Admin/Components/Components/Table.js b/src/Admin/Components/Components/Table.js
new file mode 100644
index 0000000000000000000000000000000000000000..2da01f137d05e54774ab9ee595070ca6b1003386
--- /dev/null
+++ b/src/Admin/Components/Components/Table.js
@@ -0,0 +1,80 @@
+import React from 'react';
+// material ui componets
+import Table from '@material-ui/core/Table';
+import { withStyles, makeStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import TableCell from '@material-ui/core/TableCell';
+import TableContainer from '@material-ui/core/TableContainer';
+import TableHead from '@material-ui/core/TableHead';
+import TableRow from '@material-ui/core/TableRow';
+import Paper from '@material-ui/core/Paper';
+import FilterListRoundedIcon from '@material-ui/icons/FilterListRounded';
+import { IconButton } from '@material-ui/core';
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const useStyles = makeStyles({
+    table: {
+        minWidth: 700,
+        width : "100%"
+    },
+    root: {
+        minWidth: 275,
+        boxShadow: '2px 2px 1px #A9A9A9'
+    },
+    bullet: {
+        display: 'inline-block',
+        margin: '0 2px',
+        transform: 'scale(0.8)',
+    },
+    title: {
+        fontSize: 28,
+        fontWeight: "500"
+    },
+    pos: {
+        marginBottom: 12,
+    },
+});
+
+
+const TableData = (props) => {
+    const classes = useStyles();
+    return (
+        <TableContainer component={Paper}>
+            <Table className={classes.table} aria-label="customized table">
+                <TableHead>
+                    <TableRow>
+                        {
+                            props.top.map((top, index) => (
+                                index === 0 ?
+                                    <StyledTableCell key={index}>
+                                        <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>
+                                            {top}
+                                            {
+                                                props.onIconPressed === undefined ? <div></div> : <IconButton onClick={props.onIconPressed} color='primary'>
+                                                    <FilterListRoundedIcon style={{ color: 'white' }} />
+                                                </IconButton>
+                                            }
+                                        </div>
+                                    </StyledTableCell>
+                                    :
+                                    <StyledTableCell align="right" key={index}>{top}</StyledTableCell>
+                            ))
+                        }
+                    </TableRow>
+                </TableHead>
+                {props.children}
+            </Table>
+        </TableContainer>
+    );
+}
+
+export default TableData; 
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Unauthorized.js b/src/Admin/Components/Components/Unauthorized.js
new file mode 100644
index 0000000000000000000000000000000000000000..decfa6b5aa2504d3aedb0199faa97c66b84025d0
--- /dev/null
+++ b/src/Admin/Components/Components/Unauthorized.js
@@ -0,0 +1,41 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, {useState} from 'react';
+import SnackBar from '../../../Components/SnackbarComponent'; 
+import { Link } from 'react-router-dom';
+const Unauthorized = () => {
+
+    const [openSnack, setOpenSnack] = useState(true);
+
+    return (
+        <div style={{ textAlign: 'center' }}>
+            <SnackBar
+                severity='warning'
+                text='Você não tem as permissões necessárias'
+                snackbarOpen={openSnack}
+                handleClose={() => setOpenSnack(false)}
+            />
+            <Link to='/'>
+                Redirecionar para home
+            </Link>
+        </div>
+    );
+}
+
+export default Unauthorized;
\ No newline at end of file
diff --git a/src/Admin/Components/Components/Welcome.js b/src/Admin/Components/Components/Welcome.js
new file mode 100644
index 0000000000000000000000000000000000000000..325fbe55aa2ff50392f12434c3c9528689149d44
--- /dev/null
+++ b/src/Admin/Components/Components/Welcome.js
@@ -0,0 +1,38 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React from 'react'; 
+import {Styles} from '../Styles/WelcomeStyle';
+
+// This file is a component that says welcome to the user
+
+const Welcome = () => { 
+    const classes = Styles();
+    return(
+        <div style={classes.welcomeContainer}>
+            <p style={classes.welcomeTitle}>
+                Seja bem vindo ao portal do administrador
+            </p> 
+            <p>
+                O site ainda está em desenvolvimento, qualquer indicação ou reclamação enviar ao email portalmec_tec@inf.ufpr.br .
+            </p>
+        </div>
+    );  
+} 
+
+export default Welcome;
\ No newline at end of file
diff --git a/src/Admin/Components/Styles/DataCard.js b/src/Admin/Components/Styles/DataCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..17083da50639dd57f55aaedbfd45f1f9a825735c
--- /dev/null
+++ b/src/Admin/Components/Styles/DataCard.js
@@ -0,0 +1,56 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/ 
+
+import { makeStyles } from "@material-ui/core/styles";
+
+const useStyles = makeStyles({
+    table: {
+        minWidth: 700,
+    },
+    root: {
+        minWidth: 900,
+        boxShadow: "2px 2px 1px #A9A9A9",
+    },
+    title: {
+        fontSize: 28,
+        fontWeight: "500",
+    },
+    subTitle: {
+        fontSize: 14,
+        fontWeight: "500",
+    },
+    pos: {
+        marginBottom: 12,
+    },
+    displayRow: {
+        display: "flex",
+        flexDirection: "row",
+        justifyContent: "space-between",
+        alignItems: "center",
+    },
+    displayColumn: {
+        display: "flex",
+        flexDirection: "column",
+        marginBottom: "1em",
+    },
+    marginTop : {
+        marginTop : '1em',
+    }
+}); 
+
+export { useStyles };
\ No newline at end of file
diff --git a/src/Admin/Components/Styles/WelcomeStyle.js b/src/Admin/Components/Styles/WelcomeStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..11364da864132b3ad83519ac3eaff9704ac81b7d
--- /dev/null
+++ b/src/Admin/Components/Styles/WelcomeStyle.js
@@ -0,0 +1,33 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+const Styles = () => ({
+    welcomeContainer : { 
+        padding : '1em 1em',
+        borderRadius : '22px', 
+        backgroundColor : 'white',  
+        boxShadow : '2px 2px 1px #A9A9A9'
+    },
+    welcomeTitle : {
+        fontWeight : 'bold', 
+        fontSize : '20px',
+    }
+});   
+
+export { Styles }; 
+
diff --git a/src/Admin/Filters.js b/src/Admin/Filters.js
new file mode 100644
index 0000000000000000000000000000000000000000..a36451c639ff53392fc48d64abdd84499899d3dc
--- /dev/null
+++ b/src/Admin/Filters.js
@@ -0,0 +1,54 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+export function Url(type, filter, page , sort) {
+    const api = `/${type}?filter={${filter}}&page=${page}&range=[0,9]&results_per_page=10&sort=["id","${sort}"]`
+    return (api)
+} 
+
+export function GetOneOfAllUrl(type , filter){
+    const api = `/${type}?filter={${filter}}`
+    return (api)
+}
+
+export function MethodsToComplain(type , id, meth){
+    const api = `/${type}/${id}/${meth}`;
+    return (api)
+}
+
+export function GetAll(type){
+    const api = `/${type}`
+    return (api)
+}
+
+
+export function GetAData(type , id){
+    const api = `/${type}/${id}`
+    return (api)
+}
+
+
+export function EditFilter(type , id){
+    const api = `/${type}/${id}` 
+    return (api)
+} 
+
+export function DeleteFilter(type , id){
+    const api = `/${type}/${id}` 
+    return (api)
+}
\ No newline at end of file
diff --git a/src/Admin/Pages/AdminLabelTabs/LabelTabs.js b/src/Admin/Pages/AdminLabelTabs/LabelTabs.js
new file mode 100644
index 0000000000000000000000000000000000000000..8209b2de8381f09f107fe14e3e421a17c3272afd
--- /dev/null
+++ b/src/Admin/Pages/AdminLabelTabs/LabelTabs.js
@@ -0,0 +1,92 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+//This file has the labels of the left menu navigation from admin page
+
+const TabsItens = [
+    {
+        label: "Home", 
+        href: '/admin/home'
+    },
+    {
+        label: 'Coleções',
+        href: '/admin/Collections',
+    },
+    {
+        label: "Atividades",
+        href: '/admin/activities',
+    },
+    {
+        label: "Dúvidas da comunidade",
+        href: '/admin/CommunityQuestions'
+    },
+    {
+        label: "Instituições",
+        href: '/admin/intitutions'
+    },
+    {
+        label: "Linguagens",
+        href: '/admin/languages',
+    },
+    {
+        label: "Objetos educacionais",
+        href: "/admin/learningObjects",
+    },
+    {
+        label: "Rating",
+        href : '/admin/Ratings'
+    },
+    {
+        label: "Permissões do usuário",
+        href: "/admin/permissions",
+    },
+    {
+        label: "Variáveis de nota", 
+        href:'/admin/noteVars'
+    },
+    {
+        label: "Perguntas curadoria",
+        href: "/admin/Questions"
+    },
+    {
+        label: "Aprovação de professores",
+        href: "/admin/users/teacher_requests"
+    },
+    {
+        label: "Usuários",
+        href : "/admin/usersList"
+    },
+    {
+        label: "Usuários bloqueados",
+        href : "/admin/BlockedUsers"
+    },
+    {
+        label: "Denúncias",
+        href: "/admin/complaints",
+    },
+    {
+        label: "Enviar email",
+        href:'/admin/sendEmail/none'
+    },
+    {
+        label: "Métricas",
+        href:'/admin/inframe',
+    },
+];
+
+export { TabsItens };
diff --git a/src/Admin/Pages/Pages/SubPages/Activity.js b/src/Admin/Pages/Pages/SubPages/Activity.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a6e9220d8adc0596a297ce8fa8aabcef86e1528
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Activity.js
@@ -0,0 +1,530 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState } from "react";
+import moment from 'moment';
+//imports from local files
+import TableData from "../../../Components/Components/Table";
+import SnackBar from "../../../../Components/SnackbarComponent";
+import { Url } from "../../../Filters";
+import { getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//imports from material ui
+import { withStyles } from "@material-ui/core/styles";
+import TableBody from "@material-ui/core/TableBody";
+import TableCell from "@material-ui/core/TableCell";
+import MenuItem from "@material-ui/core/MenuItem";
+import TableRow from "@material-ui/core/TableRow";
+import TextField from "@material-ui/core/TextField";
+import IconButton from "@material-ui/core/IconButton";
+import { Button, Typography, Paper, Grid } from "@material-ui/core";
+import CircularProgress from "@material-ui/core/CircularProgress";
+import AddRoundedIcon from "@material-ui/icons/AddRounded";
+import UpdateRoundedIcon from "@material-ui/icons/UpdateRounded";
+import FilterListRoundedIcon from "@material-ui/icons/FilterListRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import AllOutIcon from "@material-ui/icons/AllOut";
+//routers
+import { Link } from 'react-router-dom';
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import styled from "styled-components"
+
+let currPage = 0;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        "&:nth-of-type(odd)": {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const Activity = () => {
+    const ADD_ONE_LENGHT = [""];
+    const TOP_LABELS = [
+        "CRIADO EM",
+        "DONO(A)",
+        "ATIVIDADE",
+        "PRIVACIDADE",
+        "VISUALIZAR",
+    ]; //Labels from Table
+    const WINDOW_WIDTH = window.innerWidth
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false); //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+
+    const [showFilter, setShowFilter] = useState(false);
+
+    const [option, setOption] = useState("Todos os usuários"); //labels of the text field 'to'
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    const options = [
+        {
+            value: "private",
+            label: "Privado",
+        },
+        {
+            value: "public",
+            label: "Público",
+        },
+    ];
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    //handle load more items
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true);
+        getRequest(api,
+            (data, header) => {
+                const arrData = [...data];
+                if (arrData.length === 0) {
+                    HandleSnack(
+                        "Não há mais dados para serem carregados",
+                        true,
+                        "warning",
+                        "#FFC125"
+                    );
+                } else {
+                    const arrItems = [...items];
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items
+                    const arrResult = arrItems.concat(arrData);
+                    setItems(arrResult.concat(ADD_ONE_LENGHT));
+                }
+                setIsLoadingMoreItems(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoadingMoreItems(false);
+            }
+        )
+    };
+
+    // handle update list data
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true);
+        getRequest(api,
+            (data, header) => {
+                HandleSnack(
+                    "A lista de dados foi atualizada",
+                    true,
+                    "success",
+                    "#228B22"
+                );
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT))
+                setIsUpdating(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsUpdating(false);
+            }
+        )
+    };
+
+    const handleChange = (e) => {
+        setIsLoaded(false)
+        const value = e.target.value;
+        currPage = 0;
+        setOption(value);
+
+        getRequest(Url("activities", `"privacy" : "${value}"`, `${currPage}`, "DESC"),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        )
+    };
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url("activities", "", `${currPage}`, "DESC"),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+
+        if (WINDOW_WIDTH <= 758) {
+            return <>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() =>
+                        setSnackInfo({
+                            message: "",
+                            icon: "",
+                            open: false,
+                            color: "",
+                        })
+                    }
+                />
+
+                <Paper style={{ padding: "1em" }}>
+                    <Grid container spacing={3} direction="row" alignItems="center">
+                        <Grid item xs={6}>
+                            <Typography variant="h4">Atividades</Typography>
+                        </Grid>
+                        <Grid
+                            item
+                            xs={6}
+                        >
+                            <Grid container justify="flex-end" spacing={3}>
+                                <Grid item>
+                                    <Button
+                                        variant="contained"
+                                        color="secondary"
+                                        disabled={isUpdating}
+                                        onClick={() => {
+                                            currPage = 0;
+                                            UpdateHandler(
+                                                Url("activities", "", `${currPage}`, "DESC")
+                                            );
+                                        }}
+                                        startIcon={<UpdateRoundedIcon />}
+                                    >
+                                        {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                    </Button>
+                                </Grid>
+                                <Grid item>
+                                    <Button
+                                        variant="contained"
+                                        color="secondary"
+                                        onClick={() => {
+                                            setShowFilter(!showFilter);
+                                        }}
+                                        startIcon={<FilterListRoundedIcon />}
+                                    >
+                                        Filtrar
+                                </Button>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Grid>
+
+                    {showFilter ? (
+                        <>
+                            <div style={{ height: "1em" }}></div>
+
+                            <div style={{ alignSelf: "flex-end" }}>
+                                <TextField
+                                    select
+                                    label="Filtro"
+                                    value={option ? option : ""}
+                                    onChange={handleChange}
+                                    helperText="Por favor, selecione uma das opções"
+                                >
+                                    {options.map((option, index) => (
+                                        <MenuItem
+                                            key={option.value}
+                                            value={option.value}
+                                        >
+                                            {option.label}
+                                        </MenuItem>
+                                    ))}
+                                </TextField>
+                            </div>
+                        </>
+                    ) : null}
+                </Paper>
+
+                <div style={{ height: "2em" }}></div>
+
+                {items.map((row, index) =>
+                    index === items.length - 1 ? (
+                        <StyledDivButton>
+                            <Button
+                                key={index}
+                                color="primary"
+                                variant="text"
+                                // disabled={isLoadingMoreItems}
+                                startIcon={<AddRoundedIcon />}
+                                disabled={isLoadingMoreItems}
+                                onClick={() => {
+                                    currPage++;
+                                    if (showFilter) {
+                                        LoadMoreItens(
+                                            Url("activities", `"privacy" : "${option}"`, `${currPage}`, "DESC")
+                                        );
+                                    } else {
+                                        LoadMoreItens(
+                                            Url("activities", "", `${currPage}`, "DESC")
+                                        );
+                                    }
+                                }}
+                            >
+                                {isLoadingMoreItems ? (
+                                    <CircularProgress size={24} />
+                                ) : (
+                                        "Carregar mais itens"
+                                    )}
+                            </Button>
+                        </StyledDivButton>
+                    ) : (
+                            <>
+                                <MobileList
+                                    key={index}
+                                    title={row.id}
+                                    subtitle={row.privacy}
+                                    backColor={"#673ab7"}
+                                    avatar={<AllOutIcon />}
+                                    href={`/admin/activity/${row.id}`}
+                                    reset={() => {
+                                        currPage = 0;
+                                    }}
+                                    data={
+                                        [
+                                            {
+                                                title: "Dono(a)",
+                                                subtitle: row.owner ? row.owner.name : "Sem dados"
+
+                                            },
+                                            {
+                                                title: "Criado em",
+                                                subtitle: DisplayDate(row.created_at)
+                                            },
+                                            {
+                                                title: "Atividade",
+                                                subtitle: row.activity
+                                            }
+                                        ]
+                                    }
+                                />
+                                <div style={{ height: "0.5em" }} />
+                            </>
+                        )
+                )}
+            </>
+        }
+        else {
+            return <>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() =>
+                        setSnackInfo({
+                            message: "",
+                            icon: "",
+                            open: false,
+                            color: "",
+                        })
+                    }
+                />
+
+                <Paper style={{ padding: "1em" }}>
+                    <Grid container spacing={3} direction="row" alignItems="center">
+                        <Grid item xs={6}>
+                            <Typography variant="h4">Atividades</Typography>
+                        </Grid>
+                        <Grid
+                            item
+                            xs={6}
+                        >
+                            <Grid container justify="flex-end" spacing={3}>
+                                <Grid item>
+                                    <Button
+                                        variant="contained"
+                                        color="secondary"
+                                        disabled={isUpdating}
+                                        onClick={() => {
+                                            currPage = 0;
+                                            UpdateHandler(
+                                                Url("activities", "", `${currPage}`, "DESC")
+                                            );
+                                        }}
+                                        startIcon={<UpdateRoundedIcon />}
+                                    >
+                                        {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                    </Button>
+                                </Grid>
+                                <Grid item>
+                                    <Button
+                                        variant="contained"
+                                        color="secondary"
+                                        onClick={() => {
+                                            setShowFilter(!showFilter);
+                                        }}
+                                        startIcon={<FilterListRoundedIcon />}
+                                    >
+                                        Filtrar
+                                </Button>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Grid>
+
+                    {showFilter ? (
+                        <>
+                            <div style={{ height: "1em" }}></div>
+
+                            <div style={{ alignSelf: "flex-end" }}>
+                                <TextField
+                                    select
+                                    label="Filtro"
+                                    value={option ? option : ""}
+                                    onChange={handleChange}
+                                    helperText="Por favor, selecione uma das opções"
+                                >
+                                    {options.map((option, index) => (
+                                        <MenuItem
+                                            key={option.value}
+                                            value={option.value}
+                                        >
+                                            {option.label}
+                                        </MenuItem>
+                                    ))}
+                                </TextField>
+                            </div>
+                        </>
+                    ) : null}
+                </Paper>
+
+                <div style={{ height: "2em" }}></div>
+
+                <TableData top={TOP_LABELS}>
+                    <TableBody>
+                        {items.map((row, index) =>
+                            index === items.length - 1 ? (
+                                <StyledTableRow key={index} style={{ padding: "1em" }}>
+                                    {/* Button to load more data */}
+                                    <StyledTableCell>
+                                        <Button
+                                            color="primary"
+                                            variant="text"
+                                            // disabled={isLoadingMoreItems}
+                                            startIcon={<AddRoundedIcon />}
+                                            disabled={isLoadingMoreItems}
+                                            onClick={() => {
+                                                currPage++;
+                                                if (showFilter) {
+                                                    LoadMoreItens(
+                                                        Url("activities", `"privacy" : "${option}"`, `${currPage}`, "DESC")
+                                                    );
+                                                } else {
+                                                    LoadMoreItens(
+                                                        Url("activities", "", `${currPage}`, "DESC")
+                                                    );
+                                                }
+                                            }}
+                                        >
+                                            {isLoadingMoreItems ? (
+                                                <CircularProgress size={24} />
+                                            ) : (
+                                                    "Carregar mais itens"
+                                                )}
+                                        </Button>
+                                    </StyledTableCell>
+                                </StyledTableRow>
+                            ) : (
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">
+                                            {DisplayDate(row.created_at)}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {
+                                                row.owner ? row.owner.name : ""
+                                            }
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {row.activity}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">{row.privacy}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Link to={`/admin/activity/${row.id}`}>
+                                                <IconButton onClick={() => { currPage = 0 }}>
+                                                    <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                                                </IconButton>
+                                            </Link>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                                )
+                        )}
+                    </TableBody>
+                </TableData>
+            </>
+        }
+    }
+};
+export default Activity;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/AproveTeacher.js b/src/Admin/Pages/Pages/SubPages/AproveTeacher.js
new file mode 100644
index 0000000000000000000000000000000000000000..40359292c8b3fd08e100b1067992e7b4301f6988
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/AproveTeacher.js
@@ -0,0 +1,911 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState, useContext } from "react";
+import moment from "moment";
+//imports from local files
+import TableData from "../../../Components/Components/Table";
+import SnackBar from "../../../../Components/SnackbarComponent";
+import { Url } from "../../../Filters";
+import { Store } from "../../../../Store";
+import LoadingSpinner from "../../../../Components/LoadingSpinner";
+import {
+    getRequest,
+    postRequest,
+} from "../../../../Components/HelperFunctions/getAxiosConfig";
+//imports from material ui
+import { withStyles } from "@material-ui/core/styles";
+import TableBody from "@material-ui/core/TableBody";
+import TableCell from "@material-ui/core/TableCell";
+import MenuItem from "@material-ui/core/MenuItem";
+import TableRow from "@material-ui/core/TableRow";
+import TextField from "@material-ui/core/TextField";
+import IconButton from "@material-ui/core/IconButton";
+import { Button, Typography, Paper, Grid, Zoom } from "@material-ui/core";
+import CircularProgress from "@material-ui/core/CircularProgress";
+import AddRoundedIcon from "@material-ui/icons/AddRounded";
+import UpdateRoundedIcon from "@material-ui/icons/UpdateRounded";
+import FilterListRoundedIcon from "@material-ui/icons/FilterListRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import CheckRoundedIcon from "@material-ui/icons/CheckRounded";
+import CloseRoundedIcon from "@material-ui/icons/CloseRounded";
+//routers
+import { Link } from "react-router-dom";
+import Unauthorized from "../../../Components/Components/Unauthorized";
+import styled from "styled-components";
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList";
+import { apiDomain } from '../../../../env';
+import noAvatar from "../../../../img/default_profile.png";
+import EmailRoundedIcon from '@material-ui/icons/EmailRounded';
+
+let currPage = 0;
+let currStateFilter = "requested";
+let currNameFilter = "";
+let currEmailFilter = "";
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        "&:nth-of-type(odd)": {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const AproveTeacher = () => {
+    const { state, dispatch } = useContext(Store);
+    const WINDOW_WIDTH = window.innerWidth;
+
+    const ADD_ONE_LENGHT = [""];
+    const TOP_LABELS = [
+        "ESTADO DO PEDIDO",
+        "ID",
+        "NOME",
+        "EMAIL",
+        "PEDIDO EM(MM/DD/YYYY)",
+        "VISUALIZAR",
+        "AÇÕES",
+    ]; //Labels from Table
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false); //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+
+    const [showFilter, setShowFilter] = useState(false);
+
+    const [option, setOption] = useState("requested");
+    const [name, setName] = useState("");
+    const [email, setEmail] = useState("");
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    const StateOptions = [
+        { id: "requested", name: "Pendente" },
+        { id: "accepted", name: "Aceito" },
+        { id: "rejected", name: "Rejeitado" },
+    ];
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === "admin" || roles[i].name === "editor")
+                    canUserEdit = true;
+        } else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    };
+
+    //handle load more items
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true);
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data];
+                if (arrData.length === 0) {
+                    HandleSnack(
+                        "Não há mais dados para serem carregados",
+                        true,
+                        "warning",
+                        "#FFC125"
+                    );
+                } else {
+                    const arrItems = [...items];
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items
+                    const arrResult = arrItems.concat(arrData);
+                    setItems(arrResult.concat(ADD_ONE_LENGHT));
+                }
+                setIsLoadingMoreItems(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoadingMoreItems(false);
+            }
+        );
+    };
+
+    // handle update list data
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true);
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack(
+                    "A lista de dados foi atualizada",
+                    true,
+                    "success",
+                    "#228B22"
+                );
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsUpdating(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsUpdating(false);
+            }
+        );
+    };
+
+    const handleChange = (e, type) => {
+        const value = e.target.value;
+        setOption(value);
+    };
+
+    const ApplyFilter = (id, type) => {
+        currStateFilter = id;
+        currPage = 0;
+        getRequest(
+            Url(
+                "users",
+                `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${email}"`,
+                `${currPage}`,
+                "DESC"
+            ),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        );
+    };
+
+    const NameHandler = (e) => {
+        currPage = 0;
+        currNameFilter = e.target.value;
+        setName(currNameFilter);
+        getRequest(
+            Url(
+                "users",
+                `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${email}"`,
+                `${currPage}`,
+                "DESC"
+            ),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        );
+    };
+
+    const EmailHandler = (e) => {
+        currPage = 0;
+        currEmailFilter = e.target.value;
+        setEmail(currEmailFilter);
+        getRequest(
+            Url(
+                "users",
+                `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                `${currPage}`,
+                "DESC"
+            ),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        );
+    };
+
+    const ComplaintStatus = (status) => {
+        switch (status) {
+            case "accepted":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#228B22",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        ACEITO
+                    </Paper>
+                );
+            case "requested":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FF8C00",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        PENDENTE
+                    </Paper>
+                );
+            case "rejected":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FA8072",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        Rejeitado
+                    </Paper>
+                );
+            default:
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#797D7F ",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        Não requisitado
+                    </Paper>
+                );
+        }
+    };
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    const handleAprove = (userId, userName) => {
+        const url = `/users/${userId}/add_teacher`;
+        const body = {
+            approves: true,
+        };
+        postRequest(
+            url,
+            body,
+            (data) => {
+                if (data.errors) HandleSnack("Erro!", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        `${userName} aceito como professor!`,
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    currPage = 0;
+                    UpdateHandler(
+                        Url(
+                            "users",
+                            `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                            `${currPage}`,
+                            "DESC"
+                        )
+                    );
+                }
+            },
+            (error) => {
+                HandleSnack("Erro!", true, "warning", "#FA8072");
+            }
+        );
+    };
+
+    const handleReject = (userId, userName) => {
+        const url = `/users/${userId}/add_teacher`;
+        const body = {
+            approves: false,
+        };
+        postRequest(
+            url,
+            body,
+            (data) => {
+                if (data.errors) HandleSnack("Erro!", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        `${userName} rejeitado como professor!`,
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    currPage = 0;
+                    UpdateHandler(
+                        Url(
+                            "users",
+                            `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                            `${currPage}`,
+                            "DESC"
+                        )
+                    );
+                }
+            },
+            (error) => {
+                HandleSnack("Erro!", true, "warning", "#FA8072");
+            }
+        );
+    };
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url(
+                "users",
+                `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                `${currPage}`,
+                "DESC"
+            ),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+                setError(true);
+            }
+        );
+    }, []);
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />;
+    } else if (CheckUserPermission()) {
+        if (WINDOW_WIDTH <= 1075) {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de pedidos para professores
+                                </Typography>
+                            </Grid>
+
+                            <Grid item xs={6}>
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                UpdateHandler(
+                                                    Url(
+                                                        "users",
+                                                        `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                                                        `${currPage}`,
+                                                        "DESC"
+                                                    )
+                                                );
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {isUpdating ? (
+                                                <CircularProgress size={24} />
+                                            ) : (
+                                                    "Atualizar"
+                                                )}
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter);
+                                            }}
+                                            startIcon={<FilterListRoundedIcon />}
+                                        >
+                                            Filtrar
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+
+                        {showFilter ? (
+                            <Grid
+                                container
+                                direction="row"
+                                justify="space-between"
+                                alignItems="center"
+                                alignContent="flex-end"
+                                spacing={3}
+                                xs={12}
+                            >
+                                <Grid item>
+                                    <TextField
+                                        select
+                                        label="Estado"
+                                        value={option ? option : ""}
+                                        onChange={handleChange}
+                                        helperText="Por favor, selecione uma das opções"
+                                    >
+                                        {StateOptions.map((option, index) => (
+                                            <MenuItem
+                                                key={option.id}
+                                                value={option.name}
+                                                name={option.id}
+                                                onClick={() =>
+                                                    ApplyFilter(option.id, "submitter_request")
+                                                }
+                                            >
+                                                {option.name}
+                                            </MenuItem>
+                                        ))}
+                                    </TextField>
+                                </Grid>
+                                <Grid item>
+                                    <TextField label="Nome" onChange={NameHandler} value={name} />
+                                </Grid>
+                                <Grid item>
+                                    <TextField
+                                        label="Email"
+                                        onChange={EmailHandler}
+                                        value={email}
+                                    />
+                                </Grid>
+                            </Grid>
+                        ) : null}
+                    </Paper>
+
+                    <div style={{ height: "2em" }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++;
+                                        LoadMoreItens(
+                                            Url(
+                                                "users",
+                                                `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                                                `${currPage}`,
+                                                "DESC"
+                                            )
+                                        );
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#00bcd4"}
+                                        avatar={
+                                            <img
+                                                src={row.avatar ? apiDomain + row.avatar : noAvatar}
+                                                alt="user avatar"
+                                                style={{
+                                                    height: "100%",
+                                                    width: "100%",
+                                                    borderRadius: "50%",
+                                                }}
+                                            />
+                                        }
+                                        href={`/admin/user/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+                                            currNameFilter = "";
+                                            currEmailFilter = "";
+                                        }}
+                                        data={[
+                                            {
+                                                title: "Email",
+                                                subtitle: row.email ?
+                                                    <Link to={`/admin/sendEmail/${row.email}`} style={{ textDecoration: 'none' }}>
+                                                        <Button
+                                                            variant='text'
+                                                            color='primary'
+                                                            startIcon={<EmailRoundedIcon />}
+                                                        >
+                                                            {row.email}
+                                                        </Button>
+                                                    </Link> : null
+
+                                            },
+                                            {
+                                                title: "Pedido em",
+                                                subtitle: DisplayDate(row.created_at),
+                                            },
+                                            {
+                                                title: "Situação do pedido",
+                                                subtitle: ComplaintStatus(row.submitter_request),
+                                            },
+                                            {
+                                                title: "Ações rápidas",
+                                                subtitle: <>
+                                                    <Button
+                                                        variant="contained"
+                                                        color="secondary"
+                                                        style={{ width: "100%" }}
+                                                        disabled={
+                                                            row.submitter_request === "requested" ? false : true
+                                                        }
+                                                        startIcon={
+                                                            <CloseRoundedIcon style={{ fill: "#FFFAFA" }} />
+                                                        }
+                                                        onClick={() => {
+                                                            handleReject(row.id, row.name);
+                                                        }}
+                                                    >
+                                                        Recusar
+                                                    </Button>
+                                                    <div style={{ height: "0.5em" }} />
+                                                    <Button
+                                                        variant="contained"
+                                                        color="primary"
+                                                        style={{ width: "100%" }}
+                                                        disabled={
+                                                            row.submitter_request === "requested" ? false : true
+                                                        }
+                                                        startIcon={
+                                                            <CheckRoundedIcon style={{ fill: "#FFFAFA" }} />
+                                                        }
+                                                        onClick={() => {
+                                                            handleAprove(row.id, row.name);
+                                                        }}
+                                                    >
+                                                        Aceitar
+                                                    </Button>
+                                                </>
+                                            }
+                                        ]}
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </>
+            );
+        } else {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de pedidos para professores
+                                </Typography>
+                            </Grid>
+
+                            <Grid item xs={6}>
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                UpdateHandler(
+                                                    Url(
+                                                        "users",
+                                                        `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                                                        `${currPage}`,
+                                                        "DESC"
+                                                    )
+                                                );
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {isUpdating ? (
+                                                <CircularProgress size={24} />
+                                            ) : (
+                                                    "Atualizar"
+                                                )}
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter);
+                                            }}
+                                            startIcon={<FilterListRoundedIcon />}
+                                        >
+                                            Filtrar
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+
+                        {showFilter ? (
+                            <Grid
+                                container
+                                direction="row"
+                                justify="space-between"
+                                alignItems="center"
+                                alignContent="flex-end"
+                                spacing={3}
+                                xs={12}
+                            >
+                                <Grid item>
+                                    <TextField
+                                        select
+                                        label="Estado"
+                                        value={option ? option : ""}
+                                        onChange={handleChange}
+                                        helperText="Por favor, selecione uma das opções"
+                                    >
+                                        {StateOptions.map((option, index) => (
+                                            <MenuItem
+                                                key={option.id}
+                                                value={option.name}
+                                                name={option.id}
+                                                onClick={() =>
+                                                    ApplyFilter(option.id, "submitter_request")
+                                                }
+                                            >
+                                                {option.name}
+                                            </MenuItem>
+                                        ))}
+                                    </TextField>
+                                </Grid>
+                                <Grid item>
+                                    <TextField label="Nome" onChange={NameHandler} value={name} />
+                                </Grid>
+                                <Grid item>
+                                    <TextField
+                                        label="Email"
+                                        onChange={EmailHandler}
+                                        value={email}
+                                    />
+                                </Grid>
+                            </Grid>
+                        ) : null}
+                    </Paper>
+
+                    <div style={{ height: "2em" }}></div>
+
+                    <Grid xs={12} container>
+                        <TableData top={TOP_LABELS}>
+                            <TableBody>
+                                {items.map((row, index) =>
+                                    index === items.length - 1 ? (
+                                        <StyledTableRow key={index}>
+                                            {/* Button to load more data */}
+                                            <StyledTableCell>
+                                                <Button
+                                                    color="primary"
+                                                    variant="text"
+                                                    // disabled={isLoadingMoreItems}
+                                                    startIcon={<AddRoundedIcon />}
+                                                    disabled={isLoadingMoreItems}
+                                                    onClick={() => {
+                                                        currPage++;
+                                                        LoadMoreItens(
+                                                            Url(
+                                                                "users",
+                                                                `"submitter_request":"${currStateFilter}","name":"${currNameFilter}","email":"${currEmailFilter}"`,
+                                                                `${currPage}`,
+                                                                "DESC"
+                                                            )
+                                                        );
+                                                    }}
+                                                >
+                                                    {isLoadingMoreItems ? (
+                                                        <CircularProgress size={24} />
+                                                    ) : (
+                                                            "Carregar mais itens"
+                                                        )}
+                                                </Button>
+                                            </StyledTableCell>
+                                        </StyledTableRow>
+                                    ) : (
+                                            <StyledTableRow
+                                                key={index}
+                                                style={{ flex: 1, width: "100%" }}
+                                            >
+                                                <StyledTableCell component="th" scope="row">
+                                                    {ComplaintStatus(row.submitter_request)}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">{row.id}</StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    {row.name}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    {row.email}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    {DisplayDate(row.created_at)}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    <Link to={`/admin/user/${row.id}`}>
+                                                        <IconButton
+                                                            onClick={() => {
+                                                                currPage = 0;
+                                                                currNameFilter = "";
+                                                                currEmailFilter = "";
+                                                            }}
+                                                        >
+                                                            <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                                                        </IconButton>
+                                                    </Link>
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    <Button
+                                                        variant="contained"
+                                                        color="secondary"
+                                                        style={{ width: "100%" }}
+                                                        disabled={
+                                                            row.submitter_request === "requested" ? false : true
+                                                        }
+                                                        startIcon={
+                                                            <CloseRoundedIcon style={{ fill: "#FFFAFA" }} />
+                                                        }
+                                                        onClick={() => {
+                                                            handleReject(row.id, row.name);
+                                                        }}
+                                                    >
+                                                        Recusar
+                                                    </Button>
+                                                    <div style={{ height: "0.5em" }} />
+                                                    <Button
+                                                        variant="contained"
+                                                        color="primary"
+                                                        style={{ width: "100%" }}
+                                                        disabled={
+                                                            row.submitter_request === "requested" ? false : true
+                                                        }
+                                                        startIcon={
+                                                            <CheckRoundedIcon style={{ fill: "#FFFAFA" }} />
+                                                        }
+                                                        onClick={() => {
+                                                            handleAprove(row.id, row.name);
+                                                        }}
+                                                    >
+                                                        Aceitar
+                                                    </Button>
+                                                </StyledTableCell>
+                                            </StyledTableRow>
+                                        )
+                                )}
+                            </TableBody>
+                        </TableData>
+                    </Grid>
+                </>
+            );
+        }
+    } else return <Unauthorized />;
+};
+export default AproveTeacher;
+
+const StyledDivButton = styled(Paper)`
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+`;
diff --git a/src/Admin/Pages/Pages/SubPages/BlockedUsers.js b/src/Admin/Pages/Pages/SubPages/BlockedUsers.js
new file mode 100644
index 0000000000000000000000000000000000000000..81bd15d905c72b4d7c69a83fb6cdeb259728da9f
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/BlockedUsers.js
@@ -0,0 +1,659 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+import React, { useEffect, useState } from 'react';
+import moment from "moment";
+//Material ui componets
+import { withStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import Grid from "@material-ui/core/Grid";
+import Paper from "@material-ui/core/Paper";
+import MenuItem from "@material-ui/core/MenuItem";
+import TableRow from "@material-ui/core/TableRow";
+import TextField from "@material-ui/core/TextField";
+import TableCell from '@material-ui/core/TableCell';
+import RemoveCircleOutlineRoundedIcon from '@material-ui/icons/RemoveCircleOutlineRounded';
+import VisibilityIcon from '@material-ui/icons/Visibility';
+import { Button, Typography } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import UpdateRoundedIcon from '@material-ui/icons/UpdateRounded'
+import EmailRoundedIcon from '@material-ui/icons/EmailRounded';
+//Local files
+import TableData from '../../../Components/Components/Table';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//Services
+import { getRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { Url } from '../../../Filters';
+//routers
+import { Link } from 'react-router-dom';
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import styled from "styled-components"
+import { apiDomain } from '../../../../env';
+import noAvatar from "../../../../img/default_profile.png";
+
+let currPage = 0; //var that controlls the current page that we are  
+let currContentFilter = 1;
+let transformListToAsc = false;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        '&:nth-of-type(odd)': {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const BlockedUsers = () => {
+    const AddOneLenght = [''];
+    const WINDOW_WIDTH = window.innerWidth
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete 
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false)
+    const [isUpdating, setIsUpdating] = useState(false)
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    const StateOptions = [
+        {
+            id: 1,
+            name: "Semanal"
+        },
+        {
+            id: 2,
+            name: "Permanente"
+        }
+    ];
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data]
+                if (arrData.length === 0) {
+                    HandleSnack('Não há mais dados para serem carregados', true, 'warning', '#FFC125')
+                } else {
+                    const arrItems = [...items]
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items 
+                    const arrResult = arrItems.concat(arrData)
+                    setItems(arrResult.concat(AddOneLenght))
+                }
+                setIsLoadingMoreItems(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsLoadingMoreItems(false)
+            }
+        )
+    }
+
+    const handleChange = (event) => {
+        const type = event.target.value
+        switch (type) {
+            case "Semanal":
+                currPage = 0;
+                currContentFilter = 1;
+                getRequest(
+                    Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'ASC'),
+                    (data, header) => {
+                        HandleSnack("Filtro aplicado com sucesso!", true, 'success', '#228B22')
+                        const arrData = [...data]
+                        setItems(arrData.concat(AddOneLenght))
+                        setIsUpdating(false)
+                    },
+                    (error) => {
+                        HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                        setIsUpdating(false)
+                    }
+                )
+                break;
+            case "Permanente":
+                currPage = 0;
+                currContentFilter = 2;
+                getRequest(
+                    Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'ASC'),
+                    (data, header) => {
+                        HandleSnack("Filtro aplicado com sucesso!", true, 'success', '#228B22')
+                        const arrData = [...data]
+                        setItems(arrData.concat(AddOneLenght))
+                        setIsUpdating(false)
+                    },
+                    (error) => {
+                        HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                        setIsUpdating(false)
+                    }
+                )
+                break;
+            default:
+                currPage = 0;
+                currContentFilter = 1;
+                getRequest(
+                    Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'ASC'),
+                    (data, header) => {
+                        HandleSnack("Filtro aplicado com sucesso!", true, 'success', '#228B22')
+                        const arrData = [...data]
+                        setItems(arrData.concat(AddOneLenght))
+                        setIsUpdating(false)
+                    },
+                    (error) => {
+                        HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                        setIsUpdating(false)
+                    }
+                )
+                break;
+        }
+    }
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true)
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack('A lista de dados foi atualizada', true, 'success', '#228B22')
+                const arrData = [...data]
+                setItems(arrData.concat(AddOneLenght))
+                setIsUpdating(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsUpdating(false)
+            }
+        )
+    }
+
+    const BlockStatus = (status) => {
+        switch (status) {
+            case 1:
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FF8C00",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        SEMANAL
+                    </Paper>
+                );
+            case 2:
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "red",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        PERMANENTE
+                    </Paper>
+                );
+            default:
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#797D7F",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        Não avaliado
+                    </Paper>
+                );
+        }
+    };
+
+    const ReactiveUser = (userId) => {
+        putRequest(
+            `/users/${userId}/reactivate_user`,
+            {},
+            (data) => {
+                if (data.errors)
+                    HandleSnack('Erro!', true, 'warning', '#FA8072')
+                else {
+                    currPage = 0
+                    HandleSnack('Usuário foi reativado com sucesso!', true, 'success', '#228B22')
+                    UpdateHandler(Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'DESC'))
+                }
+            },
+            (error) => {
+                HandleSnack('Erro!', true, 'warning', '#FA8072')
+            }
+        )
+    }
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    useEffect(() => {
+        getRequest(
+            Url('users', `"state" : "${currContentFilter}"`, '0', 'DESC'),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(AddOneLenght));
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+
+        //Words in the top part of the table
+        const topTable = ['ID', 'ESTADO', 'NAME', 'EMAIL', 'BLOQUEADO EM', 'AÇÕES'];
+        if (WINDOW_WIDTH <= 899) {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container direction="row" alignItems="center">
+                            <Grid container spacing={3} >
+                                <Grid item xs={6}>
+                                    <Typography variant="h4">
+                                        Lista de usuários bloqueados
+                                    </Typography>
+                                </Grid>
+                                <Grid
+                                    item
+                                    xs={6}
+                                >
+                                    <Grid container justify="flex-end" spacing={3}>
+                                        <Grid item>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                disabled={isUpdating}
+                                                onClick={() => {
+                                                    currPage = 0
+                                                    transformListToAsc = false
+                                                    UpdateHandler(Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'DESC'))
+                                                }}
+                                                startIcon={<UpdateRoundedIcon />}
+                                            >
+                                                {
+                                                    isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                                }
+                                            </Button>
+                                        </Grid>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                            <Grid item>
+                                <TextField
+                                    select
+                                    label="Estado de bloqueio"
+                                    onChange={handleChange}
+                                    helperText="Por favor, selecione uma das opções"
+                                >
+                                    {StateOptions.map((option, index) => (
+                                        <MenuItem
+                                            key={option.id}
+                                            value={option.name}
+                                            name={option.id}
+                                        >
+                                            {option.name}
+                                        </MenuItem>
+                                    ))}
+                                </TextField>
+                            </Grid>
+
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#e81f4f"}
+                                        avatar={
+                                            <img
+                                                src={row.avatar ? apiDomain + row.avatar : noAvatar}
+                                                alt="user avatar"
+                                                style={{
+                                                    height: "100%",
+                                                    width: "100%",
+                                                    borderRadius: "50%",
+                                                }}
+                                            />
+                                        }
+                                        href={`/admin/user/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0; transformListToAsc = false; currContentFilter = 1
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Email",
+                                                    subtitle: row.email ?
+                                                        <Link to={`/admin/sendEmail/${row.email}`} style={{ textDecoration: 'none' }}>
+                                                            <Button
+                                                                variant='text'
+                                                                color='primary'
+                                                                startIcon={<EmailRoundedIcon />}
+                                                            >
+                                                                {row.email}
+                                                            </Button>
+                                                        </Link> : null
+
+                                                },
+                                                {
+                                                    title: "Estado",
+                                                    subtitle: BlockStatus(currContentFilter)
+                                                },
+                                                {
+                                                    title: "Ações rápidas",
+                                                    subtitle: <Button
+                                                        style={{ width: "100%", marginBottom: "0.5em" }}
+                                                        variant="contained"
+                                                        color="secondary"
+                                                        startIcon={<RemoveCircleOutlineRoundedIcon />}
+                                                        onClick={() => ReactiveUser(row.id)}
+                                                    >
+                                                        Desbloquear
+                                                    </Button>
+                                                }
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </div>
+            )
+        }
+        else {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container direction="row" alignItems="center">
+                            <Grid container spacing={3} >
+                                <Grid item xs={6}>
+                                    <Typography variant="h4">
+                                        Lista de usuários bloqueados
+                                    </Typography>
+                                </Grid>
+                                <Grid
+                                    item
+                                    xs={6}
+                                >
+                                    <Grid container justify="flex-end" spacing={3}>
+                                        <Grid item>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                disabled={isUpdating}
+                                                onClick={() => {
+                                                    currPage = 0
+                                                    transformListToAsc = false
+                                                    UpdateHandler(Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'DESC'))
+                                                }}
+                                                startIcon={<UpdateRoundedIcon />}
+                                            >
+                                                {
+                                                    isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                                }
+                                            </Button>
+                                        </Grid>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                            <Grid item>
+                                <TextField
+                                    select
+                                    label="Estado de bloqueio"
+                                    onChange={handleChange}
+                                    helperText="Por favor, selecione uma das opções"
+                                >
+                                    {StateOptions.map((option, index) => (
+                                        <MenuItem
+                                            key={option.id}
+                                            value={option.name}
+                                            name={option.id}
+                                        >
+                                            {option.name}
+                                        </MenuItem>
+                                    ))}
+                                </TextField>
+                            </Grid>
+
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    <TableData
+                        top={topTable}
+                        onIconPressed={InvertList}
+                    >
+                        <TableBody>
+                            {items.map((row, index) => (
+                                index === items.length - 1 ?
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color='primary'
+                                                variant='text'
+                                                disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('users', `"state" : "${currContentFilter}"`, `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {
+                                                    isLoadingMoreItems ? <CircularProgress size={24} /> : 'Carregar mais itens'
+                                                }
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+
+                                    :
+
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">{row.id}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {BlockStatus(currContentFilter)}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">{row.name}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {
+                                                row.email ?
+                                                    <Link to={`/admin/sendEmail/${row.email}`} style={{ textDecoration: 'none' }}>
+                                                        <Button
+                                                            variant='text'
+                                                            color='primary'
+                                                            startIcon={<EmailRoundedIcon />}
+                                                        >
+                                                            {row.email}
+                                                        </Button>
+                                                    </Link> : null
+                                            }
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {DisplayDate(row.suspended_at)}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Button
+                                                style={{ width: "100%", marginBottom: "0.5em" }}
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<RemoveCircleOutlineRoundedIcon />}
+                                                onClick={() => ReactiveUser(row.id)}
+                                            >
+                                                Desbloquear
+                                            </Button>
+                                            <Link to={`/admin/user/${row.id}`}>
+                                                <Button
+                                                    onClick={() => { currPage = 0; transformListToAsc = false; currContentFilter = 1 }}
+                                                    style={{ width: "100%" }}
+                                                    variant="contained"
+                                                    color="primary"
+                                                    startIcon={<VisibilityIcon />}
+                                                >
+                                                    Visualizar
+                                                </Button>
+                                            </Link>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                            ))}
+                        </TableBody>
+                    </TableData>
+                </div>
+            )
+        }
+    }
+}
+
+
+export default BlockedUsers;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
\ No newline at end of file
diff --git a/src/Admin/Pages/Pages/SubPages/Collections.js b/src/Admin/Pages/Pages/SubPages/Collections.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a62e4a1dfe1456fc0c635d72b3dac8d02b9476c
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Collections.js
@@ -0,0 +1,701 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState } from "react";
+import moment from "moment";
+//imports from local files
+import TableData from "../../../Components/Components/Table";
+import SnackBar from "../../../../Components/SnackbarComponent";
+import { Url, DeleteFilter } from "../../../Filters";
+import AlertDialog from "../../../Components/Components/AlertDialog";
+import LoadingSpinner from "../../../../Components/LoadingSpinner";
+//imports from material ui
+import { withStyles } from "@material-ui/core/styles";
+import TableBody from "@material-ui/core/TableBody";
+import PeopleRoundedIcon from "@material-ui/icons/PeopleRounded";
+import TableCell from "@material-ui/core/TableCell";
+import MenuItem from "@material-ui/core/MenuItem";
+import TableRow from "@material-ui/core/TableRow";
+import TextField from "@material-ui/core/TextField";
+import IconButton from "@material-ui/core/IconButton";
+import { Button, Typography, Paper, Grid } from "@material-ui/core";
+import CircularProgress from "@material-ui/core/CircularProgress";
+import AddRoundedIcon from "@material-ui/icons/AddRounded";
+import UpdateRoundedIcon from "@material-ui/icons/UpdateRounded";
+import FilterListRoundedIcon from "@material-ui/icons/FilterListRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import DeleteIcon from "@material-ui/icons/Delete";
+import {
+    deleteRequest,
+    getRequest,
+} from "../../../../Components/HelperFunctions/getAxiosConfig";
+//routers
+import { Link } from "react-router-dom";
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import styled from 'styled-components'
+
+let currPage = 0;
+let currPrivacyFilter = "";
+let currNameFilter = "";
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        "&:nth-of-type(odd)": {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const Collections = () => {
+    const ADD_ONE_LENGHT = [""];
+    const TOP_LABELS = [
+        "NOME",
+        "DESCRIÇÃO",
+        "DONO(A)",
+        "CRIAÇÃO",
+        "ATUALIZAÇÃO",
+        "PRIVACIDADE",
+        "VISUALIZAR",
+        "DELETAR",
+    ]; //Labels from Table
+
+    const WINDOW_WIDTH = window.innerWidth;
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false); //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+
+    const [showFilter, setShowFilter] = useState(false);
+    const [search, setSearch] = useState("");
+
+    const [openAlertDialog, setOpenAlertDialog] = useState(false);
+    const [deleteItem, setDeleteItem] = useState({}); //Delete Item
+    const [isLoadingToDelete, setIsLoadingToDelete] = useState(null);
+
+    const [option, setOption] = useState("Todos os usuários"); //labels of the text field 'to'
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    const options = [
+        {
+            value: "private",
+            label: "Privado",
+        },
+        {
+            value: "public",
+            label: "Público",
+        },
+    ];
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    //handle load more items
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true);
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data];
+                if (arrData.length === 0) {
+                    HandleSnack(
+                        "Não há mais dados para serem carregados",
+                        true,
+                        "warning",
+                        "#FFC125"
+                    );
+                } else {
+                    const arrItems = [...items];
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items
+                    const arrResult = arrItems.concat(arrData);
+                    setItems(arrResult.concat(ADD_ONE_LENGHT));
+                }
+                setIsLoadingMoreItems(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoadingMoreItems(false);
+            }
+        );
+    };
+
+    //Defines which row must show the circular progress
+    const HandleStateCircularProgress = (i) => {
+        setIsLoadingToDelete(i);
+    };
+
+    // handle update list data
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true);
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack(
+                    "A lista de dados foi atualizada",
+                    true,
+                    "success",
+                    "#228B22"
+                );
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsUpdating(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsUpdating(false);
+            }
+        );
+    };
+
+    //Called when user want to delete one institution
+    async function DeleteHandler() {
+        const id = deleteItem.id;
+        HandleStateAlertDialog(null);
+        deleteRequest(
+            DeleteFilter("collections", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A Coleção foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    currPage = 0;
+                    HandleStateCircularProgress(null);
+                    UpdateHandler(Url("collections", "", `${currPage}`, "DESC"));
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                HandleStateCircularProgress(null);
+            }
+        );
+    }
+
+    //Controlls the state of the Alert Dialog
+    const HandleStateAlertDialog = (i) => {
+        const obj = { ...items[i] };
+        setDeleteItem(obj);
+        setOpenAlertDialog(!openAlertDialog);
+    };
+
+    const ApplyFilter = (value) => {
+        currPrivacyFilter = value
+        currPage = 0;
+        setIsLoaded(false);
+        getRequest(
+            Url(
+                "collections",
+                `"privacy" : "${currPrivacyFilter}" , "name" : "${currNameFilter}"`,
+                `${currPage}`,
+                "DESC"
+            ),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        );
+    }
+
+    // handle change of privacy
+    const handleChange = (e) => {
+        setOption(e.target.value);
+    };
+
+    //Handle the search filter
+    const HandleSearch = (event) => {
+        currNameFilter = event.target.value
+        setSearch(currNameFilter);
+        getRequest(
+            Url(
+                "collections",
+                `"privacy" : "${currPrivacyFilter}" , "name" : "${currNameFilter}"`,
+                `${currPage}`,
+                "DESC"
+            ),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        );
+    };
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url(
+                "collections",
+                `"privacy" : "${currPrivacyFilter}" , "name" : "${currNameFilter}"`,
+                `${currPage}`,
+                "DESC"
+            ),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(false);
+                setError(true);
+            }
+        );
+    }, []);
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />;
+    } else {
+        if (WINDOW_WIDTH <= 954) {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">Coleções</Typography>
+                            </Grid>
+                            <Grid item xs={6}>
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                UpdateHandler(
+                                                    Url(
+                                                        "collections",
+                                                        `"privacy" : "${currPrivacyFilter}" , "name" : "${currNameFilter}"`,
+                                                        `${currPage}`,
+                                                        "DESC"
+                                                    )
+                                                );
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter);
+                                            }}
+                                            startIcon={<FilterListRoundedIcon />}
+                                        >
+                                            Filtrar
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+
+                        {showFilter ? (
+                            <>
+                                <div style={{ height: "1em" }}></div>
+
+                                <Grid
+                                    container
+                                    alignItems="center"
+                                    alignContent="center"
+                                    xs={12}
+                                    direction="row"
+                                    justify="space-between"
+                                >
+                                    <Grid item>
+                                        <TextField
+                                            select
+                                            label="Filtro"
+                                            value={option ? option : ""}
+                                            onChange={handleChange}
+                                            helperText="Por favor, selecione uma das opções"
+                                        >
+                                            {options.map((option, index) => (
+                                                <MenuItem key={index} value={option.value} onClick={() => { ApplyFilter(option.value) }}>
+                                                    {option.label}
+                                                </MenuItem>
+                                            ))}
+                                        </TextField>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <TextField
+                                            label="Pesquisa"
+                                            value={search}
+                                            onChange={(event) => HandleSearch(event)}
+                                        ></TextField>
+                                    </Grid>
+                                </Grid>
+                            </>
+                        ) : null}
+                    </Paper>
+
+                    <div style={{ height: "2em" }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++;
+                                        LoadMoreItens(
+                                            Url(
+                                                "collections",
+                                                `"privacy" : "${currPrivacyFilter}" , "name" : "${currNameFilter}"`,
+                                                `${currPage}`,
+                                                "DESC"
+                                            )
+                                        );
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.privacy}
+                                        backColor={"#e81f4f"}
+                                        avatar={<PeopleRoundedIcon />}
+                                        href={`/admin/Collection/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+                                            currPrivacyFilter = "";
+                                            currNameFilter = "";
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "ID",
+                                                    subtitle: row.id
+
+                                                },
+                                                {
+                                                    title: "Dono(a)",
+                                                    subtitle: row.owner ? row.owner.name : "Sem dados"
+
+                                                },
+                                                {
+                                                    title: "Criado em",
+                                                    subtitle: DisplayDate(row.created_at)
+                                                },
+                                                {
+                                                    title: "Atualizado em",
+                                                    subtitle: DisplayDate(row.updated_at)
+                                                }
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </>
+            );
+        }
+        else {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">Coleções</Typography>
+                            </Grid>
+                            <Grid item xs={6}>
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                UpdateHandler(
+                                                    Url(
+                                                        "collections",
+                                                        `"privacy" : "${currPrivacyFilter}" , "name" : "${currNameFilter}"`,
+                                                        `${currPage}`,
+                                                        "DESC"
+                                                    )
+                                                );
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter);
+                                            }}
+                                            startIcon={<FilterListRoundedIcon />}
+                                        >
+                                            Filtrar
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+
+                        {showFilter ? (
+                            <>
+                                <div style={{ height: "1em" }}></div>
+
+                                <Grid
+                                    container
+                                    alignItems="center"
+                                    alignContent="center"
+                                    xs={12}
+                                    direction="row"
+                                    justify="space-between"
+                                >
+                                    <Grid item>
+                                        <TextField
+                                            select
+                                            label="Filtro"
+                                            value={option ? option : ""}
+                                            onChange={handleChange}
+                                            helperText="Por favor, selecione uma das opções"
+                                        >
+                                            {options.map((option, index) => (
+                                                <MenuItem key={index} value={option.value} onClick={() => { ApplyFilter(option.value) }}>
+                                                    {option.label}
+                                                </MenuItem>
+                                            ))}
+                                        </TextField>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <TextField
+                                            label="Pesquisa"
+                                            value={search}
+                                            onChange={(event) => HandleSearch(event)}
+                                        ></TextField>
+                                    </Grid>
+                                </Grid>
+                            </>
+                        ) : null}
+                    </Paper>
+
+                    <div style={{ height: "2em" }}></div>
+
+                    <TableData top={TOP_LABELS}>
+                        <TableBody>
+                            {items.map((row, index) =>
+                                index === items.length - 1 ? (
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell>
+                                            <Button
+                                                key={index}
+                                                color="primary"
+                                                variant="text"
+                                                // disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                disabled={isLoadingMoreItems}
+                                                onClick={() => {
+                                                    currPage++;
+                                                    LoadMoreItens(
+                                                        Url(
+                                                            "collections",
+                                                            `"privacy" : "${currPrivacyFilter}" , "name" : "${currNameFilter}"`,
+                                                            `${currPage}`,
+                                                            "DESC"
+                                                        )
+                                                    );
+                                                }}
+                                            >
+                                                {isLoadingMoreItems ? (
+                                                    <CircularProgress size={24} />
+                                                ) : (
+                                                        "Carregar mais itens"
+                                                    )}
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                                ) : (
+                                        <StyledTableRow key={index}>
+                                            <StyledTableCell component="th" scope="row">
+                                                {row.name}
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                <div
+                                                    dangerouslySetInnerHTML={{ __html: row.description }}
+                                                ></div>
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                {row.owner ? row.owner.name : "Sem dados"}
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                {DisplayDate(row.created_at)}
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                {DisplayDate(row.updated_at)}
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">{row.privacy}</StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                <Link to={`/admin/Collection/${row.id}`}>
+                                                    <IconButton
+                                                        onClick={() => {
+                                                            currPage = 0;
+                                                            currPrivacyFilter = "";
+                                                            currNameFilter = "";
+                                                        }}
+                                                    >
+                                                        <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                                                    </IconButton>
+                                                </Link>
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                {isLoadingToDelete === index ? (
+                                                    <CircularProgress size={24} color="primary" />
+                                                ) : (
+                                                        <IconButton
+                                                            onClick={() => {
+                                                                HandleStateAlertDialog(index);
+                                                                HandleStateCircularProgress(index);
+                                                            }}
+                                                        >
+                                                            <DeleteIcon style={{ fill: "#FF0000" }} />
+                                                        </IconButton>
+                                                    )}
+                                            </StyledTableCell>
+                                        </StyledTableRow>
+                                    )
+                            )}
+                        </TableBody>
+                    </TableData>
+
+                    {/* This alert will be displayed if the user click to delete an institution */}
+                    <AlertDialog
+                        open={openAlertDialog}
+                        OnDelete={DeleteHandler}
+                        deleteItem={deleteItem}
+                        HandleClose={() => {
+                            setOpenAlertDialog(false);
+                            HandleStateCircularProgress(null);
+                        }}
+                    />
+                </>
+            );
+        }
+    }
+};
+export default Collections;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/CommunityQuestions.js b/src/Admin/Pages/Pages/SubPages/CommunityQuestions.js
new file mode 100644
index 0000000000000000000000000000000000000000..424b15eaa0effea1e0738960fa6c9c74e6fd00f0
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/CommunityQuestions.js
@@ -0,0 +1,786 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState, useContext } from "react";
+import moment from 'moment';
+//imports from local files
+import TableData from "../../../Components/Components/Table";
+import SnackBar from "../../../../Components/SnackbarComponent";
+import Unauthorized from '../../../Components/Components/Unauthorized';
+import { Url } from "../../../Filters";
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import { getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig';
+//imports from material ui
+import { withStyles } from "@material-ui/core/styles";
+import TableBody from "@material-ui/core/TableBody";
+import TableCell from "@material-ui/core/TableCell";
+import TableRow from "@material-ui/core/TableRow";
+import TextField from "@material-ui/core/TextField";
+import Popover from "@material-ui/core/Popover";
+import IconButton from "@material-ui/core/IconButton";
+import { Button, Typography, Paper, Grid } from "@material-ui/core";
+import CircularProgress from "@material-ui/core/CircularProgress";
+import AddRoundedIcon from "@material-ui/icons/AddRounded";
+import UpdateRoundedIcon from "@material-ui/icons/UpdateRounded";
+import CancelRoundedIcon from '@material-ui/icons/CancelRounded';
+import FilterListRoundedIcon from "@material-ui/icons/FilterListRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import EmailRoundedIcon from '@material-ui/icons/EmailRounded';
+import ContactSupportRoundedIcon from "@material-ui/icons/ContactSupportRounded";
+//routers
+import { Link } from 'react-router-dom';
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import styled from "styled-components"
+
+let currPage = 0;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        "&:nth-of-type(odd)": {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const CommunityQuestion = () => {
+    const { state, dispatch } = useContext(Store);
+
+    const ADD_ONE_LENGHT = [""];
+    const TOP_LABELS = [
+        "ID",
+        "DATA DE CONTATO",
+        "NOME",
+        "EMAIL",
+        "MENSAGEM",
+        "VISUALIZAR"
+    ]; //Labels from Table
+    const WINDOW_WIDTH = window.innerWidth
+
+    const [anchorEl, setAnchorEl] = React.useState(null);
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false); //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+
+    //Works with the filter
+    const [showMessageFilter, setShowMessageFilter] = useState(false);
+    const [showEmailFilter, setShowEmailFilter] = useState(false);
+    const [showNameFilter, setShowNameFilter] = useState(false);
+    const [message, setMessage] = useState("");
+    const [email, setEmail] = useState("");
+    const [name, setName] = useState("");
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    //handle with the message filter
+    const MessageFilterHandler = (e) => {
+        setMessage(e.target.value)
+        getRequest(
+            Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, currPage, 'DESC'),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+            },
+            (error) => {
+                HandleSnack("Não achamos nada na nossa base de dados!", true, "warning", "#FA8072");
+            }
+        )
+    }
+
+    //handle with the email filter
+    const EmailFilterHandler = (e) => {
+        setEmail(e.target.value)
+        getRequest(
+            Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, currPage, 'DESC'),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+            },
+            (error) => {
+                HandleSnack("Não achamos nada na nossa base de dados!", true, "warning", "#FA8072");
+            }
+        )
+    }
+
+    //handle with the name filter
+    const NameFilterHandler = (e) => {
+        setName(e.target.value)
+        getRequest(
+            Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, currPage, 'DESC'),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+            },
+            (error) => {
+                HandleSnack("Não achamos nada na nossa base de dados!", true, "warning", "#FA8072");
+            }
+        )
+    }
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const handleClick = (event) => {
+        setAnchorEl(event.currentTarget);
+    };
+
+    const handleClose = () => {
+        setAnchorEl(null);
+    };
+
+    const open = Boolean(anchorEl);
+    const id = open ? 'simple-popover' : undefined;
+
+    //handle load more items
+    const LoadMoreItens = (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data];
+                if (arrData.length === 0) {
+                    HandleSnack(
+                        "Não há mais dados para serem carregados",
+                        true,
+                        "warning",
+                        "#FFC125"
+                    );
+                } else {
+                    const arrItems = [...items];
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items
+                    const arrResult = arrItems.concat(arrData);
+                    setItems(arrResult.concat(ADD_ONE_LENGHT));
+                }
+                setIsLoadingMoreItems(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoadingMoreItems(false);
+            }
+        )
+    };
+
+    // handle update list data
+    const UpdateHandler = (api) => {
+        setIsUpdating(true);
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack(
+                    "A lista de dados foi atualizada",
+                    true,
+                    "success",
+                    "#228B22"
+                );
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsUpdating(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsUpdating(false);
+            }
+        )
+    };
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, `${currPage}`, "DESC"),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+ 
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        if (WINDOW_WIDTH <= 1200) {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">Dúvidas da comunidade</Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                UpdateHandler(
+                                                    Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, `${currPage}`, "DESC")
+                                                );
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={(e) => {
+                                                handleClick(e);
+                                            }}
+                                            startIcon={<FilterListRoundedIcon />}
+                                        >
+                                            Filtrar
+                                        </Button>
+                                        <Popover
+                                            id={id}
+                                            open={open}
+                                            anchorEl={anchorEl}
+                                            onClose={handleClose}
+                                            anchorOrigin={{
+                                                vertical: 'bottom',
+                                                horizontal: 'center',
+                                            }}
+                                            transformOrigin={{
+                                                vertical: 'top',
+                                                horizontal: 'center',
+                                            }}
+                                        >
+                                            <Button
+                                                onClick={() => setShowEmailFilter(!showEmailFilter)}
+                                                color={showEmailFilter ? 'primary' : 'default'}
+                                                variant='text'
+                                            >
+                                                EMAIL
+                                            </Button>
+
+                                            <Button
+                                                onClick={() => setShowMessageFilter(!showMessageFilter)}
+                                                color={showMessageFilter ? 'primary' : 'default'}
+                                                variant='text'
+                                            >
+                                                MENSAGEM
+                                            </Button>
+
+                                            <Button
+                                                onClick={() => setShowNameFilter(!showNameFilter)}
+                                                color={showNameFilter ? 'primary' : 'default'}
+                                                variant='text'
+                                            >
+                                                NOME
+                                            </Button>
+                                        </Popover>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+
+                        <div style={{ height: '1.5em' }}></div>
+
+                        <Grid item xs={12}>
+                            <Grid container justify="space-between" spacing={3}>
+                                {
+                                    showMessageFilter ?
+                                        <Grid item >
+                                            <TextField
+                                                label='Mensagem'
+                                                type="search"
+                                                onChange={(e) => MessageFilterHandler(e)}
+                                            />
+                                            <IconButton
+                                                size="small"
+                                                color="primary"
+                                                onClick={() => {
+                                                    currPage = 0;
+                                                    setMessage("")
+                                                    UpdateHandler(
+                                                        Url("contacts", `"message" : "", "email" : "${email}", "name" : "${name}"`, `${currPage}`, "DESC")
+                                                    );
+                                                    setShowMessageFilter(false)
+                                                }}
+                                            >
+                                                <CancelRoundedIcon />
+                                            </IconButton>
+                                        </Grid> : null
+                                }
+                                {
+                                    showEmailFilter ?
+                                        <Grid item>
+                                            <TextField
+                                                label='Email'
+                                                type="search"
+                                                onChange={(e) => EmailFilterHandler(e)}
+                                            />
+                                            <IconButton
+                                                size="small"
+                                                color="primary"
+                                                onClick={() => {
+                                                    currPage = 0;
+                                                    setEmail("")
+                                                    UpdateHandler(
+                                                        Url("contacts", `"message" : "${message}", "email" : "", "name" : "${name}"`, `${currPage}`, "DESC")
+                                                    );
+                                                    setShowEmailFilter(false)
+                                                }}
+                                            >
+                                                <CancelRoundedIcon />
+                                            </IconButton>
+                                        </Grid> : null
+                                }
+                                {
+                                    showNameFilter ?
+                                        <Grid item>
+                                            <TextField
+                                                label='Nome'
+                                                type="search"
+                                                onChange={(e) => NameFilterHandler(e)}
+                                            />
+                                            <IconButton
+                                                size="small"
+                                                color="primary"
+                                                onClick={() => {
+                                                    currPage = 0;
+                                                    setName("")
+                                                    UpdateHandler(
+                                                        Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : ""`, `${currPage}`, "DESC")
+                                                    );
+                                                    setShowNameFilter(false)
+                                                }}
+                                            >
+                                                <CancelRoundedIcon />
+                                            </IconButton>
+                                        </Grid> : null
+                                }
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: "2em" }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++;
+                                        LoadMoreItens(
+                                            Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, `${currPage}`, "DESC")
+                                        );
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#00bcd4"}
+                                        avatar={<ContactSupportRoundedIcon />}
+                                        href={`/admin/CommunityQuestion/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Email",
+                                                    subtitle:
+                                                        row.email ?
+                                                            <Link to={`/admin/sendEmail/${row.email}`} style={{ textDecoration: 'none' }}>
+                                                                <Button
+                                                                    variant='text'
+                                                                    color='primary'
+                                                                    startIcon={<EmailRoundedIcon />}
+                                                                >
+                                                                    {row.email}
+                                                                </Button>
+                                                            </Link> : null
+
+                                                },
+                                                {
+                                                    title: "Mensagem",
+                                                    subtitle: row.message
+
+                                                },
+                                                {
+                                                    title: "Criado em",
+                                                    subtitle: DisplayDate(row.created_at)
+                                                },
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </>
+            )
+        }
+        else {
+            return <>
+                <SnackBar
+                    severity={snackInfo.icon}
+                    text={snackInfo.message}
+                    snackbarOpen={snackInfo.open}
+                    color={snackInfo.color}
+                    handleClose={() =>
+                        setSnackInfo({
+                            message: "",
+                            icon: "",
+                            open: false,
+                            color: "",
+                        })
+                    }
+                />
+
+                <Paper style={{ padding: "1em" }}>
+                    <Grid container spacing={3} direction="row" alignItems="center">
+                        <Grid item xs={6}>
+                            <Typography variant="h4">Dúvidas da comunidade</Typography>
+                        </Grid>
+                        <Grid
+                            item
+                            xs={6}
+                        >
+                            <Grid container justify="flex-end" spacing={3}>
+                                <Grid item>
+                                    <Button
+                                        variant="contained"
+                                        color="secondary"
+                                        disabled={isUpdating}
+                                        onClick={() => {
+                                            currPage = 0;
+                                            UpdateHandler(
+                                                Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, `${currPage}`, "DESC")
+                                            );
+                                        }}
+                                        startIcon={<UpdateRoundedIcon />}
+                                    >
+                                        {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                    </Button>
+                                </Grid>
+                                <Grid item>
+                                    <Button
+                                        variant="contained"
+                                        color="secondary"
+                                        onClick={(e) => {
+                                            handleClick(e);
+                                        }}
+                                        startIcon={<FilterListRoundedIcon />}
+                                    >
+                                        Filtrar
+                                </Button>
+                                    <Popover
+                                        id={id}
+                                        open={open}
+                                        anchorEl={anchorEl}
+                                        onClose={handleClose}
+                                        anchorOrigin={{
+                                            vertical: 'bottom',
+                                            horizontal: 'center',
+                                        }}
+                                        transformOrigin={{
+                                            vertical: 'top',
+                                            horizontal: 'center',
+                                        }}
+                                    >
+                                        <Button
+                                            onClick={() => setShowEmailFilter(!showEmailFilter)}
+                                            color={showEmailFilter ? 'primary' : 'default'}
+                                            variant='text'
+                                        >
+                                            EMAIL
+                                    </Button>
+
+                                        <Button
+                                            onClick={() => setShowMessageFilter(!showMessageFilter)}
+                                            color={showMessageFilter ? 'primary' : 'default'}
+                                            variant='text'
+                                        >
+                                            MENSAGEM
+                                    </Button>
+
+                                        <Button
+                                            onClick={() => setShowNameFilter(!showNameFilter)}
+                                            color={showNameFilter ? 'primary' : 'default'}
+                                            variant='text'
+                                        >
+                                            NOME
+                                    </Button>
+                                    </Popover>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Grid>
+
+                    <div style={{ height: '1.5em' }}></div>
+
+                    <Grid item xs={12}>
+                        <Grid container justify="space-between" spacing={3}>
+                            {
+                                showMessageFilter ?
+                                    <Grid item >
+                                        <TextField
+                                            label='Mensagem'
+                                            type="search"
+                                            onChange={(e) => MessageFilterHandler(e)}
+                                        />
+                                        <IconButton
+                                            size="small"
+                                            color="primary"
+                                            onClick={() => {
+                                                currPage = 0;
+                                                setMessage("")
+                                                UpdateHandler(
+                                                    Url("contacts", `"message" : "", "email" : "${email}", "name" : "${name}"`, `${currPage}`, "DESC")
+                                                );
+                                                setShowMessageFilter(false)
+                                            }}
+                                        >
+                                            <CancelRoundedIcon />
+                                        </IconButton>
+                                    </Grid> : null
+                            }
+                            {
+                                showEmailFilter ?
+                                    <Grid item>
+                                        <TextField
+                                            label='Email'
+                                            type="search"
+                                            onChange={(e) => EmailFilterHandler(e)}
+                                        />
+                                        <IconButton
+                                            size="small"
+                                            color="primary"
+                                            onClick={() => {
+                                                currPage = 0;
+                                                setEmail("")
+                                                UpdateHandler(
+                                                    Url("contacts", `"message" : "${message}", "email" : "", "name" : "${name}"`, `${currPage}`, "DESC")
+                                                );
+                                                setShowEmailFilter(false)
+                                            }}
+                                        >
+                                            <CancelRoundedIcon />
+                                        </IconButton>
+                                    </Grid> : null
+                            }
+                            {
+                                showNameFilter ?
+                                    <Grid item>
+                                        <TextField
+                                            label='Nome'
+                                            type="search"
+                                            onChange={(e) => NameFilterHandler(e)}
+                                        />
+                                        <IconButton
+                                            size="small"
+                                            color="primary"
+                                            onClick={() => {
+                                                currPage = 0;
+                                                setName("")
+                                                UpdateHandler(
+                                                    Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : ""`, `${currPage}`, "DESC")
+                                                );
+                                                setShowNameFilter(false)
+                                            }}
+                                        >
+                                            <CancelRoundedIcon />
+                                        </IconButton>
+                                    </Grid> : null
+                            }
+                        </Grid>
+                    </Grid>
+                </Paper>
+
+                <div style={{ height: "2em" }}></div>
+
+                <TableData top={TOP_LABELS}>
+                    <TableBody>
+                        {items.map((row, index) =>
+                            index === items.length - 1 ? (
+                                <StyledTableRow key={index} style={{ padding: "1em" }}>
+                                    {/* Button to load more data */}
+                                    <StyledTableCell>
+                                        <Button
+                                            color="primary"
+                                            variant="text"
+                                            startIcon={<AddRoundedIcon />}
+                                            disabled={isLoadingMoreItems}
+                                            onClick={() => {
+                                                currPage++;
+                                                LoadMoreItens(
+                                                    Url("contacts", `"message" : "${message}", "email" : "${email}", "name" : "${name}"`, `${currPage}`, "DESC")
+                                                );
+                                            }}
+                                        >
+                                            {isLoadingMoreItems ? (
+                                                <CircularProgress size={24} />
+                                            ) : (
+                                                    "Carregar mais itens"
+                                                )}
+                                        </Button>
+                                    </StyledTableCell>
+                                </StyledTableRow>
+                            ) : (
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">
+                                            {row.id}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {DisplayDate(row.created_at)}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {row.name}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {
+                                                row.email ?
+                                                    <Link to={`/admin/sendEmail/${row.email}`} style={{ textDecoration: 'none' }}>
+                                                        <Button
+                                                            variant='text'
+                                                            color='primary'
+                                                            startIcon={<EmailRoundedIcon />}
+                                                        >
+                                                            {row.email}
+                                                        </Button>
+                                                    </Link> : null
+                                            }
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {row.message}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Link to={`/admin/CommunityQuestion/${row.id}`}>
+                                                <IconButton onClick={() => { currPage = 0 }}>
+                                                    <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                                                </IconButton>
+                                            </Link>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                                )
+                        )}
+                    </TableBody>
+                </TableData>
+            </>
+        }
+
+    } else return <Unauthorized />
+}
+export default CommunityQuestion;
+
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/Complaints.js b/src/Admin/Pages/Pages/SubPages/Complaints.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4466ddac9f401c399c4ee645e1f3d27fddcb41c
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Complaints.js
@@ -0,0 +1,888 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState, useContext } from "react";
+import moment from "moment";
+//imports from local files
+import TableData from "../../../Components/Components/Table";
+import SnackBar from "../../../../Components/SnackbarComponent";
+import { Url } from "../../../Filters";
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import { getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//imports from material ui
+import { withStyles } from "@material-ui/core/styles";
+import TableBody from "@material-ui/core/TableBody";
+import TableCell from "@material-ui/core/TableCell";
+import MenuItem from "@material-ui/core/MenuItem";
+import TableRow from "@material-ui/core/TableRow";
+import TextField from "@material-ui/core/TextField";
+import IconButton from "@material-ui/core/IconButton";
+import { Button, Typography, Paper, Grid } from "@material-ui/core";
+import CircularProgress from "@material-ui/core/CircularProgress";
+import AddRoundedIcon from "@material-ui/icons/AddRounded";
+import UpdateRoundedIcon from "@material-ui/icons/UpdateRounded";
+import FilterListRoundedIcon from "@material-ui/icons/FilterListRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import LaunchRoundedIcon from "@material-ui/icons/LaunchRounded";
+//routers
+import { Link } from "react-router-dom";
+import Unauthorized from "../../../Components/Components/Unauthorized";
+import styled from "styled-components"
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import AnnouncementRoundedIcon from "@material-ui/icons/AnnouncementRounded";
+
+let currPage = 0;
+let currStateFilter = "0"
+let currComplainReasonId;
+let currDescriptionFilter = "";
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        "&:nth-of-type(odd)": {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const Complaints = () => {
+    const { state, dispatch } = useContext(Store);
+    const WINDOW_WIDTH = window.innerWidth
+
+    const PORTAL_MEC = "https://plataformaintegrada.mec.gov.br/";
+
+    const ADD_ONE_LENGHT = [""];
+    const TOP_LABELS = [
+        "ESTADO DO RECURSO",
+        "ID",
+        "DESCRIÇÃO",
+        "ID OBJETO",
+        "TIPO",
+        "DATA(MM/DD/YYYY)",
+        "VISUALIZAR",
+        "VISITAR",
+    ]; //Labels from Table
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false); //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+
+    const [showFilter, setShowFilter] = useState(false);
+
+    const [stateOption, setStateOption] = useState("Pendente");
+    const [complainOption, setComplainOption] = useState("");
+    const [description, setDescription] = useState("");
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    const StateOptions = [
+        { id: 0, name: "Pendente" },
+        { id: 1, name: "Ativo" },
+        { id: 2, name: "Bloqueado / Removido" },
+    ];
+
+    const ComplaintReasons = [
+        { id: 1, name: "Viola direitos autorais" },
+        { id: 2, name: "Conteúdo ofensivo/abusivo" },
+        { id: 3, name: "Conta falsa" },
+        { id: 4, name: "Spam" },
+        { id: 5, name: "Descrição diverge do conteúdo" },
+    ];
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    //handle load more items
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true);
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data];
+                if (arrData.length === 0) {
+                    HandleSnack(
+                        "Não há mais dados para serem carregados",
+                        true,
+                        "warning",
+                        "#FFC125"
+                    );
+                } else {
+                    const arrItems = [...items];
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items
+                    const arrResult = arrItems.concat(arrData);
+                    setItems(arrResult.concat(ADD_ONE_LENGHT));
+                }
+                setIsLoadingMoreItems(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoadingMoreItems(false);
+            }
+        )
+    };
+
+    // handle update list data
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true);
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack(
+                    "A lista de dados foi atualizada",
+                    true,
+                    "success",
+                    "#228B22"
+                );
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsUpdating(false);
+
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsUpdating(false);
+
+            }
+        )
+    };
+
+    const handleChangeState = (e, type) => {
+        const value = e.target.value;
+        setStateOption(value);
+    };
+
+    const handleChangeComplain = (e, type) => {
+        const value = e.target.value;
+        setComplainOption(value);
+    };
+
+    const ApplyFilterState = (id, type) => {
+        currPage = 0;
+        currStateFilter = id;
+        let url;
+        if (currComplainReasonId) {
+            url = Url("complaints",
+                `"state" : "${currStateFilter}", "complaint_reason_id" : "${currComplainReasonId}", "description" : "${currDescriptionFilter}"`,
+                `${currPage}`,
+                "DESC"
+            )
+        }
+        else {
+            url = Url("complaints",
+                `"state" : "${currStateFilter}", "description" : "${currDescriptionFilter}"`,
+                `${currPage}`,
+                "DESC"
+            )
+        }
+        getRequest(
+            url,
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        )
+    };
+
+    const ApplyFilterComplainReason = (id, type) => {
+        currPage = 0;
+        currComplainReasonId = id;
+        let url;
+        if (currComplainReasonId) {
+            url = Url("complaints",
+                `"state" : "${currStateFilter}", "complaint_reason_id" : "${currComplainReasonId}", "description" : "${currDescriptionFilter}"`,
+                `${currPage}`,
+                "DESC"
+            )
+        }
+        else {
+            url = Url("complaints",
+                `"state" : "${currStateFilter}", "description" : "${currDescriptionFilter}"`,
+                `${currPage}`,
+                "DESC"
+            )
+        }
+        getRequest(
+            url,
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        )
+    };
+
+    const DescriptionHandler = (e) => {
+        currPage = 0;
+        currDescriptionFilter = e.target.value;
+        setDescription(currDescriptionFilter)
+        let url;
+        if (currComplainReasonId) {
+            url = Url("complaints",
+                `"state" : "${currStateFilter}", "complaint_reason_id" : "${currComplainReasonId}", "description" : "${currDescriptionFilter}"`,
+                `${currPage}`,
+                "DESC"
+            )
+        }
+        else {
+            url = Url("complaints",
+                `"state" : "${currStateFilter}", "description" : "${currDescriptionFilter}"`,
+                `${currPage}`,
+                "DESC"
+            )
+        }
+        getRequest(
+            url,
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                HandleSnack("Filtro aplicado com sucesso", true, "success", "#228B22");
+                setIsLoaded(true);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+            }
+        )
+    }
+
+    const convertToLink = (type, id) => {
+        switch (type) {
+            case "LearningObject":
+                return `recurso?id=${id}/`;
+            case "User":
+                return `usuario-publico/${id}/`;
+            default:
+                return "";
+        }
+    };
+
+    const ComplaintStatus = (status, type) => {
+        switch (status) {
+            case "accepted":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FA8072",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        {
+                            type === "User" ? "BLOQUEADO" : "REMOVIDO"
+                        }
+                    </Paper>
+                );
+            case "complained":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#FF8C00",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        PENDENTE
+                    </Paper>
+                );
+            case "rejected":
+                return (
+                    <Paper
+                        style={{
+                            textAlign: "center",
+                            padding: "0.5em",
+                            backgroundColor: "#228B22",
+                            fontWeight: "500",
+                            color: "#FFFAFA",
+                        }}
+                    >
+                        REJEITADO
+                    </Paper>
+                );
+            default:
+                return "NOTHING";
+        }
+    };
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url("complaints", `"state" : "${currStateFilter}"`, `${currPage}`, "DESC"),
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(ADD_ONE_LENGHT));
+                setIsLoaded(true);
+                setError(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoaded(true);
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        if (WINDOW_WIDTH <= 994) {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">Denúncias</Typography>
+                            </Grid>
+
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                if (currComplainReasonId) {
+                                                    UpdateHandler(
+                                                        Url("complaints",
+                                                            `"state" : "${currStateFilter}", "complaint_reason_id" : "${currComplainReasonId}", "description" : "${currDescriptionFilter}"`,
+                                                            `${currPage}`,
+                                                            "DESC"
+                                                        )
+                                                    );
+                                                }
+                                                else {
+                                                    UpdateHandler(
+                                                        Url("complaints",
+                                                            `"state" : "${currStateFilter}", "description" : "${currDescriptionFilter}"`,
+                                                            `${currPage}`,
+                                                            "DESC"
+                                                        )
+                                                    );
+                                                }
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter);
+                                            }}
+                                            startIcon={<FilterListRoundedIcon />}
+                                        >
+                                            Filtrar
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+
+                        {showFilter ? (
+                            <Grid
+                                container
+                                direction="row"
+                                justify="space-between"
+                                alignItems="center"
+                                alignContent="flex-end"
+                                spacing={3}
+                                xs={12}
+                            >
+                                <Grid item>
+                                    <TextField
+                                        select
+                                        label="Motivo"
+                                        value={complainOption}
+                                        onChange={handleChangeComplain}
+                                        helperText="Por favor, selecione uma das opções"
+                                    >
+                                        {ComplaintReasons.map((option, index) => (
+                                            <MenuItem
+                                                key={option.id}
+                                                value={option.name}
+                                                name={option.id}
+                                                onClick={() =>
+                                                    ApplyFilterComplainReason(option.id, "complaint_reason_id")
+                                                }
+                                            >
+                                                {option.name}
+                                            </MenuItem>
+                                        ))}
+                                    </TextField>
+                                </Grid>
+                                <Grid item>
+                                    <TextField
+                                        select
+                                        label="Estado"
+                                        value={stateOption}
+                                        onChange={handleChangeState}
+                                        helperText="Por favor, selecione uma das opções"
+                                    >
+                                        {StateOptions.map((option, index) => (
+                                            <MenuItem
+                                                key={option.id}
+                                                value={option.name}
+                                                name={option.id}
+                                                onClick={() => ApplyFilterState(option.id, "state")}
+                                            >
+                                                {option.name}
+                                            </MenuItem>
+                                        ))}
+                                    </TextField>
+                                </Grid>
+                                <Grid item>
+                                    <TextField label="Descrição" onChange={DescriptionHandler} value={description} />
+                                </Grid>
+                            </Grid>
+                        ) : null}
+                    </Paper>
+
+                    <div style={{ height: "2em" }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++;
+                                        if (currComplainReasonId) {
+                                            LoadMoreItens(
+                                                Url("complaints",
+                                                    `"state" : "${currStateFilter}", "complaint_reason_id" : "${currComplainReasonId}", "description" : "${currDescriptionFilter}"`,
+                                                    `${currPage}`,
+                                                    "DESC"
+                                                )
+                                            );
+                                        }
+                                        else {
+                                            LoadMoreItens(
+                                                Url("complaints",
+                                                    `"state" : "${currStateFilter}", "description" : "${currDescriptionFilter}"`,
+                                                    `${currPage}`,
+                                                    "DESC"
+                                                )
+                                            );
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.complainable_type}
+                                        subtitle={row.id}
+                                        backColor={"#673ab7"}
+                                        avatar={<AnnouncementRoundedIcon />}
+                                        href={`/admin/complaint/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0
+                                            currStateFilter = "0"
+                                            currDescriptionFilter = ""
+                                            currComplainReasonId = null;
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "ID do objeto",
+                                                    subtitle: row.complainable_id
+
+                                                },
+                                                {
+                                                    title: "Criado em",
+                                                    subtitle: DisplayDate(row.created_at)
+                                                },
+                                                {
+                                                    title: "Descrição",
+                                                    subtitle: row.description
+                                                },
+                                                {
+                                                    title: "Estado",
+                                                    subtitle: ComplaintStatus(row.state, row.complainable_type)
+                                                }
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </>
+            );
+        }
+        else {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">Denúncias</Typography>
+                            </Grid>
+
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                if (currComplainReasonId) {
+                                                    UpdateHandler(
+                                                        Url("complaints",
+                                                            `"state" : "${currStateFilter}", "complaint_reason_id" : "${currComplainReasonId}", "description" : "${currDescriptionFilter}"`,
+                                                            `${currPage}`,
+                                                            "DESC"
+                                                        )
+                                                    );
+                                                }
+                                                else {
+                                                    UpdateHandler(
+                                                        Url("complaints",
+                                                            `"state" : "${currStateFilter}", "description" : "${currDescriptionFilter}"`,
+                                                            `${currPage}`,
+                                                            "DESC"
+                                                        )
+                                                    );
+                                                }
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter);
+                                            }}
+                                            startIcon={<FilterListRoundedIcon />}
+                                        >
+                                            Filtrar
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+
+                        {showFilter ? (
+                            <Grid
+                                container
+                                direction="row"
+                                justify="space-between"
+                                alignItems="center"
+                                alignContent="flex-end"
+                                spacing={3}
+                                xs={12}
+                            >
+                                <Grid item>
+                                    <TextField
+                                        select
+                                        label="Motivo"
+                                        value={complainOption}
+                                        onChange={handleChangeComplain}
+                                        helperText="Por favor, selecione uma das opções"
+                                    >
+                                        {ComplaintReasons.map((option, index) => (
+                                            <MenuItem
+                                                key={option.id}
+                                                value={option.name}
+                                                name={option.id}
+                                                onClick={() =>
+                                                    ApplyFilterComplainReason(option.id, "complaint_reason_id")
+                                                }
+                                            >
+                                                {option.name}
+                                            </MenuItem>
+                                        ))}
+                                    </TextField>
+                                </Grid>
+                                <Grid item>
+                                    <TextField
+                                        select
+                                        label="Estado"
+                                        value={stateOption}
+                                        onChange={handleChangeState}
+                                        helperText="Por favor, selecione uma das opções"
+                                    >
+                                        {StateOptions.map((option, index) => (
+                                            <MenuItem
+                                                key={option.id}
+                                                value={option.name}
+                                                name={option.id}
+                                                onClick={() => ApplyFilterState(option.id, "state")}
+                                            >
+                                                {option.name}
+                                            </MenuItem>
+                                        ))}
+                                    </TextField>
+                                </Grid>
+                                <Grid item>
+                                    <TextField label="Descrição" onChange={DescriptionHandler} value={description} />
+                                </Grid>
+                            </Grid>
+                        ) : null}
+                    </Paper>
+
+                    <div style={{ height: "2em" }}></div>
+
+                    <Grid xs={12} container>
+                        <TableData top={TOP_LABELS}>
+                            <TableBody>
+                                {items.map((row, index) =>
+                                    index === items.length - 1 ? (
+                                        <StyledTableRow key={index}>
+                                            {/* Button to load more data */}
+                                            <StyledTableCell>
+                                                <Button
+                                                    color="primary"
+                                                    variant="text"
+                                                    // disabled={isLoadingMoreItems}
+                                                    startIcon={<AddRoundedIcon />}
+                                                    disabled={isLoadingMoreItems}
+                                                    onClick={() => {
+                                                        currPage++;
+                                                        if (currComplainReasonId) {
+                                                            LoadMoreItens(
+                                                                Url("complaints",
+                                                                    `"state" : "${currStateFilter}", "complaint_reason_id" : "${currComplainReasonId}", "description" : "${currDescriptionFilter}"`,
+                                                                    `${currPage}`,
+                                                                    "DESC"
+                                                                )
+                                                            );
+                                                        }
+                                                        else {
+                                                            LoadMoreItens(
+                                                                Url("complaints",
+                                                                    `"state" : "${currStateFilter}", "description" : "${currDescriptionFilter}"`,
+                                                                    `${currPage}`,
+                                                                    "DESC"
+                                                                )
+                                                            );
+                                                        }
+                                                    }}
+                                                >
+                                                    {isLoadingMoreItems ? (
+                                                        <CircularProgress size={24} />
+                                                    ) : (
+                                                            "Carregar mais itens"
+                                                        )}
+                                                </Button>
+                                            </StyledTableCell>
+                                        </StyledTableRow>
+                                    ) : (
+                                            <StyledTableRow
+                                                key={index}
+                                                style={{ flex: 1, width: "100%" }}
+                                            >
+                                                <StyledTableCell component="th" scope="row">
+                                                    {ComplaintStatus(row.state, row.complainable_type)}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">{row.id}</StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    {row.description}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    {row.complainable_id}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    {row.complainable_type}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    {DisplayDate(row.created_at)}
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    <Link to={`/admin/complaint/${row.id}`}>
+                                                        <IconButton
+                                                            onClick={() => {
+                                                                currPage = 0
+                                                                currStateFilter = "0"
+                                                                currDescriptionFilter = ""
+                                                                currComplainReasonId = null;
+                                                            }}
+                                                        >
+                                                            <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                                                        </IconButton>
+                                                    </Link>
+                                                </StyledTableCell>
+                                                <StyledTableCell align="right">
+                                                    <Button
+                                                        variant="text"
+                                                        secondary={true}
+                                                        startIcon={
+                                                            <LaunchRoundedIcon style={{ fill: "#FA8072" }} />
+                                                        }
+                                                    >
+                                                        <a
+                                                            style={{
+                                                                textDecoration: "none",
+                                                                color: "#FA8072",
+                                                            }}
+                                                            target="_blank"
+                                                            href={
+                                                                PORTAL_MEC +
+                                                                convertToLink(
+                                                                    row.complainable_type,
+                                                                    row.complainable_id
+                                                                )
+                                                            }
+                                                        >
+                                                            MEC RED
+                                                        </a>
+                                                    </Button>
+                                                </StyledTableCell>
+                                            </StyledTableRow>
+                                        )
+                                )}
+                            </TableBody>
+                        </TableData>
+                    </Grid>
+                </>
+            );
+        }
+    } else return <Unauthorized />
+};
+export default Complaints;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/EducationalObjects.js b/src/Admin/Pages/Pages/SubPages/EducationalObjects.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f2f3b543be97c65f8e86618d06f32e738333b29
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/EducationalObjects.js
@@ -0,0 +1,802 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+import moment from 'moment';
+// Imports from local files
+import TableData from "../../../Components/Components/Table";
+import SnackBar from "../../../../Components/SnackbarComponent";
+import AlertDialog from "../../../Components/Components/AlertDialog";
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+// Imports about icon
+import FilterListRoundedIcon from "@material-ui/icons/FilterListRounded";
+import AddRoundedIcon from "@material-ui/icons/AddRounded";
+import UpdateRoundedIcon from "@material-ui/icons/UpdateRounded";
+import TableBody from "@material-ui/core/TableBody";
+import TableCell from "@material-ui/core/TableCell";
+import TableRow from "@material-ui/core/TableRow";
+import IconButton from "@material-ui/core/IconButton";
+import CancelRoundedIcon from "@material-ui/icons/CancelRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import DeleteIcon from "@material-ui/icons/Delete";
+// Import from material-ui
+import { withStyles, makeStyles } from "@material-ui/core/styles";
+import Paper from "@material-ui/core/Paper";
+import Button from "@material-ui/core/Button";
+import Grid from "@material-ui/core/Grid";
+import { Typography, CircularProgress } from "@material-ui/core";
+import Popover from "@material-ui/core/Popover";
+import TextField from "@material-ui/core/TextField";
+// services
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//Filters
+import { Url, DeleteFilter } from "../../../Filters";
+//router 
+import { Link } from 'react-router-dom';
+import styled from 'styled-components'
+import MenuBookRoundedIcon from "@material-ui/icons/MenuBookRounded";
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+
+let currPage = 0;
+
+const StyledTableCell = withStyles((theme) => ({
+  head: {
+    backgroundColor: theme.palette.common.black,
+    color: theme.palette.common.white,
+  },
+  body: {
+    fontSize: 14,
+  },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+  root: {
+    "&:nth-of-type(odd)": {
+      backgroundColor: theme.palette.action.hover,
+    },
+  },
+}))(TableRow);
+
+const useStyles = makeStyles((theme) => ({
+  root: {
+    flexGrow: 1,
+  },
+  paper: {
+    padding: theme.spacing(1),
+    textAlign: "start",
+  },
+  button: {
+    margin: theme.spacing(1),
+    alignSelf: "flex-end",
+  },
+}));
+
+const EducationalObjects = () => {
+  const classes = useStyles();
+  const WINDOW_WIDTH = window.innerWidth
+
+  const addOndeLenght = [""];
+
+  const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+  const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+  const [items, setItems] = useState([]); //Necessary to consult the API, data
+
+  const [deleteItem, setDeleteItem] = useState({}); //Delete Item
+  const [isLoadingToDelete, setIsLoadingToDelete] = useState(null);
+  const [isUpdating, setIsUpdating] = useState(false);
+  const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false);
+
+  const [openAlertDialog, setOpenAlertDialog] = useState(false);
+
+  const [snackInfo, setSnackInfo] = useState({
+    message: "",
+    icon: "",
+    open: false,
+    color: "",
+  });
+
+  // **************** About the PopOver Menu ****************
+  const [anchorEl, setAnchorEl] = React.useState(null);
+  const [showAuthorField, setShowAuthorField] = useState(false); //show the text field of filter by Author
+  const [showDescriptionField, setShowDescriptionField] = useState(false); //show the text field of the filter by description
+  const [showStandadSearch, setShowStandarSearchField] = useState(false);
+
+  const [search, setSeacrh] = useState("");
+  const [author, setAuthor] = useState("");
+  const [description, setDescription] = useState(null);
+
+  const AuthorHandler = () => {
+    setAuthor("")
+    setShowAuthorField(!showAuthorField);
+    let url;
+    if (description)
+      url = Url("learning_objects", `"name" : "${search}", "author" : "", "description" : "${description}"`, currPage, "DESC")
+    else
+      url = Url("learning_objects", `"name" : "${search}", "author" : ""`, currPage, "DESC")
+    Filter(url);
+  };
+
+  const DescHandler = () => {
+    setDescription(null)
+    setShowDescriptionField(!showDescriptionField);
+    let url;
+    url = Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC")
+    Filter(url);
+  };
+
+  const StandartHandler = () => {
+    setSeacrh("")
+    setShowStandarSearchField(!showStandadSearch);
+    let url;
+    if (description)
+      url = Url("learning_objects", `"name" : "", "author" : "${author}", "description" : "${description}"`, currPage, "DESC")
+    else
+      url = Url("learning_objects", `"name" : "", "author" : "${author}"`, currPage, "DESC")
+    Filter(url);
+  };
+
+  const handleClick = (event) => {
+    setAnchorEl(event.currentTarget);
+  };
+
+  const handleClose = () => {
+    setAnchorEl(null);
+  };
+
+  const open = Boolean(anchorEl);
+  const id = open ? "simple-popover" : undefined;
+
+  const OnChangeSearchHandler = (e) => {
+    setSeacrh(e.target.value);
+    let url;
+    if (description)
+      url = Url("learning_objects", `"name" : "${search}", "author" : "${author}", "description" : "${description}"`, currPage, "DESC")
+    else
+      url = Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC")
+    Filter(url);
+  };
+
+  const onChangeAuthorHandler = (e) => {
+    setAuthor(e.target.value);
+    let url;
+    if (description)
+      url = Url("learning_objects", `"name" : "${search}", "author" : "${author}", "description" : "${description}"`, currPage, "DESC")
+    else
+      url = Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC")
+    Filter(url);
+  };
+
+  const onChangeDescriptionHandler = (e) => {
+    setDescription(e.target.value);
+    let url;
+    if (description)
+      url = Url("learning_objects", `"name" : "${search}", "author" : "${author}", "description" : "${description}"`, currPage, "DESC")
+    else
+      url = Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC")
+    Filter(url);
+  };
+  // **************** About the PopOverMenu ****************
+
+  //Controlls the state of the Alert Dialog
+  const HandleStateAlertDialog = (i) => {
+    const obj = { ...items[i] };
+    setDeleteItem(obj);
+    setOpenAlertDialog(!openAlertDialog);
+  };
+
+  //Controlls the state and the informations of the snack
+  const HandleSnack = (message, state, icon, color) => {
+    setSnackInfo({
+      message: message,
+      icon: icon,
+      open: state,
+      color: color,
+    });
+  };
+
+  //Defines which row must show the circular progress
+  const HandleStateCircularProgress = (i) => {
+    setIsLoadingToDelete(i);
+  };
+
+  //Filters the search
+  const Filter = (api) => {
+    getRequest(
+      api,
+      (data, header) => {
+        const arrData = [...data];
+        setItems(arrData.concat(addOndeLenght));
+      },
+      (error) => {
+        setError(true);
+      }
+    )
+  };
+
+  //This function updates List every time the content of the api changes
+  const UpdtateListData = (api) => {
+    getRequest(
+      api,
+      (data, header) => {
+        setItems([...data.concat(addOndeLenght)]);
+        HandleSnack(
+          "A lista de dados foi atualizada",
+          true,
+          "success",
+          "#228B22"
+        );
+        setIsUpdating(false);
+      },
+      (error) => {
+        HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+        setIsUpdating(false);
+      }
+    )
+  };
+
+  //Called when user want to delete one institution
+  async function DeleteHandler() {
+    const id = deleteItem.id;
+    HandleStateAlertDialog(null);
+    deleteRequest(
+      DeleteFilter("institutions", id),
+      (data) => {
+        if (data.errors)
+          HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+        else {
+          HandleSnack(
+            "A instituição foi deletada com sucesso",
+            true,
+            "success",
+            "#228B22"
+          );
+          currPage = 0;
+          UpdtateListData(Url("institutions", "", `${currPage}`, "DESC"));
+          HandleStateCircularProgress(null);
+        }
+      },
+      (error) => {
+        HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+        HandleStateCircularProgress(null);
+      }
+    )
+  }
+
+  const LoadMoreItens = async (api) => {
+    setIsLoadingMoreItems(true);
+    getRequest(
+      api,
+      (data, header) => {
+        const arrData = [...data];
+        if (arrData.length === 0) {
+          HandleSnack(
+            "Não há mais dados para serem carregados",
+            true,
+            "warning",
+            "#FFC125"
+          );
+        } else {
+          const arrItems = [...items];
+          arrItems.pop(); //Deleting the last position, that was used to display the button of load more items
+          const arrResult = arrItems.concat(arrData);
+          setItems(arrResult.concat(addOndeLenght));
+        }
+        setIsLoadingMoreItems(false);
+      },
+      (error) => {
+        HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+        setIsLoadingMoreItems(false);
+      }
+    )
+  };
+
+  const DisplayDate = (date) => {
+    const convertedData = moment.utc(date);
+    return moment(convertedData)
+      .format("LLL")
+      .toString();
+  };
+
+  useEffect(() => {
+    getRequest(
+      Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, `${currPage}`, "DESC"),
+      (data, header) => {
+        setIsLoaded(true);
+        setItems(data.concat(addOndeLenght));
+      },
+      (error) => {
+        setError(true);
+
+      }
+    )
+  }, []);
+
+  if (error) {
+    return <div>Error: {error.message}</div>;
+  }
+  if (!isLoaded) {
+    return <LoadingSpinner text="Carregando..." />
+  } else {
+    //Words that defines that column
+    const topTable = [
+      "CRIADO EM",
+      "NOME",
+      "DESCRIÇÃO",
+      "AUTOR",
+      "SCORE",
+      "VISUALIZAR",
+      "DELETAR",
+    ];
+
+    //Buttons from PopOverMenu
+    const flatButtonsFromPopOverMenu = [
+      {
+        label: "Pesquisa padrão",
+        onClick: StandartHandler,
+        color: showStandadSearch ? "primary" : "default",
+      },
+      {
+        label: "Autor",
+        onClick: AuthorHandler,
+        color: showAuthorField ? "primary" : "default",
+      },
+      {
+        label: "Descrição",
+        onClick: DescHandler,
+        color: showDescriptionField ? "primary" : "default",
+      },
+    ];
+
+    //Field of the Filter
+    const TextFieldOfTheFilter = [
+      {
+        label: "Pesquisar",
+        show: showStandadSearch,
+        onChange: (event) => OnChangeSearchHandler(event),
+        hide: StandartHandler,
+      },
+      {
+        label: "Autor",
+        show: showAuthorField,
+        onChange: (event) => onChangeAuthorHandler(event),
+        hide: AuthorHandler,
+      },
+      {
+        label: "Descrição",
+        show: showDescriptionField,
+        onChange: (event) => onChangeDescriptionHandler(event),
+        hide: DescHandler,
+      },
+    ];
+    if (WINDOW_WIDTH <= 1058) {
+      return (
+        <div>
+          <SnackBar
+            severity={snackInfo.icon}
+            text={snackInfo.message}
+            snackbarOpen={snackInfo.open}
+            color={snackInfo.color}
+            handleClose={() =>
+              setSnackInfo({
+                message: "",
+                icon: "",
+                open: false,
+                color: "",
+              })
+            }
+          />
+          {/************** Start of the header **************/}
+          <Paper style={{ padding: "1em" }}>
+            <Grid container spacing={3} direction="row" alignItems="center">
+              <Grid item xs={6}>
+                <Typography className={classes.paper} variant="h4">
+                  Lista de objetos educacionais
+                                </Typography>
+              </Grid>
+              <Grid
+                item
+                xs={6}
+              >
+                <Grid container justify="flex-end" spacing={3}>
+                  <Grid item>
+                    <Button
+                      aria-describedby={id}
+                      variant="contained"
+                      color="secondary"
+                      className={classes.button}
+                      onClick={(event) => {
+                        handleClick(event)
+                      }}
+                      startIcon={
+                        <FilterListRoundedIcon style={{ fill: "white" }} />
+                      }
+                    >
+                      Filtrar
+                                        </Button>
+                    <Popover
+                      id={id}
+                      open={open}
+                      anchorEl={anchorEl}
+                      onClose={handleClose}
+                      anchorOrigin={{
+                        vertical: "bottom",
+                        horizontal: "center",
+                      }}
+                      transformOrigin={{
+                        vertical: "top",
+                        horizontal: "center",
+                      }}
+                    >
+                      {flatButtonsFromPopOverMenu.map((flat, index) => (
+                        <Button
+                          key={index}
+                          onClick={flat.onClick}
+                          color={flat.color}
+                        >
+                          {flat.label}
+                        </Button>
+                      ))}
+                    </Popover>
+                  </Grid>
+
+                  <Grid item>
+                    <Button
+                      variant="contained"
+                      color="secondary"
+                      className={classes.button}
+                      startIcon={<UpdateRoundedIcon />}
+                      disabled={isUpdating}
+                      onClick={() => {
+                        currPage = 0;
+                        setIsUpdating(true);
+                        if (description)
+                          UpdtateListData(Url("learning_objects", `"name" : "${search}", "author" : "${author}", "description" : "${description}"`, currPage, "DESC"))
+                        else
+                          UpdtateListData(Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC"))
+                      }}
+                    >
+                      {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                    </Button>
+                  </Grid>
+                </Grid>
+              </Grid>
+            </Grid>
+            <Grid item xs={12}>
+              <Grid container justify="space-between" spacing={3}>
+                {TextFieldOfTheFilter.map((field, index) => (
+                  <Grid item key={index}>
+                    {field.show ? (
+                      <div>
+                        <TextField
+                          id={index}
+                          label={field.label}
+                          type="search"
+                          onChange={field.onChange}
+                        />
+                        <IconButton
+                          size="small"
+                          color="primary"
+                          onClick={field.hide}
+                        >
+                          <CancelRoundedIcon />
+                        </IconButton>
+                      </div>
+                    ) : null}
+                  </Grid>
+                ))}
+              </Grid>
+            </Grid>
+          </Paper>
+          {/************** End of the header **************/}
+
+          <div style={{ height: "2em" }}></div>
+
+          {/************** Start of display data in table **************/}
+          {items.map((row, index) =>
+            index === items.length - 1 ? (
+              <StyledDivButton>
+                <Button
+                  key={index}
+                  color="primary"
+                  variant="text"
+                  // disabled={isLoadingMoreItems}
+                  startIcon={<AddRoundedIcon />}
+                  disabled={isLoadingMoreItems}
+                  onClick={() => {
+                    currPage++
+                    if (description)
+                      LoadMoreItens(Url("learning_objects", `"name" : "${search}", "author" : "${author}", "description" : "${description}"`, currPage, "DESC"))
+                    else
+                      LoadMoreItens(Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC"))
+                  }}
+                >
+                  {isLoadingMoreItems ? (
+                    <CircularProgress size={24} />
+                  ) : (
+                      "Carregar mais itens"
+                    )}
+                </Button>
+              </StyledDivButton>
+            ) : (
+                <>
+                  <MobileList
+                    key={index}
+                    title={row.name}
+                    subtitle={row.id}
+                    backColor={"#673ab7"}
+                    avatar={<MenuBookRoundedIcon />}
+                    href={`/admin/learningObject/${row.id}`}
+                    reset={() => {
+                      currPage = 0;
+                    }}
+                    data={
+                      [
+                        {
+                          title: "Criado em",
+                          subtitle: DisplayDate(row.created_at)
+                        },
+                        {
+                          title: "Descrição",
+                          subtitle: row.description
+                        },
+                        {
+                          title: "Autor(a)",
+                          subtitle: row.author
+                        },
+                        {
+                          title: "Score",
+                          subtitle: row.score
+                        },
+                      ]
+                    }
+                  />
+                  <div style={{ height: "0.5em" }} />
+                </>
+              )
+          )}
+          {/************** End of display data in table **************/}
+        </div>
+      )
+    }
+    else {
+      return (
+        <div>
+          <SnackBar
+            severity={snackInfo.icon}
+            text={snackInfo.message}
+            snackbarOpen={snackInfo.open}
+            color={snackInfo.color}
+            handleClose={() =>
+              setSnackInfo({
+                message: "",
+                icon: "",
+                open: false,
+                color: "",
+              })
+            }
+          />
+          {/************** Start of the header **************/}
+          <Paper style={{ padding: "1em" }}>
+            <Grid container spacing={3} direction="row" alignItems="center">
+              <Grid item xs={6}>
+                <Typography className={classes.paper} variant="h4">
+                  Lista de objetos educacionais
+                                </Typography>
+              </Grid>
+              <Grid
+                item
+                xs={6}
+              >
+                <Grid container justify="flex-end" spacing={3}>
+                  <Grid item>
+                    <Button
+                      aria-describedby={id}
+                      variant="contained"
+                      color="secondary"
+                      className={classes.button}
+                      onClick={(event) => {
+                        handleClick(event)
+                      }}
+                      startIcon={
+                        <FilterListRoundedIcon style={{ fill: "white" }} />
+                      }
+                    >
+                      Filtrar
+                                        </Button>
+                    <Popover
+                      id={id}
+                      open={open}
+                      anchorEl={anchorEl}
+                      onClose={handleClose}
+                      anchorOrigin={{
+                        vertical: "bottom",
+                        horizontal: "center",
+                      }}
+                      transformOrigin={{
+                        vertical: "top",
+                        horizontal: "center",
+                      }}
+                    >
+                      {flatButtonsFromPopOverMenu.map((flat, index) => (
+                        <Button
+                          key={index}
+                          onClick={flat.onClick}
+                          color={flat.color}
+                        >
+                          {flat.label}
+                        </Button>
+                      ))}
+                    </Popover>
+                  </Grid>
+
+                  <Grid item>
+                    <Button
+                      variant="contained"
+                      color="secondary"
+                      className={classes.button}
+                      startIcon={<UpdateRoundedIcon />}
+                      disabled={isUpdating}
+                      onClick={() => {
+                        currPage = 0;
+                        setIsUpdating(true);
+                        if (description)
+                          UpdtateListData(Url("learning_objects", `"name" : "${search}", "author" : "${author}", "description" : "${description}"`, currPage, "DESC"))
+                        else
+                          UpdtateListData(Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC"))
+                      }}
+                    >
+                      {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                    </Button>
+                  </Grid>
+                </Grid>
+              </Grid>
+            </Grid>
+            <Grid item xs={12}>
+              <Grid container justify="space-between" spacing={3}>
+                {TextFieldOfTheFilter.map((field, index) => (
+                  <Grid item key={index}>
+                    {field.show ? (
+                      <div>
+                        <TextField
+                          id={index}
+                          label={field.label}
+                          type="search"
+                          onChange={field.onChange}
+                        />
+                        <IconButton
+                          size="small"
+                          color="primary"
+                          onClick={field.hide}
+                        >
+                          <CancelRoundedIcon />
+                        </IconButton>
+                      </div>
+                    ) : null}
+                  </Grid>
+                ))}
+              </Grid>
+            </Grid>
+          </Paper>
+          {/************** End of the header **************/}
+
+          <div style={{ height: "2em" }}></div>
+
+          {/************** Start of display data in table **************/}
+          <TableData top={topTable}>
+            <TableBody>
+              {items.map((row, index) =>
+                index === items.length - 1 ? (
+                  <StyledTableRow key={index}>
+                    {/* Button to load more data */}
+                    <StyledTableCell>
+                      <Button
+                        color="primary"
+                        variant="text"
+                        startIcon={<AddRoundedIcon />}
+                        disabled={
+                          isLoadingMoreItems
+                        }
+                        onClick={() => {
+                          currPage++
+                          if (description)
+                            LoadMoreItens(Url("learning_objects", `"name" : "${search}", "author" : "${author}", "description" : "${description}"`, currPage, "DESC"))
+                          else
+                            LoadMoreItens(Url("learning_objects", `"name" : "${search}", "author" : "${author}"`, currPage, "DESC"))
+                        }}
+                      >
+                        {isLoadingMoreItems ? (
+                          <CircularProgress size={24} />
+                        ) : (
+                            "Carregar mais itens"
+                          )}
+                      </Button>
+                    </StyledTableCell>
+                  </StyledTableRow>
+                ) : (
+                    <StyledTableRow key={index}>
+                      <StyledTableCell component="th" scope="row">
+                        {DisplayDate(row.created_at)}
+                      </StyledTableCell>
+                      <StyledTableCell align="right">
+                        {row.name}
+                      </StyledTableCell>
+                      <StyledTableCell align="right">
+                        {row.description}
+                      </StyledTableCell>
+                      <StyledTableCell align="right">
+                        {row.author}
+                      </StyledTableCell>
+                      <StyledTableCell align="right">
+                        {row.score}
+                      </StyledTableCell>
+                      <StyledTableCell align="right">
+                        <Link to={`/admin/learningObject/${row.id}`}>
+                          <IconButton onClick={() => {
+                            currPage = 0
+
+                          }}>
+                            <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                          </IconButton>
+                        </Link>
+                      </StyledTableCell>
+                      <StyledTableCell align="right">
+                        {isLoadingToDelete === index ? (
+                          <CircularProgress size={24} color="primary" />
+                        ) : (
+                            <IconButton
+                              onClick={() => {
+                                HandleStateAlertDialog(index);
+                                HandleStateCircularProgress(index);
+                              }}
+                            >
+                              <DeleteIcon style={{ fill: "#FF0000" }} />
+                            </IconButton>
+                          )}
+                      </StyledTableCell>
+                    </StyledTableRow>
+                  )
+              )}
+            </TableBody>
+          </TableData>
+          {/************** End of display data in table **************/}
+
+          {/* This alert will be displayed if the user click to delete an institution */}
+          <AlertDialog
+            open={openAlertDialog}
+            OnDelete={DeleteHandler}
+            deleteItem={deleteItem}
+            HandleClose={() => {
+              setOpenAlertDialog(false);
+              HandleStateCircularProgress(null);
+            }}
+          />
+        </div>
+      )
+    }
+  }
+};
+
+export default EducationalObjects;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/Inframe.js b/src/Admin/Pages/Pages/SubPages/Inframe.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb261c41563de5b2e90c02bae286a72d449d690b
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Inframe.js
@@ -0,0 +1,40 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React from 'react';
+import Welcome from '../../../Components/Components/Welcome'; 
+
+//This file show the charts
+
+export default class IframeComponent extends React.Component {
+    render() {
+        return (
+            <div>
+                <Welcome/>
+                <div style={{height : '1em'}}></div>
+                <iframe
+                    src='https://metabase.c3sl.ufpr.br/public/dashboard/8ada315d-b8df-4b18-b7fb-d06b0ac64623'
+                    height='800px'
+                    width='100%' 
+                    // allowTransparency={true} 
+                    frameBorder={0}
+                /> 
+            </div>
+        )
+    }
+}
diff --git a/src/Admin/Pages/Pages/SubPages/Institutions.js b/src/Admin/Pages/Pages/SubPages/Institutions.js
new file mode 100644
index 0000000000000000000000000000000000000000..c33932641bd59f4921d3bad487fe2a75e27ec797
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Institutions.js
@@ -0,0 +1,870 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState, useEffect } from "react";
+// Imports from local files
+import TableData from "../../../Components/Components/Table";
+import SnackBar from "../../../../Components/SnackbarComponent";
+import AlertDialog from "../../../Components/Components/AlertDialog";
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+// Imports about icon
+import FilterListRoundedIcon from "@material-ui/icons/FilterListRounded";
+import AddRoundedIcon from "@material-ui/icons/AddRounded";
+import UpdateRoundedIcon from "@material-ui/icons/UpdateRounded";
+import TableBody from "@material-ui/core/TableBody";
+import TableCell from "@material-ui/core/TableCell";
+import TableRow from "@material-ui/core/TableRow";
+import IconButton from "@material-ui/core/IconButton";
+import CancelRoundedIcon from "@material-ui/icons/CancelRounded";
+import VisibilityIcon from "@material-ui/icons/Visibility";
+import DeleteIcon from "@material-ui/icons/Delete";
+// Import from material-ui
+import { withStyles, makeStyles } from "@material-ui/core/styles";
+import Paper from "@material-ui/core/Paper";
+import Button from "@material-ui/core/Button";
+import Grid from "@material-ui/core/Grid";
+import { Typography, CircularProgress } from "@material-ui/core";
+import Popover from "@material-ui/core/Popover";
+import TextField from "@material-ui/core/TextField";
+// services
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//Filters
+import { Url, GetOneOfAllUrl, DeleteFilter } from "../../../Filters";
+//router 
+import { Link } from 'react-router-dom';
+import styled from "styled-components"
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import AccountBalanceRoundedIcon from "@material-ui/icons/AccountBalanceRounded";
+
+let currPage = 0;
+let transformListToAsc = false
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        "&:nth-of-type(odd)": {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const useStyles = makeStyles((theme) => ({
+    root: {
+        flexGrow: 1,
+    },
+    paper: {
+        padding: theme.spacing(1),
+        textAlign: "start",
+    },
+    button: {
+        margin: theme.spacing(1),
+        alignSelf: "flex-end",
+    },
+}));
+
+const Institutions = () => {
+    const classes = useStyles();
+    const WINDOW_WIDTH = window.innerWidth
+
+    const addOndeLenght = [""];
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+
+    const [deleteItem, setDeleteItem] = useState({}); //Delete Item
+    const [isLoadingToDelete, setIsLoadingToDelete] = useState(null);
+    const [isUpdating, setIsUpdating] = useState(false);
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false);
+
+    const [openAlertDialog, setOpenAlertDialog] = useState(false);
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: "",
+        icon: "",
+        open: false,
+        color: "",
+    });
+
+    // **************** About the PopOver Menu ****************
+    const [anchorEl, setAnchorEl] = React.useState(null);
+    const [showCityField, setShowCityField] = useState(false); //show the text field of filter by city
+    const [showContryField, setShowCountryField] = useState(false); //show the text field of the filter by country
+    const [showDescriptionField, setShowDescriptionField] = useState(false); //show the text field of the filter by description
+    const [showStandadSearch, setShowStandarSearchField] = useState(false);
+
+    const [isFilteringByName, setisFilteringByName] = useState(false);
+    const [isFilteringByCity, setisFilteringByCity] = useState(false);
+    const [isFilteringByCounty, setisFilteringByCountry] = useState(false);
+    const [isFilteringByDesc, setisFilteringByDesc] = useState(false);
+
+    const [search, setSeacrh] = useState("");
+    const [city, setCity] = useState("");
+    const [country, setCountry] = useState("");
+    const [description, setDescription] = useState("");
+
+    const CityHandler = () => {
+        currPage = 0;
+        transformListToAsc = false
+        setShowCityField(!showCityField);
+        setisFilteringByCity(!isFilteringByCity);
+        UpdtateListData(Url("institutions", "", `${currPage}`, "DESC"));
+    };
+
+    const CountryHandler = () => {
+        currPage = 0;
+        transformListToAsc = false
+        setShowCountryField(!showContryField);
+        UpdtateListData(Url("institutions", "", `${currPage}`, "DESC"));
+        setisFilteringByCountry(!isFilteringByCounty);
+    };
+
+    const DescHandler = () => {
+        currPage = 0;
+        transformListToAsc = false
+        setShowDescriptionField(!showDescriptionField);
+        setisFilteringByDesc(!isFilteringByDesc);
+        UpdtateListData(Url("institutions", "", `${currPage}`, "DESC"));
+    };
+
+    const StandartHandler = () => {
+        currPage = 0;
+        transformListToAsc = false
+        setShowStandarSearchField(!showStandadSearch);
+        setisFilteringByName(!isFilteringByName);
+        UpdtateListData(Url("institutions", "", `${currPage}`, "DESC"));
+    };
+
+    const handleClick = (event) => {
+        setAnchorEl(event.currentTarget);
+    };
+
+    const handleClose = () => {
+        setAnchorEl(null);
+    };
+
+    const open = Boolean(anchorEl);
+    const id = open ? "simple-popover" : undefined;
+
+    const OnChangeSearchHandler = (e) => {
+        setSeacrh(e.target.value);
+        Filter(GetOneOfAllUrl("institutions", `"name" : "${search}"`));
+    };
+
+    const onChangeCityHandler = (e) => {
+        setCity(e.target.value);
+        Filter(GetOneOfAllUrl("institutions", `"city" : "${city}"`));
+    };
+
+    const onChangeCountryHandler = (e) => {
+        setCountry(e.target.value);
+        Filter(GetOneOfAllUrl("institutions", `"country" : "${country}"`));
+    };
+
+    const onChangeDescriptionHandler = (e) => {
+        setDescription(e.target.value);
+        Filter(GetOneOfAllUrl("institutions", `"description" : "${description}"`));
+    };
+    // **************** About the PopOverMenu ****************
+
+    //Controlls the state of the Alert Dialog
+    const HandleStateAlertDialog = (i) => {
+        const obj = { ...items[i] };
+        setDeleteItem(obj);
+        setOpenAlertDialog(!openAlertDialog);
+    };
+
+    //Controlls the state and the informations of the snack
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color,
+        });
+    };
+
+    //Defines which row must show the circular progress
+    const HandleStateCircularProgress = (i) => {
+        setIsLoadingToDelete(i);
+    };
+
+    //Filters the search
+    const Filter = (api) => {
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data];
+                transformListToAsc = false
+                setItems(arrData.concat(addOndeLenght));
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    };
+
+    //This function updates List every time the content of the api changes
+    const UpdtateListData = (api) => {
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data];
+                setItems(arrData.concat(addOndeLenght));
+                HandleSnack(
+                    "A lista de dados foi atualizada",
+                    true,
+                    "success",
+                    "#228B22"
+                );
+                setIsUpdating(false);
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                setIsUpdating(false);
+            }
+        )
+    };
+
+    //Called when user want to delete one institution
+    async function DeleteHandler() {
+        const id = deleteItem.id;
+        HandleStateAlertDialog(null);
+        deleteRequest(
+            DeleteFilter("institutions", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro!", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A instituição foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    currPage = 0;
+                    transformListToAsc = false
+                    UpdtateListData(Url("institutions", "", `${currPage}`, "DESC"));
+                    HandleStateCircularProgress(null);
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro!", true, "warning", "#FA8072");
+                HandleStateCircularProgress(null);
+            }
+        )
+    }
+
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true);
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data];
+                console.log(arrData);
+                if (arrData.length === 0) {
+                    HandleSnack(
+                        "Não há mais dados para serem carregados",
+                        true,
+                        "warning",
+                        "#FFC125"
+                    );
+                } else {
+                    const arrItems = [...items];
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items
+                    const arrResult = arrItems.concat(arrData);
+                    setItems(arrResult.concat(addOndeLenght));
+                }
+                setIsLoadingMoreItems(false);
+            },
+            (error) => {
+                HandleSnack("Erro ao carregar os dados", true, "warning", "#FA8072");
+                setIsLoadingMoreItems(false);
+            }
+        )
+    };
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('institutions', '', `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(addOndeLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('institutions', '', `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(addOndeLenght))
+                },
+                (error) => {
+                    HandleSnack('institutions ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    useEffect(() => {
+        getRequest(
+            Url("institutions", "", `${currPage}`, "DESC"),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(addOndeLenght));
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    }
+    if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        //Words that defines that column
+        const topTable = [
+            "ID",
+            "NOME",
+            "DESCRIÇÃO",
+            "CIDADE",
+            "PAÍS",
+            "VISUALIZAR",
+            "DELETAR",
+        ];
+
+        //Buttons from PopOverMenu
+        const flatButtonsFromPopOverMenu = [
+            {
+                label: "Pesquisa padrão",
+                onClick: StandartHandler,
+                color: showStandadSearch ? "primary" : "default",
+            },
+            {
+                label: "Cidade",
+                onClick: CityHandler,
+                color: showCityField ? "primary" : "default",
+            },
+            {
+                label: "País",
+                onClick: CountryHandler,
+                color: showContryField ? "primary" : "default",
+            },
+            {
+                label: "Descrição",
+                onClick: DescHandler,
+                color: showDescriptionField ? "primary" : "default",
+            },
+        ];
+
+        //Field of the Filter
+        const TextFieldOfTheFilter = [
+            {
+                label: "Pesquisar",
+                show: showStandadSearch,
+                onChange: (event) => OnChangeSearchHandler(event),
+                hide: StandartHandler,
+            },
+            {
+                label: "Cidade",
+                show: showCityField,
+                onChange: (event) => onChangeCityHandler(event),
+                hide: CityHandler,
+            },
+            {
+                label: "País",
+                show: showContryField,
+                onChange: (event) => onChangeCountryHandler(event),
+                hide: CountryHandler,
+            },
+            {
+                label: "Descrição",
+                show: showDescriptionField,
+                onChange: (event) => onChangeDescriptionHandler(event),
+                hide: DescHandler,
+            },
+        ];
+
+        if (WINDOW_WIDTH <= 977) {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+                    {/************** Start of the header **************/}
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography className={classes.paper} variant="h4">
+                                    Lista de Instituições
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            aria-describedby={id}
+                                            variant="contained"
+                                            color="secondary"
+                                            className={classes.button}
+                                            onClick={handleClick}
+                                            startIcon={
+                                                <FilterListRoundedIcon style={{ fill: "white" }} />
+                                            }
+                                        >
+                                            Filtrar
+                                        </Button>
+                                        <Popover
+                                            id={id}
+                                            open={open}
+                                            anchorEl={anchorEl}
+                                            onClose={handleClose}
+                                            anchorOrigin={{
+                                                vertical: "bottom",
+                                                horizontal: "center",
+                                            }}
+                                            transformOrigin={{
+                                                vertical: "top",
+                                                horizontal: "center",
+                                            }}
+                                        >
+                                            {flatButtonsFromPopOverMenu.map((flat, index) => (
+                                                <Button
+                                                    key={index}
+                                                    onClick={flat.onClick}
+                                                    color={flat.color}
+                                                >
+                                                    {flat.label}
+                                                </Button>
+                                            ))}
+                                        </Popover>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/InstitutionCreate'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                className={classes.button}
+                                                startIcon={<AddRoundedIcon style={{ fill: "white" }} />}
+                                                onClick={() => {
+                                                    currPage = 0
+                                                    transformListToAsc = false
+                                                }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            className={classes.button}
+                                            startIcon={<UpdateRoundedIcon />}
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                transformListToAsc = false
+                                                setIsUpdating(true);
+                                                UpdtateListData(
+                                                    Url("institutions", "", `${currPage}`, "DESC")
+                                                );
+                                            }}
+                                        >
+                                            {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                        <Grid item xs={12}>
+                            <Grid container justify="space-between" spacing={3}>
+                                {TextFieldOfTheFilter.map((field, index) => (
+                                    <Grid item key={index}>
+                                        {field.show ? (
+                                            <div>
+                                                <TextField
+                                                    id={index}
+                                                    label={field.label}
+                                                    type="search"
+                                                    onChange={field.onChange}
+                                                />
+                                                <IconButton
+                                                    size="small"
+                                                    color="primary"
+                                                    onClick={field.hide}
+                                                >
+                                                    <CancelRoundedIcon />
+                                                </IconButton>
+                                            </div>
+                                        ) : null}
+                                    </Grid>
+                                ))}
+                            </Grid>
+                        </Grid>
+                    </Paper>
+                    {/************** End of the header **************/}
+
+                    <div style={{ height: "2em" }}></div>
+
+                    {/************** Start of display data in table **************/}
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('institutions', '', `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('institutions', '', `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#ff7f00"}
+                                        avatar={<AccountBalanceRoundedIcon />}
+                                        href={`/admin/institution/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0
+                                            transformListToAsc = false
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Descrição",
+                                                    subtitle: row.description ? row.description : "Sem dado"
+
+                                                },
+                                                {
+                                                    title: "Cidade",
+                                                    subtitle: row.city ? row.city : "Sem dado"
+
+                                                },
+                                                {
+                                                    title: "País",
+                                                    subtitle: row.country ? row.country : "Sem dado"
+                                                },
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                    {/************** End of display data in table **************/}
+
+                    {/* This alert will be displayed if the user click to delete an institution */}
+                </div>
+            )
+        }
+        else {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() =>
+                            setSnackInfo({
+                                message: "",
+                                icon: "",
+                                open: false,
+                                color: "",
+                            })
+                        }
+                    />
+                    {/************** Start of the header **************/}
+                    <Paper style={{ padding: "1em" }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography className={classes.paper} variant="h4">
+                                    Lista de Instituições
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            aria-describedby={id}
+                                            variant="contained"
+                                            color="secondary"
+                                            className={classes.button}
+                                            onClick={handleClick}
+                                            startIcon={
+                                                <FilterListRoundedIcon style={{ fill: "white" }} />
+                                            }
+                                        >
+                                            Filtrar
+                                        </Button>
+                                        <Popover
+                                            id={id}
+                                            open={open}
+                                            anchorEl={anchorEl}
+                                            onClose={handleClose}
+                                            anchorOrigin={{
+                                                vertical: "bottom",
+                                                horizontal: "center",
+                                            }}
+                                            transformOrigin={{
+                                                vertical: "top",
+                                                horizontal: "center",
+                                            }}
+                                        >
+                                            {flatButtonsFromPopOverMenu.map((flat, index) => (
+                                                <Button
+                                                    key={index}
+                                                    onClick={flat.onClick}
+                                                    color={flat.color}
+                                                >
+                                                    {flat.label}
+                                                </Button>
+                                            ))}
+                                        </Popover>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/InstitutionCreate'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                className={classes.button}
+                                                startIcon={<AddRoundedIcon style={{ fill: "white" }} />}
+                                                onClick={() => {
+                                                    currPage = 0
+                                                    transformListToAsc = false
+                                                }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            className={classes.button}
+                                            startIcon={<UpdateRoundedIcon />}
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0;
+                                                transformListToAsc = false
+                                                setIsUpdating(true);
+                                                UpdtateListData(
+                                                    Url("institutions", "", `${currPage}`, "DESC")
+                                                );
+                                            }}
+                                        >
+                                            {isUpdating ? <CircularProgress size={24} /> : "Atualizar"}
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                        <Grid item xs={12}>
+                            <Grid container justify="space-between" spacing={3}>
+                                {TextFieldOfTheFilter.map((field, index) => (
+                                    <Grid item key={index}>
+                                        {field.show ? (
+                                            <div>
+                                                <TextField
+                                                    id={index}
+                                                    label={field.label}
+                                                    type="search"
+                                                    onChange={field.onChange}
+                                                />
+                                                <IconButton
+                                                    size="small"
+                                                    color="primary"
+                                                    onClick={field.hide}
+                                                >
+                                                    <CancelRoundedIcon />
+                                                </IconButton>
+                                            </div>
+                                        ) : null}
+                                    </Grid>
+                                ))}
+                            </Grid>
+                        </Grid>
+                    </Paper>
+                    {/************** End of the header **************/}
+
+                    <div style={{ height: "2em" }}></div>
+
+                    {/************** Start of display data in table **************/}
+                    <TableData top={topTable} onIconPressed={InvertList}>
+                        <TableBody>
+                            {items.map((row, index) =>
+                                index === items.length - 1 ? (
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color="primary"
+                                                variant="text"
+                                                startIcon={<AddRoundedIcon />}
+                                                disabled={
+                                                    isLoadingMoreItems ||
+                                                    isFilteringByCity ||
+                                                    isFilteringByCounty ||
+                                                    isFilteringByDesc ||
+                                                    isFilteringByName
+                                                }
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('institutions', '', `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('institutions', '', `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {isLoadingMoreItems ? (
+                                                    <CircularProgress size={24} />
+                                                ) : (
+                                                        "Carregar mais itens"
+                                                    )}
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                                ) : (
+                                        <StyledTableRow key={index}>
+                                            <StyledTableCell component="th" scope="row">
+                                                {row.id}
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">{row.name}</StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                {row.description}
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">{row.city}</StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                {row.country}
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                <Link to={`/admin/institution/${row.id}`}>
+                                                    <IconButton onClick={() => {
+                                                        currPage = 0
+                                                        transformListToAsc = false
+                                                    }}>
+                                                        <VisibilityIcon style={{ fill: "#00bcd4" }} />
+                                                    </IconButton>
+                                                </Link>
+                                            </StyledTableCell>
+                                            <StyledTableCell align="right">
+                                                {isLoadingToDelete === index ? (
+                                                    <CircularProgress size={24} color="primary" />
+                                                ) : (
+                                                        <IconButton
+                                                            onClick={() => {
+                                                                HandleStateAlertDialog(index);
+                                                                HandleStateCircularProgress(index);
+                                                            }}
+                                                        >
+                                                            <DeleteIcon style={{ fill: "#FF0000" }} />
+                                                        </IconButton>
+                                                    )}
+                                            </StyledTableCell>
+                                        </StyledTableRow>
+                                    )
+                            )}
+                        </TableBody>
+                    </TableData>
+                    {/************** End of display data in table **************/}
+
+                    {/* This alert will be displayed if the user click to delete an institution */}
+                    <AlertDialog
+                        open={openAlertDialog}
+                        OnDelete={DeleteHandler}
+                        deleteItem={deleteItem}
+                        HandleClose={() => {
+                            setOpenAlertDialog(false);
+                            HandleStateCircularProgress(null);
+                        }}
+                    />
+                </div>
+            )
+        }
+    }
+};
+
+export default Institutions;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/Languages.js b/src/Admin/Pages/Pages/SubPages/Languages.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c003e96d51178a8f2efb572daad321800e0bd19
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Languages.js
@@ -0,0 +1,500 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState } from 'react'
+//imports from local files 
+import TableData from '../../../Components/Components/Table';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import AlertDialog from "../../../Components/Components/AlertDialog";
+import { Url } from '../../../Filters';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import { DeleteFilter } from '../../../Filters';
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//imports from material ui 
+import { withStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import TableCell from '@material-ui/core/TableCell';
+import TableRow from '@material-ui/core/TableRow';
+import IconButton from '@material-ui/core/IconButton';
+import { Button, Typography, Paper, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import UpdateRoundedIcon from '@material-ui/icons/UpdateRounded';
+import EditRoundedIcon from '@material-ui/icons/EditRounded';
+import DeleteRoundedIcon from '@material-ui/icons/DeleteRounded';
+//router
+import { Link } from 'react-router-dom';
+import styled from "styled-components"
+import LanguageRoundedIcon from "@material-ui/icons/LanguageRounded";
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+
+let currPage = 0;
+let transformListToAsc = false;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        '&:nth-of-type(odd)': {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const Languages = () => {
+    const ADD_ONE_LENGHT = [""];
+    const TOP_LABELS = ['ID', 'NOME', 'CODE', 'EDITAR', 'DELETAR'] //Labels from Table  
+    const WINDOW_WIDTH = window.innerWidth
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data 
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false) //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+    const [openAlertDialog, setOpenAlertDialog] = useState(false); //controlls the state od alert dialog 
+
+    const [deleteItem, setDeleteItem] = useState({}); //Delete Item
+    const [isLoadingToDelete, setIsLoadingToDelete] = useState(null);
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    //handle load more items
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data]
+                if (arrData.length === 0) {
+                    HandleSnack('Não há mais dados para serem carregados', true, 'warning', '#FFC125')
+                } else {
+                    const arrItems = [...items]
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items 
+                    const arrResult = arrItems.concat(arrData)
+                    setItems(arrResult.concat(ADD_ONE_LENGHT))
+                }
+                setIsLoadingMoreItems(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsLoadingMoreItems(false)
+            }
+        )
+    }
+
+    // handle update list data
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true)
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack('A lista de dados foi atualizada', true, 'success', '#228B22')
+                const arrData = [...data]
+                setItems(arrData.concat(ADD_ONE_LENGHT))
+                setIsUpdating(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsUpdating(false)
+            }
+        )
+    }
+
+    //handle Delete
+    async function DeleteHandler() {
+        const id = deleteItem.id;
+        HandleStateAlertDialog(null);
+        deleteRequest(
+            DeleteFilter("languages", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A língua foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    currPage = 0;
+                    transformListToAsc = false
+                    UpdateHandler(Url("languages", "", `${currPage}`, "DESC"));
+                    HandleStateCircularProgress(null);
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                HandleStateCircularProgress(null);
+            }
+        )
+    }
+
+    const HandleStateCircularProgress = (i) => {
+        setIsLoadingToDelete(i);
+    };
+
+    const HandleStateAlertDialog = (i) => {
+        const obj = { ...items[i] };
+        setDeleteItem(obj);
+        setOpenAlertDialog(!openAlertDialog);
+    };
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('languages', '', `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(ADD_ONE_LENGHT))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('languages', '', `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(ADD_ONE_LENGHT))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url('languages', '', `${currPage}`, 'DESC'),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(ADD_ONE_LENGHT));
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        if (WINDOW_WIDTH <= 755) {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Linguagens
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('languages', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/languageCreate'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('languages', '', `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('languages', '', `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#e81f4f"}
+                                        avatar={<LanguageRoundedIcon />}
+                                        href={`/admin/languageEdit/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+                                            transformListToAsc = false
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Code",
+                                                    subtitle: row.code
+
+                                                },
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </>
+            );
+        }
+        else {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Linguagens
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('languages', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/languageCreate'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    <TableData
+                        top={TOP_LABELS}
+                        onIconPressed={InvertList}
+                    >
+                        <TableBody>
+                            {items.map((row, index) => (
+                                index === items.length - 1 ?
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color='primary'
+                                                variant='text'
+                                                // disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                disabled={isLoadingMoreItems}
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('languages', '', `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('languages', '', `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {
+                                                    isLoadingMoreItems ? <CircularProgress size={24} /> : 'Carregar mais itens'
+                                                }
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+
+                                    :
+
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">{row.id}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.name}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.code}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Link to={`/admin/languageEdit/${row.id}`}>
+                                                <IconButton onClick={() => { currPage = 0; transformListToAsc = false }}>
+                                                    <EditRoundedIcon style={{ fill: '#00bcd4' }} />
+                                                </IconButton>
+                                            </Link>
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {isLoadingToDelete === index ? (
+                                                <CircularProgress size={24} color="primary" />
+                                            ) : (
+                                                    <IconButton
+                                                        onClick={() => {
+                                                            HandleStateAlertDialog(index);
+                                                            HandleStateCircularProgress(index);
+                                                        }}
+                                                    >
+                                                        <DeleteRoundedIcon style={{ fill: "#FF0000" }} />
+                                                    </IconButton>
+                                                )}
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                            ))}
+                        </TableBody>
+                    </TableData>
+
+                    {/* This alert will be displayed if the user click to delete an institution */}
+                    <AlertDialog
+                        open={openAlertDialog}
+                        OnDelete={DeleteHandler}
+                        deleteItem={deleteItem}
+                        HandleClose={() => {
+                            setOpenAlertDialog(false);
+                            HandleStateCircularProgress(null);
+                        }}
+                    />
+                </>
+            );
+        }
+    }
+}
+export default Languages;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/NoteVariables.js b/src/Admin/Pages/Pages/SubPages/NoteVariables.js
new file mode 100644
index 0000000000000000000000000000000000000000..4769edd9d2a27c65b393770d5163a42f70bdfc1c
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/NoteVariables.js
@@ -0,0 +1,428 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+import React, { useEffect, useState } from 'react';
+//Material ui componets
+import { withStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import Grid from "@material-ui/core/Grid";
+import Paper from "@material-ui/core/Paper";
+import TableCell from '@material-ui/core/TableCell';
+import TableRow from '@material-ui/core/TableRow';
+import CheckRoundedIcon from "@material-ui/icons/CheckRounded";
+import BlockRoundedIcon from "@material-ui/icons/BlockRounded";
+import IconButton from '@material-ui/core/IconButton';
+import VisibilityIcon from '@material-ui/icons/Visibility';
+import { Button, Typography } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import UpdateRoundedIcon from '@material-ui/icons/UpdateRounded'
+//Local files
+import TableData from '../../../Components/Components/Table';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//Services
+import { getRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { Url } from '../../../Filters';
+//routers
+import { Link } from 'react-router-dom';
+import styled from "styled-components"
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import TrendingUpRoundedIcon from "@material-ui/icons/TrendingUpRounded";
+
+let currPage = 0; //var that controlls the current page that we are  
+let transformListToAsc = false;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        '&:nth-of-type(odd)': {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const NoteVariables = () => {
+    const WINDOW_WIDTH = window.innerWidth
+    const AddOneLenght = [''];
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete 
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false)
+    const [isUpdating, setIsUpdating] = useState(false)
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data]
+                if (arrData.length === 0) {
+                    HandleSnack('Não há mais dados para serem carregados', true, 'warning', '#FFC125')
+                } else {
+                    const arrItems = [...items]
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items 
+                    const arrResult = arrItems.concat(arrData)
+                    setItems(arrResult.concat(AddOneLenght))
+                }
+                setIsLoadingMoreItems(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsLoadingMoreItems(false)
+            }
+        )
+    }
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('scores', '', `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('scores', '', `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true)
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack('A lista de dados foi atualizada', true, 'success', '#228B22')
+                const arrData = [...data]
+                setItems(arrData.concat(AddOneLenght))
+                setIsUpdating(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsUpdating(false)
+            }
+        )
+    }
+
+    useEffect(() => {
+        getRequest(
+            Url('scores', '', '0', 'DESC'),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(AddOneLenght));
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+
+        //Words in the top part of the table
+        const topTable = ['ID', 'NOME', 'CÓDIGO', 'PESO', 'ATIVO', 'SCORE TYPE', 'VISUALIZAR'];
+
+        if (WINDOW_WIDTH <= 961) {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Variáveis de nota
+                                    </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('scores', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('scores', '', `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('scores', '', `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#e81f4f"}
+                                        avatar={<TrendingUpRoundedIcon />}
+                                        href={`/admin/noteVar/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Código",
+                                                    subtitle: row.code
+
+                                                },
+                                                {
+                                                    title: "Score Type",
+                                                    subtitle: row.score_type
+
+                                                },
+                                                {
+                                                    title: "Ativo",
+                                                    subtitle: row.active ? <CheckRoundedIcon style={{ fill: '#3CB371' }} /> : <BlockRoundedIcon style={{ fill: '#FA8072' }} />
+                                                },
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </div>
+            )
+        }
+        else {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Variáveis de nota
+                                    </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('scores', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24}/> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    <TableData
+                        top={topTable}
+                        onIconPressed={InvertList}
+                    >
+                        <TableBody>
+                            {items.map((row, index) => (
+                                index === items.length - 1 ?
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color='primary'
+                                                variant='text'
+                                                disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('scores', '', `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('scores', '', `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {
+                                                    isLoadingMoreItems ? <CircularProgress /> : 'Carregar mais itens'
+                                                }
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+
+                                    :
+
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">{row.id}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.name}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.code}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.weight}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {
+                                                row.active ? <CheckRoundedIcon style={{ fill: '#3CB371' }} /> : <BlockRoundedIcon style={{ fill: '#FA8072' }} />
+                                            }
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {
+                                                row['score_type'].map((item) => (
+                                                    <Typography key={item} style={{ fontSize: 14 }}>
+                                                        {item}
+                                                    </Typography>
+                                                ))
+                                            }
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Link to={`/admin/noteVar/${row.id}`}>
+                                                <IconButton onClick={() => { currPage = 0; transformListToAsc = false }}>
+                                                    <VisibilityIcon style={{ fill: '#00bcd4' }} />
+                                                </IconButton>
+                                            </Link>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                            ))}
+                        </TableBody>
+                    </TableData>
+                </div>
+            )
+        }
+    }
+}
+
+
+export default NoteVariables;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
diff --git a/src/Admin/Pages/Pages/SubPages/Permissions.js b/src/Admin/Pages/Pages/SubPages/Permissions.js
new file mode 100644
index 0000000000000000000000000000000000000000..a22f19f944b2870d42f59b6f981f64f2f1d84701
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Permissions.js
@@ -0,0 +1,511 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState } from 'react'
+//imports from local files 
+import TableData from '../../../Components/Components/Table';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import AlertDialog from "../../../Components/Components/AlertDialog";
+import { Url } from '../../../Filters';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import { DeleteFilter } from '../../../Filters';
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//imports from material ui 
+import { withStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import TableCell from '@material-ui/core/TableCell';
+import TableRow from '@material-ui/core/TableRow';
+import IconButton from '@material-ui/core/IconButton';
+import { Button, Typography, Paper, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import UpdateRoundedIcon from '@material-ui/icons/UpdateRounded';
+import EditRoundedIcon from '@material-ui/icons/EditRounded';
+import DeleteRoundedIcon from '@material-ui/icons/DeleteRounded';
+//router
+import { Link } from 'react-router-dom';
+import styled from "styled-components"
+import AccountCircleRoundedIcon from "@material-ui/icons/AccountCircleRounded"
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+
+let currPage = 0;
+let transformListToAsc = false;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        '&:nth-of-type(odd)': {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const UserPermissions = () => {
+    const ADD_ONE_LENGHT = [""];
+    const TOP_LABELS = ['ID', 'NOME', 'DESCRIÇÃO', 'AÇÕES'] //Labels from Table 
+    const WINDOW_WIDTH = window.innerWidth
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data 
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false) //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+    const [openAlertDialog, setOpenAlertDialog] = useState(false); //controlls the state od alert dialog 
+
+    const [deleteItem, setDeleteItem] = useState({}); //Delete Item
+    const [isLoadingToDelete, setIsLoadingToDelete] = useState(null);
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    //handle load more items
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data]
+                if (arrData.length === 0) {
+                    HandleSnack('Não há mais dados para serem carregados', true, 'warning', '#FFC125')
+                } else {
+                    const arrItems = [...items]
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items 
+                    const arrResult = arrItems.concat(arrData)
+                    setItems(arrResult.concat(ADD_ONE_LENGHT))
+                }
+                setIsLoadingMoreItems(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsLoadingMoreItems(false)
+            }
+        )
+    }
+
+    // handle update list data
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true)
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack('A lista de dados foi atualizada', true, 'success', '#228B22')
+                const arrData = [...data]
+                setItems(arrData.concat(ADD_ONE_LENGHT))
+                setIsUpdating(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsUpdating(false)
+            }
+        )
+    }
+
+    //handle Delete
+    async function DeleteHandler() {
+        const id = deleteItem.id;
+        HandleStateAlertDialog(null);
+        deleteRequest(
+            DeleteFilter("roles", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "A língua foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    currPage = 0;
+                    transformListToAsc = false
+                    UpdateHandler(Url("roles", "", `${currPage}`, "DESC"));
+                    HandleStateCircularProgress(null);
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                HandleStateCircularProgress(null);
+            }
+        )
+    }
+
+    const HandleStateCircularProgress = (i) => {
+        setIsLoadingToDelete(i);
+    };
+
+    const HandleStateAlertDialog = (i) => {
+        const obj = { ...items[i] };
+        setDeleteItem(obj);
+        setOpenAlertDialog(!openAlertDialog);
+    };
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('roles', '', `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(ADD_ONE_LENGHT))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('roles', '', `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(ADD_ONE_LENGHT))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url('roles', '', `${currPage}`, 'DESC'),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(ADD_ONE_LENGHT));
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+        if (WINDOW_WIDTH <= 760) {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de permissões de usuário
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('roles', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/CreateRole'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => { currPage = 0 }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('roles', '', `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('roles', '', `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#ff7f00"}
+                                        avatar={<AccountCircleRoundedIcon />}
+                                        href={`/admin/EditPermissions/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Descrição",
+                                                    subtitle: row.description
+
+                                                },
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </>
+            );
+        }
+        else {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de permissões de usuário
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('roles', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/CreateRole'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => { currPage = 0 }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    <TableData
+                        top={TOP_LABELS}
+                        onIconPressed={InvertList}
+                    >
+                        <TableBody>
+                            {items.map((row, index) => (
+                                index === items.length - 1 ?
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color='primary'
+                                                variant='text'
+                                                // disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                disabled={isLoadingMoreItems}
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('roles', '', `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('roles', '', `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {
+                                                    isLoadingMoreItems ? <CircularProgress size={24} /> : 'Carregar mais itens'
+                                                }
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+
+                                    :
+
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">{row.id}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.name}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.description}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Link to={`/admin/EditPermissions/${row.id}`}>
+                                                <Button
+                                                    style={{ width: "100%", marginBottom: "0.5em" }}
+                                                    variant="contained"
+                                                    color="primary"
+                                                    onClick={() => { currPage = 0 }}
+                                                    startIcon={<EditRoundedIcon />}
+                                                >
+                                                    Editar
+                                                </Button>
+                                            </Link>
+
+                                            {isLoadingToDelete === index ? (
+                                                <CircularProgress size={24} color="primary" />
+                                            ) : (
+                                                    <Button
+                                                        style={{ width: "100%" }}
+                                                        variant="contained"
+                                                        color="secondary"
+                                                        onClick={() => {
+                                                            HandleStateAlertDialog(index)
+                                                            HandleStateCircularProgress(index)
+                                                        }}
+                                                        startIcon={<DeleteRoundedIcon />}
+                                                    >
+                                                        Deletar
+                                                    </Button>
+                                                )}
+
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                            ))}
+                        </TableBody>
+                    </TableData>
+
+                    {/* This alert will be displayed if the user click to delete an institution */}
+                    <AlertDialog
+                        open={openAlertDialog}
+                        OnDelete={DeleteHandler}
+                        deleteItem={deleteItem}
+                        HandleClose={() => {
+                            setOpenAlertDialog(false);
+                            HandleStateCircularProgress(null);
+                        }}
+                    />
+                </>
+            );
+        }
+    }
+}
+export default UserPermissions;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/Questions.js b/src/Admin/Pages/Pages/SubPages/Questions.js
new file mode 100644
index 0000000000000000000000000000000000000000..e56f81bc768c5b3614ee2b9808a6478985e490a4
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Questions.js
@@ -0,0 +1,575 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState, useContext } from 'react'
+import moment from 'moment';
+//imports from local files 
+import TableData from '../../../Components/Components/Table';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import Unauthorized from '../../../Components/Components/Unauthorized';
+import { Url, EditFilter } from '../../../Filters';
+import { Store } from '../../../../Store';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+import { getRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//imports from material ui 
+import { withStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import TableCell from '@material-ui/core/TableCell';
+import TableRow from '@material-ui/core/TableRow';
+import { Button, Typography, Paper, Grid } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import UpdateRoundedIcon from '@material-ui/icons/UpdateRounded';
+import CheckCircleRoundedIcon from '@material-ui/icons/CheckCircleRounded';
+import CancelRoundedIcon from '@material-ui/icons/CancelRounded';
+import Switch from '@material-ui/core/Switch';
+//router
+import { Link } from 'react-router-dom';
+import styled from "styled-components"
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import HelpRoundedIcon from "@material-ui/icons/HelpRounded";
+
+let currPage = 0;
+let transformListToAsc = false;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        '&:nth-of-type(odd)': {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const Questions = () => {
+    const { state, dispatch } = useContext(Store);
+
+    const ADD_ONE_LENGHT = [""];
+    const WINDOW_WIDTH = window.innerWidth
+    const TOP_LABELS = ['ID', 'CRIAÇÃO EM', 'DESCRIÇÃO', 'STATUS', 'ATUALIZAÇÃO EM'] //Labels from Table  
+
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete
+    const [items, setItems] = useState([]); //Necessary to consult the API, data 
+
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false) //controlls the state of loadind more data
+    const [isUpdating, setIsUpdating] = useState(false); //controlls the state of updating data
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    //handle snack info
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    //handle load more items
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data]
+                if (arrData.length === 0) {
+                    HandleSnack('Não há mais dados para serem carregados', true, 'warning', '#FFC125')
+                } else {
+                    const arrItems = [...items]
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items 
+                    const arrResult = arrItems.concat(arrData)
+                    setItems(arrResult.concat(ADD_ONE_LENGHT))
+                }
+                setIsLoadingMoreItems(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsLoadingMoreItems(false)
+            }
+        )
+    }
+
+    // handle update list data
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true)
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack('A lista de dados foi atualizada', true, 'success', '#228B22')
+                const arrData = [...data]
+                setItems(arrData.concat(ADD_ONE_LENGHT))
+                setIsUpdating(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsUpdating(false)
+            }
+        )
+    }
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('questions', '', `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(ADD_ONE_LENGHT))
+                },
+                () => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('questions', '', `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(ADD_ONE_LENGHT))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    const handleChange = async (index, status) => {
+        const id = items[index].id;
+        const description = items[index].description;
+        if (status === 'active') {
+            const body = {
+                "question": {
+                    "description": description,
+                    "status": "inactive"
+                }
+            }
+            putRequest(
+                EditFilter('questions', id),
+                body,
+                (data) => {
+                    if (data.errors)
+                        HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                    else {
+                        currPage = 0
+                        transformListToAsc = false
+                        UpdateHandler(Url('questions', '', `${currPage}`, 'DESC'))
+                    }
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            const body = {
+                "question": {
+                    "description": description,
+                    "status": "active"
+                }
+            }
+            putRequest(
+                EditFilter('questions', id),
+                body,
+                (data) => {
+                    if (data.errors)
+                        HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                    else {
+                        currPage = 0
+                        transformListToAsc = false
+                        UpdateHandler(Url('questions', '', `${currPage}`, 'DESC'))
+                    }
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    //getting data from server
+    useEffect(() => {
+        getRequest(
+            Url('questions', '', `${currPage}`, 'DESC'),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(ADD_ONE_LENGHT));
+            },
+            (error) => {
+                setError(true)
+            }
+        )
+    }, []);
+
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else if (CheckUserPermission()) {
+        if (WINDOW_WIDTH <= 761) {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Perguntas da curadoria
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('questions', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/CreateQuestion'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => { currPage = 0 }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('questions', '', `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('questions', '', `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.id}
+                                        subtitle={DisplayDate(row.created_at)}
+                                        backColor={"#673ab7"}
+                                        avatar={<HelpRoundedIcon />}
+                                        reset={() => {
+                                            currPage = 0; transformListToAsc = false
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Descrição",
+                                                    subtitle: row.description
+                                                },
+                                                {
+                                                    title: "Status",
+                                                    subtitle:
+                                                        row.status === 'active' ?
+                                                            <Grid container direction='row'>
+                                                                <Grid item>
+                                                                    <CheckCircleRoundedIcon style={{ fill: '#3CB371' }} />
+
+                                                                    <Switch
+                                                                        checked={true}
+                                                                        onChange={() => handleChange(index, row.status)}
+                                                                        name="checkedB"
+                                                                        color="primary"
+                                                                    />
+                                                                </Grid>
+                                                            </Grid>
+
+                                                            :
+
+                                                            <Grid container justify='flex-end' alignItems='center' direction='row'>
+                                                                <Grid item>
+                                                                    <CancelRoundedIcon style={{ fill: '#FA8072' }} />
+                                                                </Grid>
+
+                                                                <Grid item>
+                                                                    <Switch
+                                                                        checked={false}
+                                                                        onChange={() => handleChange(index, row.status)}
+                                                                        name="checkedB"
+                                                                        color="primary"
+                                                                    />
+                                                                </Grid>
+                                                            </Grid>
+                                                },
+                                                {
+                                                    title : "Atualizado em",
+                                                    subtitle : DisplayDate(row.updated_at)
+                                                }
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </>
+            );
+        }
+        else {
+            return (
+                <>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Perguntas da curadoria
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('questions', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/CreateQuestion'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => { currPage = 0; transformListToAsc = false }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    <TableData
+                        top={TOP_LABELS}
+                        onIconPressed={InvertList}
+                    >
+                        <TableBody>
+                            {items.map((row, index) => (
+                                index === items.length - 1 ?
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color='primary'
+                                                variant='text'
+                                                // disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                disabled={isLoadingMoreItems}
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('questions', '', `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('questions', '', `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {
+                                                    isLoadingMoreItems ? <CircularProgress size={24} /> : 'Carregar mais itens'
+                                                }
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+
+                                    :
+
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">{row.id}</StyledTableCell>
+                                        <StyledTableCell align="right">{DisplayDate(row.created_at)}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.description}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {
+                                                row.status === 'active' ?
+                                                    <Grid container direction='row'>
+                                                        <Grid item>
+                                                            <CheckCircleRoundedIcon style={{ fill: '#3CB371' }} />
+
+                                                            <Switch
+                                                                checked={true}
+                                                                onChange={() => handleChange(index, row.status)}
+                                                                name="checkedB"
+                                                                color="primary"
+                                                            />
+                                                        </Grid>
+                                                    </Grid>
+
+                                                    :
+
+                                                    <Grid container justify='flex-end' alignItems='center' direction='row'>
+                                                        <Grid item>
+                                                            <CancelRoundedIcon style={{ fill: '#FA8072' }} />
+                                                        </Grid>
+
+                                                        <Grid item>
+                                                            <Switch
+                                                                checked={false}
+                                                                onChange={() => handleChange(index, row.status)}
+                                                                name="checkedB"
+                                                                color="primary"
+                                                            />
+                                                        </Grid>
+                                                    </Grid>
+                                            }
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">{DisplayDate(row.updated_at)}</StyledTableCell>
+                                    </StyledTableRow>
+                            ))}
+                        </TableBody>
+                    </TableData>
+                </>
+            );
+        }
+    } else return <Unauthorized />
+}
+export default Questions;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/Rating.js b/src/Admin/Pages/Pages/SubPages/Rating.js
new file mode 100644
index 0000000000000000000000000000000000000000..77a8e50b56c8d4167bc62f5a8a39d7ff0a652b23
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Rating.js
@@ -0,0 +1,504 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useEffect, useState } from 'react';
+//Material ui componets
+import { withStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import Grid from "@material-ui/core/Grid";
+import Paper from "@material-ui/core/Paper";
+import TableCell from '@material-ui/core/TableCell';
+import TableRow from '@material-ui/core/TableRow';
+import IconButton from '@material-ui/core/IconButton';
+import VisibilityIcon from '@material-ui/icons/Visibility';
+import { Button, Typography } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import UpdateRoundedIcon from '@material-ui/icons/UpdateRounded';
+import DeleteRoundedIcon from '@material-ui/icons/DeleteRounded';
+//Local files
+import TableData from '../../../Components/Components/Table';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//Services
+import AlertDialog from "../../../Components/Components/AlertDialog";
+import { Url } from '../../../Filters';
+import { DeleteFilter } from '../../../Filters';
+import { getRequest, deleteRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+//routers
+import { Link } from 'react-router-dom';
+import StarRoundedIcon from "@material-ui/icons/StarRounded";
+import styled from "styled-components"
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+
+let currPage = 0; //var that controlls the current page that we are  
+let transformListToAsc = false;
+
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        '&:nth-of-type(odd)': {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const Ratings = () => {
+    const WINDOW_WIDTH = window.innerWidth
+    const AddOneLenght = [''];
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete 
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false)
+    const [isUpdating, setIsUpdating] = useState(false)
+
+    const [openAlertDialog, setOpenAlertDialog] = useState(false); //controlls the state od alert dialog 
+    const [deleteItem, setDeleteItem] = useState({}); //Delete Item
+    const [isLoadingToDelete, setIsLoadingToDelete] = useState(null);
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data]
+                if (arrData.length === 0) {
+                    HandleSnack('Não há mais dados para serem carregados', true, 'warning', '#FFC125')
+                } else {
+                    const arrItems = [...items]
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items 
+                    const arrResult = arrItems.concat(arrData)
+                    setItems(arrResult.concat(AddOneLenght))
+                }
+                setIsLoadingMoreItems(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsLoadingMoreItems(false)
+            }
+        )
+    }
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('ratings', '', `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('ratings', '', `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true)
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack('A lista de dados foi atualizada', true, 'success', '#228B22')
+                const arrData = [...data]
+                setItems(arrData.concat(AddOneLenght))
+                setIsUpdating(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsUpdating(false)
+            }
+        )
+    }
+
+    //handle Delete
+    async function DeleteHandler() {
+        const id = deleteItem.id;
+        HandleStateAlertDialog(null);
+        deleteRequest(
+            DeleteFilter("ratings", id),
+            (data) => {
+                if (data.errors)
+                    HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                else {
+                    HandleSnack(
+                        "O rating foi deletada com sucesso",
+                        true,
+                        "success",
+                        "#228B22"
+                    );
+                    currPage = 0;
+                    transformListToAsc = false
+                    UpdateHandler(Url("ratings", "", `${currPage}`, "DESC"));
+                    HandleStateCircularProgress(null);
+                }
+            },
+            (error) => {
+                HandleSnack("Ocorreu algum erro", true, "warning", "#FA8072");
+                HandleStateCircularProgress(null);
+            }
+        )
+    }
+
+    const HandleStateCircularProgress = (i) => {
+        setIsLoadingToDelete(i);
+    };
+
+    const HandleStateAlertDialog = (i) => {
+        const obj = { ...items[i] };
+        setDeleteItem(obj);
+        setOpenAlertDialog(!openAlertDialog);
+    };
+
+
+    useEffect(() => {
+        getRequest(
+            Url('ratings', '', currPage, 'DESC'),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(AddOneLenght));
+            },
+            (error) => {
+                setError(true)
+            }
+        )
+    }, []);
+
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+
+        //Words in the top part of the table
+        const topTable = ['ID', 'NOME', 'DESCRIÇÃO', 'VISUALIZAR', 'DELETAR'];
+        if (WINDOW_WIDTH <= 760) {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de ratings
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('ratings', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/CreateRating'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon style={{ fill: "white" }} />}
+                                                onClick={() => {
+                                                    currPage = 0
+                                                    transformListToAsc = false
+                                                }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('ratings', '', `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('ratings', '', `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#00bcd4"}
+                                        avatar={<StarRoundedIcon />}
+                                        href={`/admin/Rating/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+                                        }}
+                                        data={
+                                            [
+                                                {
+                                                    title: "Descrição",
+                                                    subtitle: row.description
+                                                }
+                                            ]
+                                        }
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </div>
+            )
+        }
+        else {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de ratings
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('ratings', '', `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Link style={{ textDecoration: 'none' }} to={'/admin/CreateRating'}>
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon style={{ fill: "white" }} />}
+                                                onClick={() => {
+                                                    currPage = 0
+                                                    transformListToAsc = false
+                                                }}
+                                            >
+                                                Novo
+                                            </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    <TableData
+                        top={topTable}
+                        onIconPressed={InvertList}
+                    >
+                        <TableBody>
+                            {items.map((row, index) => (
+                                index === items.length - 1 ?
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color='primary'
+                                                variant='text'
+                                                disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('ratings', '', `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('ratings', '', `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {
+                                                    isLoadingMoreItems ? <CircularProgress size={24} /> : 'Carregar mais itens'
+                                                }
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+
+                                    :
+
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">{row.id}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.name}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.description}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Link to={`/admin/Rating/${row.id}`}>
+                                                <IconButton onClick={() => { currPage = 0 }}>
+                                                    <VisibilityIcon style={{ fill: '#00bcd4' }} />
+                                                </IconButton>
+                                            </Link>
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {isLoadingToDelete === index ? (
+                                                <CircularProgress size={24} color="primary" />
+                                            ) : (
+                                                    <IconButton
+                                                        onClick={() => {
+                                                            HandleStateAlertDialog(index);
+                                                            HandleStateCircularProgress(index);
+                                                        }}
+                                                    >
+                                                        <DeleteRoundedIcon style={{ fill: "#FF0000" }} />
+                                                    </IconButton>
+                                                )}
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                            ))}
+                        </TableBody>
+                    </TableData>
+
+                    {/* This alert will be displayed if the user click to delete an institution */}
+                    <AlertDialog
+                        open={openAlertDialog}
+                        OnDelete={DeleteHandler}
+                        deleteItem={deleteItem}
+                        HandleClose={() => {
+                            setOpenAlertDialog(false);
+                            HandleStateCircularProgress(null);
+                        }}
+                    />
+                </div>
+            )
+        }
+    }
+}
+
+
+export default Ratings;
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Pages/Pages/SubPages/SendEmail.js b/src/Admin/Pages/Pages/SubPages/SendEmail.js
new file mode 100644
index 0000000000000000000000000000000000000000..e48e5361015dcaaff2a0e84a207078aa8115df90
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/SendEmail.js
@@ -0,0 +1,97 @@
+
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+
+import React, {useContext} from 'react';
+import Card from "@material-ui/core/Card";
+import CardContent from "@material-ui/core/CardContent";
+import { makeStyles } from "@material-ui/core/styles";
+import { Typography } from '@material-ui/core';
+import EmailInputs from '../../../Components/Components/Inputs/EmailInputs';
+import { Store } from '../../../../Store';
+import Unauthorized from '../../../Components/Components/Unauthorized';
+
+const useStyles = makeStyles({
+    root: {
+        minWidth: 900,
+        boxShadow: "2px 2px 1px #A9A9A9",
+    },
+    title: {
+        fontSize: 28,
+        fontWeight: "500",
+    },
+    subTitle: {
+        fontSize: 14,
+        fontWeight: "500",
+    },
+    pos: {
+        marginBottom: 12,
+    },
+    displayRow: {
+        display: "flex",
+        flexDirection: "row",
+        justifyContent: 'space-around',
+        alignItems: "center",
+    },
+    displayColumn: {
+        display: "flex",
+        flexDirection: "column",
+        marginBottom: "1em",
+    },
+});
+
+const SendEmail = ({ match }) => {
+    const { state, dispatch } = useContext(Store);
+    const classes = useStyles();
+
+    const CheckUserPermission = () => {
+        let canUserEdit = false;
+
+        if (state.userIsLoggedIn) {
+            const roles = [...state.currentUser.roles];
+            for (let i = 0; i < roles.length; i++)
+                if (roles[i].name === 'admin' || roles[i].name === 'editor')
+                    canUserEdit = true;
+        }
+        else {
+            canUserEdit = false;
+        }
+
+        return canUserEdit;
+    }
+
+    if(CheckUserPermission()){
+        return (
+            <Card>
+                <CardContent>
+                    <Typography
+                        className={classes.title}
+                        color="inherit"
+                        gutterBottom
+                    >
+                        Enviar email
+                    </Typography>
+                    <EmailInputs email={`${match.params.email}`} />
+                </CardContent>
+            </Card>
+        );
+    } else return <Unauthorized/>
+}
+
+export default SendEmail; 
\ No newline at end of file
diff --git a/src/Admin/Pages/Pages/SubPages/Users.js b/src/Admin/Pages/Pages/SubPages/Users.js
new file mode 100644
index 0000000000000000000000000000000000000000..d709707b22bee75d4141c3df31e2ba5e30e09eda
--- /dev/null
+++ b/src/Admin/Pages/Pages/SubPages/Users.js
@@ -0,0 +1,660 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+import React, { useEffect, useState } from 'react';
+//Material ui componets
+import { withStyles } from '@material-ui/core/styles';
+import TableBody from '@material-ui/core/TableBody';
+import Grid from "@material-ui/core/Grid";
+import Paper from "@material-ui/core/Paper";
+import TableCell from '@material-ui/core/TableCell';
+import TableRow from '@material-ui/core/TableRow';
+import IconButton from '@material-ui/core/IconButton';
+import VisibilityIcon from '@material-ui/icons/Visibility';
+import { Button, Typography, Chip } from '@material-ui/core';
+import CircularProgress from '@material-ui/core/CircularProgress';
+import AddRoundedIcon from '@material-ui/icons/AddRounded';
+import TextField from '@material-ui/core/TextField';
+import UpdateRoundedIcon from '@material-ui/icons/UpdateRounded'
+//Local files
+import TableData from '../../../Components/Components/Table';
+import SnackBar from '../../../../Components/SnackbarComponent';
+import LoadingSpinner from '../../../../Components/LoadingSpinner';
+//Services
+import { getRequest, putRequest } from '../../../../Components/HelperFunctions/getAxiosConfig'
+import { Url } from '../../../Filters';
+//routers
+import { Link } from 'react-router-dom';
+import moment from 'moment';
+import styled from 'styled-components'
+import MobileList from "../../../Components/Components/MobileComponents/SimpleList"
+import EmailRoundedIcon from '@material-ui/icons/EmailRounded';
+import { apiDomain } from '../../../../env';
+import noAvatar from "../../../../img/default_profile.png";
+
+let currPage = 0; //var that controlls the current page that we are  
+let transformListToAsc = false;
+let nameFilter = "";
+let emailFilter = "";
+const StyledTableCell = withStyles((theme) => ({
+    head: {
+        backgroundColor: theme.palette.common.black,
+        color: theme.palette.common.white,
+    },
+    body: {
+        fontSize: 14,
+    },
+}))(TableCell);
+
+const StyledTableRow = withStyles((theme) => ({
+    root: {
+        '&:nth-of-type(odd)': {
+            backgroundColor: theme.palette.action.hover,
+        },
+    },
+}))(TableRow);
+
+const Users = () => {
+    const AddOneLenght = [''];
+    const WINDOW_WIDTH = window.innerWidth
+    const [error, setError] = useState(null); //Necessary to consult the API, catch errors
+    const [isLoaded, setIsLoaded] = useState(false); //Necessary to consult the API, wait until complete 
+    const [items, setItems] = useState([]); //Necessary to consult the API, data
+    const [isLoadingMoreItems, setIsLoadingMoreItems] = useState(false)
+    const [isUpdating, setIsUpdating] = useState(false)
+    const [showFilter, setShowFilter] = useState(false)
+
+    const [name, setName] = useState("");
+    const [email, setEmail] = useState("");
+
+    const [snackInfo, setSnackInfo] = useState({
+        message: '',
+        icon: '',
+        open: false,
+        color: '',
+    })
+
+    // Handle snack infos
+    const HandleSnack = (message, state, icon, color) => {
+        setSnackInfo({
+            message: message,
+            icon: icon,
+            open: state,
+            color: color
+        })
+    }
+
+    const NameHandler = (event) => {
+        currPage = 0
+        setName(event.target.value)
+        nameFilter = event.target.value
+        getRequest(
+            Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'),
+            (data, header) => {
+                const arrData = [...data]
+                setItems(arrData.concat(AddOneLenght))
+                HandleSnack('Filtro aplicado com sucesso', true, 'success', '#228B22')
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+            }
+        )
+
+    }
+
+    const EmailHandler = (event) => {
+        currPage = 0
+        setEmail(event.target.value)
+        emailFilter = event.target.value
+        getRequest(
+            Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'),
+            (data, header) => {
+                const arrData = [...data]
+                setItems(arrData.concat(AddOneLenght))
+                HandleSnack('Filtro aplicado com sucesso', true, 'success', '#228B22')
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+            }
+        )
+    }
+
+    const LoadMoreItens = async (api) => {
+        setIsLoadingMoreItems(true)
+        getRequest(
+            api,
+            (data, header) => {
+                const arrData = [...data]
+                if (arrData.length === 0) {
+                    HandleSnack('Não há mais dados para serem carregados', true, 'warning', '#FFC125')
+                } else {
+                    const arrItems = [...items]
+                    arrItems.pop(); //Deleting the last position, that was used to display the button of load more items 
+                    const arrResult = arrItems.concat(arrData)
+                    setItems(arrResult.concat(AddOneLenght))
+                }
+                setIsLoadingMoreItems(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsLoadingMoreItems(false)
+            }
+        )
+    }
+
+    const InvertList = async () => {
+        transformListToAsc = !transformListToAsc
+        currPage = 0
+        if (transformListToAsc) {
+            getRequest(
+                Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'ASC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        } else {
+            getRequest(
+                Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'),
+                (data, header) => {
+                    const arrData = [...data]
+                    setItems(arrData.concat(AddOneLenght))
+                },
+                (error) => {
+                    HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                }
+            )
+        }
+    }
+
+    const DisplayDate = (date) => {
+        const convertedData = moment.utc(date);
+        return moment(convertedData)
+            .format("LLL")
+            .toString();
+    };
+
+    const UpdateHandler = async (api) => {
+        setIsUpdating(true)
+        getRequest(
+            api,
+            (data, header) => {
+                HandleSnack('A lista de dados foi atualizada', true, 'success', '#228B22')
+                const arrData = [...data]
+                setItems(arrData.concat(AddOneLenght))
+                setIsUpdating(false)
+            },
+            (error) => {
+                HandleSnack('Erro ao carregar os dados', true, 'warning', '#FA8072')
+                setIsUpdating(false)
+            }
+        )
+    }
+
+    const isUserPublisher = (userRoles) => {
+        for (let index = 0; index < userRoles.length; index++) {
+            if (userRoles[index].id === 10)
+                return true;
+        }
+        return false;
+    }
+
+    const turnUserPublisher = (userRoles, userId) => {
+        let roles_ids = [];
+        userRoles.map((role) => (
+            roles_ids.push(role.id)
+        ))
+        roles_ids.push(10);
+        const body = {
+            "user": {
+                "role_ids": roles_ids
+            }
+        }
+        putRequest(
+            `/users/${userId}`,
+            body,
+            (data) => {
+                if (data.errors) {
+                    HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+                }
+                else {
+                    currPage = 0;
+                    HandleSnack(`O usuário ${userId}, agora é publicador`, true, 'success', '#228B22')
+                    UpdateHandler(Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'))
+                }
+            },
+            (error) => {
+                HandleSnack('Ocorreu algum erro', true, 'warning', '#FA8072')
+            }
+        )
+    }
+
+    useEffect(() => {
+        getRequest(
+            Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, '0', 'DESC'),
+            (data, header) => {
+                setIsLoaded(true);
+                setItems(data.concat(AddOneLenght));
+            },
+            (error) => {
+                setError(true);
+            }
+        )
+    }, []);
+
+
+    if (error) {
+        return <div>Error: {error.message}</div>;
+    } else if (!isLoaded) {
+        return <LoadingSpinner text="Carregando..." />
+    } else {
+
+        //Words in the top part of the table
+        const topTable = ['ID', 'NOME', 'EMAIL', 'CRIADO EM', 'SCORE', 'PERMISSÃO', 'AÇÃO', "VISUALIZAR"];
+        if (WINDOW_WIDTH <= 1150) {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de usuários
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter)
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            filtrar
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Link to="/admin/EditUser/-1">
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                            >
+                                                Novo
+                                        </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                        {
+                            showFilter ? (
+                                <Grid container direction="row" justify="space-between" alignItems="center">
+                                    <Grid item>
+                                        <TextField
+                                            label="Name"
+                                            value={name}
+                                            onChange={(e) => { NameHandler(e) }}
+                                        />
+                                    </Grid>
+                                    <Grid item>
+                                        <TextField
+                                            label="Email"
+                                            value={email}
+                                            onChange={(e) => { EmailHandler(e) }}
+                                        />
+                                    </Grid>
+                                </Grid>
+                            ) : null
+                        }
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    {items.map((row, index) =>
+                        index === items.length - 1 ? (
+                            <StyledDivButton>
+                                <Button
+                                    key={index}
+                                    color="primary"
+                                    variant="text"
+                                    // disabled={isLoadingMoreItems}
+                                    startIcon={<AddRoundedIcon />}
+                                    disabled={isLoadingMoreItems}
+                                    onClick={() => {
+                                        currPage++
+                                        if (transformListToAsc) {
+                                            LoadMoreItens(Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'ASC'))
+                                        } else {
+                                            LoadMoreItens(Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'))
+                                        }
+                                    }}
+                                >
+                                    {isLoadingMoreItems ? (
+                                        <CircularProgress size={24} />
+                                    ) : (
+                                            "Carregar mais itens"
+                                        )}
+                                </Button>
+                            </StyledDivButton>
+                        ) : (
+                                <>
+                                    <MobileList
+                                        key={index}
+                                        title={row.name}
+                                        subtitle={row.id}
+                                        backColor={"#00bcd4"}
+                                        avatar={
+                                            <img
+                                                src={row.avatar ? apiDomain + row.avatar : noAvatar}
+                                                alt="user avatar"
+                                                style={{
+                                                    height: "100%",
+                                                    width: "100%",
+                                                    borderRadius: "50%",
+                                                }}
+                                            />
+                                        }
+                                        href={`/admin/user/${row.id}`}
+                                        reset={() => {
+                                            currPage = 0;
+                                            transformListToAsc = false
+                                            nameFilter = ""
+                                            emailFilter = ""
+                                        }}
+                                        data={[
+                                            {
+                                                title: "Email",
+                                                subtitle: row.email ?
+                                                    <Link to={`/admin/sendEmail/${row.email}`} style={{ textDecoration: 'none' }}>
+                                                        <Button
+                                                            variant='text'
+                                                            color='primary'
+                                                            startIcon={<EmailRoundedIcon />}
+                                                        >
+                                                            {row.email}
+                                                        </Button>
+                                                    </Link> : null
+                                            },
+                                            {
+                                                title: "Criado em",
+                                                subtitle: DisplayDate(row.created_at)
+                                            },
+                                            {
+                                                title: "Score",
+                                                subtitle: row.score
+                                            },
+                                            {
+                                                title: "Permissão",
+                                                subtitle: row.roles.map((chip) => (
+                                                    <ChipDiv>
+                                                        <Chip label={chip.name} key={chip.id} />
+                                                    </ChipDiv>
+                                                ))
+                                            },
+                                            {
+                                                title: "Score",
+                                                subtitle: row.score
+                                            },
+                                            {
+                                                title: "Ações rápidas",
+                                                subtitle: <Button
+                                                    variant="contained"
+                                                    color="primary"
+                                                    disabled={isUserPublisher(row.roles)}
+                                                    onClick={() => { turnUserPublisher(row.roles, row.id) }}
+                                                >
+                                                    Tornar publicador
+                                                </Button>
+                                            }
+
+                                        ]}
+                                    />
+                                    <div style={{ height: "0.5em" }} />
+                                </>
+                            )
+                    )}
+                </div>
+            )
+        }
+        else {
+            return (
+                <div>
+                    <SnackBar
+                        severity={snackInfo.icon}
+                        text={snackInfo.message}
+                        snackbarOpen={snackInfo.open}
+                        color={snackInfo.color}
+                        handleClose={() => setSnackInfo({
+                            message: '',
+                            icon: '',
+                            open: false,
+                            color: ''
+                        })}
+                    />
+                    <Paper style={{ padding: '1em' }}>
+                        <Grid container spacing={3} direction="row" alignItems="center">
+                            <Grid item xs={6}>
+                                <Typography variant="h4">
+                                    Lista de usuários
+                                </Typography>
+                            </Grid>
+                            <Grid
+                                item
+                                xs={6}
+                            >
+                                <Grid container justify="flex-end" spacing={3}>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            disabled={isUpdating}
+                                            onClick={() => {
+                                                currPage = 0
+                                                transformListToAsc = false
+                                                UpdateHandler(Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'))
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            {
+                                                isUpdating ? <CircularProgress size={24} /> : 'Atualizar'
+                                            }
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Button
+                                            variant="contained"
+                                            color="secondary"
+                                            onClick={() => {
+                                                setShowFilter(!showFilter)
+                                            }}
+                                            startIcon={<UpdateRoundedIcon />}
+                                        >
+                                            filtrar
+                                        </Button>
+                                    </Grid>
+                                    <Grid item>
+                                        <Link to="/admin/EditUser/-1">
+                                            <Button
+                                                variant="contained"
+                                                color="secondary"
+                                                startIcon={<AddRoundedIcon />}
+                                            >
+                                                Novo
+                                        </Button>
+                                        </Link>
+                                    </Grid>
+                                </Grid>
+                            </Grid>
+                        </Grid>
+                        {
+                            showFilter ? (
+                                <Grid container direction="row" justify="space-between" alignItems="center">
+                                    <Grid item>
+                                        <TextField
+                                            label="Name"
+                                            value={name}
+                                            onChange={(e) => { NameHandler(e) }}
+                                        />
+                                    </Grid>
+                                    <Grid item>
+                                        <TextField
+                                            label="Email"
+                                            value={email}
+                                            onChange={(e) => { EmailHandler(e) }}
+                                        />
+                                    </Grid>
+                                </Grid>
+                            ) : null
+                        }
+                    </Paper>
+
+                    <div style={{ height: '2em' }}></div>
+
+                    <TableData
+                        top={topTable}
+                        onIconPressed={InvertList}
+                    >
+                        <TableBody>
+                            {items.map((row, index) => (
+                                index === items.length - 1 ?
+                                    <StyledTableRow key={index}>
+                                        {/* Button to load more data */}
+                                        <StyledTableCell>
+                                            <Button
+                                                color='primary'
+                                                variant='text'
+                                                disabled={isLoadingMoreItems}
+                                                startIcon={<AddRoundedIcon />}
+                                                onClick={() => {
+                                                    currPage++
+                                                    if (transformListToAsc) {
+                                                        LoadMoreItens(Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'ASC'))
+                                                    } else {
+                                                        LoadMoreItens(Url('users', `"name" : "${nameFilter}", "email" : "${emailFilter}"`, `${currPage}`, 'DESC'))
+                                                    }
+                                                }}
+                                            >
+                                                {
+                                                    isLoadingMoreItems ? <CircularProgress size={24} /> : 'Carregar mais itens'
+                                                }
+                                            </Button>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+
+                                    :
+
+                                    <StyledTableRow key={index}>
+                                        <StyledTableCell component="th" scope="row">{row.id}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.name}</StyledTableCell>
+                                        <StyledTableCell align="right">{row.email ? row.email : ""}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {DisplayDate(row.created_at)}
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">{row.score}</StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            {
+                                                row.roles.map((chip) => (
+                                                    <ChipDiv>
+                                                        <Chip label={chip.name} key={chip.id} />
+                                                    </ChipDiv>
+                                                ))
+                                            }
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Button
+                                                variant="contained"
+                                                color="primary"
+                                                disabled={isUserPublisher(row.roles)}
+                                                onClick={() => { turnUserPublisher(row.roles, row.id) }}
+                                            >
+                                                Tornar publicador
+                                            </Button>
+                                        </StyledTableCell>
+                                        <StyledTableCell align="right">
+                                            <Link to={`/admin/user/${row.id}`}>
+                                                <IconButton onClick={() => {
+                                                    currPage = 0;
+                                                    transformListToAsc = false
+                                                    nameFilter = ""
+                                                    emailFilter = ""
+                                                }
+                                                }>
+                                                    <VisibilityIcon style={{ fill: '#00bcd4' }} />
+                                                </IconButton>
+                                            </Link>
+                                        </StyledTableCell>
+                                    </StyledTableRow>
+                            ))}
+                        </TableBody>
+                    </TableData>
+                </div>
+            )
+        }
+    }
+}
+
+export default Users;
+
+const ChipDiv = styled.div`
+    margin-top : 0.5em;
+`
+
+const StyledDivButton = styled(Paper)`
+    width : 100%;
+    display : flex; 
+    justify-content : center; 
+    align-items : center; 
+`
+
diff --git a/src/Admin/Services.js b/src/Admin/Services.js
new file mode 100644
index 0000000000000000000000000000000000000000..bce02eb72a414c7f04cbbdb8e0acbec383ca2fd6
--- /dev/null
+++ b/src/Admin/Services.js
@@ -0,0 +1,241 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import axios from 'axios';
+
+export function Delete(api) {
+    return new Promise(resolve => {
+        axios({
+            method: 'delete',
+            url: api,
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json; charset=utf-8',
+                'access-token': sessionStorage.getItem('@portalmec/accessToken'),
+                'client': sessionStorage.getItem('@portalmec/clientToken'),
+                'uid': sessionStorage.getItem('@portalmec/uid'),
+                'If-None-Match': null
+            },
+        }).then(response => {
+            if (response.status === 200) {
+                resolve(true);
+            } else {
+                resolve(false);
+            }
+            SaveNewHeaders(response)
+        }).catch(err =>{
+            resolve(false)
+        })
+    })
+}
+
+export function SendEmail(api, body) {
+    return new Promise(resolve => {
+        axios({
+            method: 'post',
+            url: api,
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json; charset=utf-8',
+                'access-token': sessionStorage.getItem('@portalmec/accessToken'),
+                'client': sessionStorage.getItem('@portalmec/clientToken'),
+                'uid': sessionStorage.getItem('@portalmec/uid'),
+                'If-None-Match': null
+            },
+            data: JSON.stringify(body)
+        }).then(response => {
+            console.log(response)
+            if (response.status === 200) {
+                resolve(true);
+            } else {
+                resolve(false);
+            }
+            SaveNewHeaders(response)
+        }).catch(err =>{
+            resolve(false)
+        })
+    })
+}
+
+export function Edit(api, body) {
+    return new Promise(resolve => {
+        axios({
+            method: 'put',
+            url: api,
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json; charset=utf-8',
+                'access-token': sessionStorage.getItem('@portalmec/accessToken'),
+                'client': sessionStorage.getItem('@portalmec/clientToken'),
+                'uid': sessionStorage.getItem('@portalmec/uid'),
+                'If-None-Match': null
+            },
+            data: JSON.stringify(body)
+        }).then(response => {
+            console.log(response)
+            if (response.status === 200) {
+                resolve(true)
+            } else {
+                resolve(false)
+            }
+            SaveNewHeaders(response)
+        }).catch(err =>{
+            resolve(false)
+        })
+    })
+}
+
+export function Create(api, body) {
+    return new Promise(resolve => {
+        axios({
+            method: 'post',
+            url: api,
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json; charset=utf-8',
+                'access-token': sessionStorage.getItem('@portalmec/accessToken'),
+                'client': sessionStorage.getItem('@portalmec/clientToken'),
+                'uid': sessionStorage.getItem('@portalmec/uid'),
+                'If-None-Match': null
+            },
+            data: JSON.stringify(body)
+        }).then(response => {
+            if (response.status === 201) {
+                resolve(true)
+            } else {
+                resolve(false)
+            }
+            SaveNewHeaders(response)
+        }).catch(err =>{
+            resolve(false)
+        })
+    })
+}
+
+export function HandleComplain(api) {
+    return new Promise(resolve => {
+        axios({
+            method: 'post',
+            url: api,
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json; charset=utf-8',
+                'access-token': sessionStorage.getItem('@portalmec/accessToken'),
+                'client': sessionStorage.getItem('@portalmec/clientToken'),
+                'uid': sessionStorage.getItem('@portalmec/uid'),
+                'If-None-Match': null
+            },
+        }).then(response => {
+            if (response.status === 200) {
+                resolve(true)
+            } else {
+                resolve(false)
+            }
+            SaveNewHeaders(response)
+        }).catch(err =>{
+            resolve(false)
+        })
+    })
+}
+
+export function GetFullList(api, headers) {
+    
+    return new Promise(resolve => {
+        axios({
+            method: 'get',
+            url: api,
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json; charset=utf-8',
+                'access-token': sessionStorage.getItem('@portalmec/accessToken'),
+                'client': sessionStorage.getItem('@portalmec/clientToken'),
+                'uid': sessionStorage.getItem('@portalmec/uid'),
+                'If-None-Match': null
+            },
+        }).then((res) => {
+            console.log(res)
+            if (res.status === 200) {
+                resolve({
+                    state: true,
+                    data: res.data
+                })
+            } else {
+                resolve({
+                    state: false,
+                    data: {}
+                })
+            }
+            SaveNewHeaders(res)
+        }).catch((err) => {
+            resolve({
+                state: false,
+                data: {}
+            })
+        })
+    }, []);
+} 
+
+export function GetSpecificData(api, headers) {
+    return new Promise(resolve => {
+        axios({
+            method: 'get',
+            url: api,
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json; charset=utf-8',
+                'access-token': sessionStorage.getItem('@portalmec/accessToken'),
+                'client': sessionStorage.getItem('@portalmec/clientToken'),
+                'uid': sessionStorage.getItem('@portalmec/uid'),
+                'If-None-Match': null
+            },
+        }).then((res) => {
+            console.log(res)
+            if (res.status === 200) {
+                resolve({
+                    state: true,
+                    data: res.data
+                })
+            } else {
+                resolve({
+                    state: false,
+                    data: {}
+                })
+            }
+            SaveNewHeaders(res)
+        }).catch((err) => {
+            resolve({
+                state: false,
+                data: {}
+            })
+        })
+    }, []);
+}
+
+const SaveNewHeaders = (response) => {
+    if (
+        (response.headers['access-token'] === undefined || response.headers['access-token'] === null) &&
+        (response.headers.client === undefined || response.headers.client === null)
+    ) {
+
+    } else {
+        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+        sessionStorage.setItem('@portalmec/clientToken', response.headers.client)
+        console.log('saved')
+    }
+}
+
diff --git a/src/App.js b/src/App.js
index 48b49a7407b17a3ea751f61922a5ac4a2c0a6508..e54fdf77eb121b6c258d6eee744a9bb2cd88e608 100644
--- a/src/App.js
+++ b/src/App.js
@@ -35,7 +35,7 @@ import TabManageAc from './Pages/TabsHelp/TabManageAc';
 import PasswordRecoveryPage from './Pages/PasswordRecoveryPage.js'
 import PageProfessor from './Pages/PageProfessor.js'
 import ResourcePage from './Pages/ResourcePage';
-import {BrowserRouter, Switch, Route } from 'react-router-dom';
+import { BrowserRouter, Switch, Route, Link } from 'react-router-dom';
 import { Store } from './Store'
 import TermsPage from './Pages/TermsPage.js'
 import PublicationPermissionsPage from './Pages/PublicationPermissionsPage.js'
@@ -51,26 +51,141 @@ import CollectionPage from './Pages/CollectionPage.js'
 import FormationMaterialPage from './Pages/FormationMaterialPage.js';
 import FormationMaterialIframe from './Pages/FormationMaterialIframe.js';
 
-export default function App(){
+//admin
+import clsx from 'clsx';
+import { makeStyles } from '@material-ui/core/styles';
+import Drawer from '@material-ui/core/Drawer';
+import List from '@material-ui/core/List';
+import ListItem from '@material-ui/core/ListItem';
+import IconButton from '@material-ui/core/IconButton';
+import DisplayIcon from './Admin/Components/Components/DisplayIcon';
+import ListItemText from '@material-ui/core/ListItemText';
+import MenuIcon from '@material-ui/icons/Menu';
+import Fab from '@material-ui/core/Fab';
+import { TabsItens } from './Admin/Pages/AdminLabelTabs/LabelTabs';
+import Welcome from './Admin/Components/Components/Welcome';
+import NoteVariables from './Admin/Pages/Pages/SubPages/NoteVariables';
+import Institution from './Admin/Pages/Pages/SubPages/Institutions';
+import SendEmail from './Admin/Pages/Pages/SubPages/SendEmail';
+import Inframe from './Admin/Pages/Pages/SubPages/Inframe';
+import Languages from './Admin/Pages/Pages/SubPages/Languages';
+import Activity from './Admin/Pages/Pages/SubPages/Activity';
+import InstitutionCard from './Admin/Components/Components/DataCards/InstitutionsCard';
+import InstitutionsInput from './Admin/Components/Components/Inputs/IntitutionsInputs';
+import CreateInstitution from './Admin/Components/Components/Inputs/CreateInstitution';
+import NoteVarCard from './Admin/Components/Components/DataCards/NoteVarCard';
+import NoteVarInputs from './Admin/Components/Components/Inputs/NoteVarInputs';
+import EditLanguage from './Admin/Components/Components/Inputs/EditLanguage';
+import CreateLanguage from './Admin/Components/Components/Inputs/CreateLanguage';
+import ActivityCard from './Admin/Components/Components/DataCards/ActivityCard';
+import CommunityQuestions from './Admin/Pages/Pages/SubPages/CommunityQuestions';
+import CommunityCard from './Admin/Components/Components/DataCards/CommunityQuestionCard';
+import Collections from './Admin/Pages/Pages/SubPages/Collections';
+import CollectionCard from './Admin/Components/Components/DataCards/CollectionCard';
+import EditCollection from './Admin/Components/Components/Inputs/EditCollection';
+import Ratings from './Admin/Pages/Pages/SubPages/Rating';
+import RatingCard from './Admin/Components/Components/DataCards/RatingCard';
+import EditRating from './Admin/Components/Components/Inputs/EditRating';
+import CreateRating from './Admin/Components/Components/Inputs/CreateRating';
+import Questions from './Admin/Pages/Pages/SubPages/Questions';
+import CreateQuestions from './Admin/Components/Components/Inputs/CreateQuestion';
+import EducationalObject from './Admin/Pages/Pages/SubPages/EducationalObjects';
+import EducationalObjectCard from './Admin/Components/Components/DataCards/EducationalObjectsCard';
+import EducationalObjectEdit from './Admin/Components/Components/Inputs/EditEducationalObect';
+import Complaints from './Admin/Pages/Pages/SubPages/Complaints';
+import ComplaintCard from './Admin/Components/Components/DataCards/ComplaintsCard';
+import AproveTeacher from './Admin/Pages/Pages/SubPages/AproveTeacher';
+import UserCard from './Admin/Components/Components/DataCards/UserCard';
+import EditUser from './Admin/Components/Components/Inputs/EditUser';
+import UserList from './Admin/Pages/Pages/SubPages/Users';
+import UserPermissions from './Admin/Pages/Pages/SubPages/Permissions'
+import EditRole from './Admin/Components/Components/Inputs/EditRoles';
+import CreateRole from './Admin/Components/Components/Inputs/CreateRole'
+import BlockedUser from './Admin/Pages/Pages/SubPages/BlockedUsers';
+
+const useStyles = makeStyles({
+  list: {
+      width: 250,
+  },
+  fullList: {
+      width: 'auto',
+  },
+});
+
+const fab = {
+  margin: 0,
+  top: 'auto',
+  right: 20,
+  bottom: 20,
+  left: 'auto',
+  position: 'fixed',
+}
+
+
+export default function App() {
   // eslint-disable-next-line
   const { state, dispatch } = useContext(Store)
-	const [ hideFooter, setHideFooter ] = useState(false);
+  const [hideFooter, setHideFooter] = useState(false);
+  
+  const classes = useStyles();
 
-	useEffect(() => {
-		setHideFooter(String(window.location.href).includes('iframe-colecao'));
-	}, [ window.location.href ]);
+    //State of the Drawer
+    const [State, setState] = React.useState({
+        left: false
+    });
 
-  useEffect(()=>{
-      dispatch({
-        type: 'WINDOW_SIZE',
-        innerWindow: {
-          width: window.innerWidth,
-          height: window.innerHeight
+    const [IndexIcon, setIndexIcon] = useState(0);
+
+    {/**************** Controlls the state of the Drawer ****************/ }
+    const toggleDrawer = (anchor, open) => (event) => {
+        if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) {
+            return;
         }
-      })
-  },[])
 
-  useEffect(()=>{
+        setState({ ...State, [anchor]: open });
+    };
+
+    {/**************** Dsiplay the itens of the Drawer ****************/ }
+    const list = (anchor) => (
+        <div
+            className={clsx(classes.list, {
+                [classes.fullList]: anchor === 'top' || anchor === 'bottom',
+            })}
+            role="presentation"
+            onClick={toggleDrawer(anchor, false)}
+            onKeyDown={toggleDrawer(anchor, false)}
+        >
+            <List>
+                {TabsItens.map((text, index) => (
+                    <Link to={text.href} key={text.label} style={{ color: "black" }}>
+                        <ListItem button key={text.label} onClick={() => setIndexIcon(index)}>
+                            <IconButton>
+                                <DisplayIcon i={index} />
+                            </IconButton>
+                            <ListItemText primary={text.label} />
+                        </ListItem>
+                    </Link>
+                ))}
+            </List>
+        </div>
+    );
+
+
+  useEffect(() => {
+    setHideFooter(String(window.location.href).includes('iframe-colecao'));
+  }, [window.location.href]);
+
+  useEffect(() => {
+    dispatch({
+      type: 'WINDOW_SIZE',
+      innerWindow: {
+        width: window.innerWidth,
+        height: window.innerHeight
+      }
+    })
+  }, [])
+
+  useEffect(() => {
     const setWindowSize = () => {
       dispatch({
         type: 'WINDOW_SIZE',
@@ -81,54 +196,104 @@ export default function App(){
       })
     }
 
-    window.addEventListener('resize',setWindowSize)
+    window.addEventListener('resize', setWindowSize)
 
-    return () => window.removeEventListener('resize',setWindowSize)
-  },[window.innerWidth,window.innerHeight])
+    return () => window.removeEventListener('resize', setWindowSize)
+  }, [window.innerWidth, window.innerHeight])
 
-  return(
+  return (
     <BrowserRouter basename="/react">
       <Header />
-      <div style={{backgroundImage: "linear-gradient(to right,#ff7f00,#e81f4f,#673ab7,#00bcd4)", height:"5px"}}></div>
-      <link href="https://fonts.googleapis.com/css?family=Kalam|Pompiere|Roboto&display=swap" rel="stylesheet"/>
+      <div style={{ backgroundImage: "linear-gradient(to right,#ff7f00,#e81f4f,#673ab7,#00bcd4)", height: "5px" }}></div>
+      <link href="https://fonts.googleapis.com/css?family=Kalam|Pompiere|Roboto&display=swap" rel="stylesheet" />
       <Switch>
-        <Route path="/" exact={true} component={Home}/>
+        <Route path="/" exact={true} component={Home} />
         <Route path="/busca" component={Search} />
         <Route path="/perfil" component={UserPage} />
         <Route path="/editarperfil" component={EditProfilePage} />
-        <Route path="/recurso/:recursoId" component={ResourcePage}/>
-        <Route path="/termos-publicar-recurso" component={TermsPage}/>
-        <Route path="/permission" component={PublicationPermissionsPage}/>
+        <Route path="/recurso/:recursoId" component={ResourcePage} />
+        <Route path="/termos-publicar-recurso" component={TermsPage} />
+        <Route path="/permission" component={PublicationPermissionsPage} />
         {/*<Route path="termos-de-uso#publicacoes-de-usuario" component={}*/}
-        <Route path="/ajuda" component={HelpCenter}/>
-        <Route path="/contato" component={Contact}/>
-      	<Route path="/termos" component={UserTerms}/>
-        <Route path="/teste" component={Teste}/>
-        <Route path="/sobre" component={AboutPage}/>
-        <Route path="/mapa-site" component={SiteMap}/>
-      	<Route path="/acessibilidade" component={Accessibility}/>
-        <Route path="/publicando-recurso" component={TabResoursePub}/>
-        <Route path="/encontrando-recurso" component={TabResourseFind}/>
-        <Route path="/participando-da-rede" component={TabNetPart}/>
-        <Route path="/gerenciando-conta" component={TabManageAc}/>
-        <Route path="/plataforma-mec" component={TabPlataformaMEC}/>
-        <Route path="/recuperar-senha" component={PasswordRecoveryPage}/>
-        <Route path="/usuario-publico/:userId" component={PublicUserPage}/>
-        <Route path="/editar-recurso/:recursoId" component={EditLearningObjectPage}/>
-        <Route path='/professor' component={PageProfessor}/>
-        <Route path="/upload" component={UploadPage}/>
+        <Route path="/ajuda" component={HelpCenter} />
+        <Route path="/contato" component={Contact} />
+        <Route path="/termos" component={UserTerms} />
+        <Route path="/teste" component={Teste} />
+        <Route path="/sobre" component={AboutPage} />
+        <Route path="/mapa-site" component={SiteMap} />
+        <Route path="/acessibilidade" component={Accessibility} />
+        <Route path="/publicando-recurso" component={TabResoursePub} />
+        <Route path="/encontrando-recurso" component={TabResourseFind} />
+        <Route path="/participando-da-rede" component={TabNetPart} />
+        <Route path="/gerenciando-conta" component={TabManageAc} />
+        <Route path="/plataforma-mec" component={TabPlataformaMEC} />
+        <Route path="/recuperar-senha" component={PasswordRecoveryPage} />
+        <Route path="/usuario-publico/:userId" component={PublicUserPage} />
+        <Route path="/editar-recurso/:recursoId" component={EditLearningObjectPage} />
+        <Route path='/professor' component={PageProfessor} />
+        <Route path="/upload" component={UploadPage} />
         <Route path='/loja' component={ItemStore} />
         <Route path='/colecao-do-usuario/:id' component={CollectionPage} />
-				<Route path='/colecao' component={FormationMaterialPage}  />
-				<Route path='/topico' component={FormationMaterialPage}  />
-				<Route path='/iframe-colecao' component={FormationMaterialIframe} />
+        <Route path='/colecao' component={FormationMaterialPage} />
+        <Route path='/topico' component={FormationMaterialPage} />
+        <Route path='/iframe-colecao' component={FormationMaterialIframe} />
+        <div style={{ paddingTop: '2em', paddingLeft: '2em', paddingRight: '2em', paddingBottom: '2em', backgroundColor: '	#D3D3D3' }}>
+          <Route path='/admin/home' exact={true} component={Welcome} />
+          <Route path='/admin/intitutions' component={Institution} />
+          <Route path='/admin/institution/:id' component={InstitutionCard} />
+          <Route path='/admin/institutionEdit/:id' component={InstitutionsInput} />
+          <Route path='/admin/InstitutionCreate' component={CreateInstitution} />
+          <Route path='/admin/noteVars' component={NoteVariables} />
+          <Route path='/admin/noteVar/:id' component={NoteVarCard} />
+          <Route path='/admin/noteVarEdit/:id' component={NoteVarInputs} />
+          <Route path='/admin/languages' component={Languages} />
+          <Route path='/admin/languageEdit/:id' component={EditLanguage} />
+          <Route path='/admin/languageCreate' component={CreateLanguage} />
+          <Route path='/admin/CommunityQuestions' component={CommunityQuestions} />
+          <Route path='/admin/CommunityQuestion/:id' component={CommunityCard} />
+          <Route path='/admin/Collections' component={Collections} />
+          <Route path='/admin/Collection/:id' component={CollectionCard} />
+          <Route path='/admin/EditCollection/:id' component={EditCollection} />
+          <Route path='/admin/Ratings' component={Ratings} />
+          <Route path='/admin/Rating/:id' component={RatingCard} />
+          <Route path='/admin/EditRating/:id' component={EditRating} />
+          <Route path='/admin/CreateRating' component={CreateRating} />
+          <Route path='/admin/Questions' component={Questions} />
+          <Route path='/admin/CreateQuestion' component={CreateQuestions} />
+          <Route path='/admin/activities' component={Activity} />
+          <Route path='/admin/activity/:id' component={ActivityCard} />
+          <Route path='/admin/learningObjects' component={EducationalObject} />
+          <Route path='/admin/learningObject/:id' component={EducationalObjectCard} />
+          <Route path='/admin/learningObjectEdit/:id' component={EducationalObjectEdit} />
+          <Route path='/admin/complaints' component={Complaints} />
+          <Route path='/admin/complaint/:id' component={ComplaintCard} />
+          <Route path='/admin/users/teacher_requests' component={AproveTeacher} />
+          <Route path='/admin/usersList' component={UserList} />
+          <Route path='/admin/user/:id' component={UserCard} />
+          <Route path='/admin/EditUser/:id' component={EditUser} />
+          <Route path='/admin/permissions' component={UserPermissions} />
+          <Route path='/admin/EditPermissions/:id' component={EditRole} />
+          <Route path='/admin/CreateRole' component={CreateRole} />
+          <Route path='/admin/BlockedUsers' component={BlockedUser} />
+          <Route path='/admin/sendEmail/:email' component={SendEmail} />
+          <Route path='/admin/inframe' component={Inframe} />
+          <React.Fragment>
+                <Drawer anchor={'left'} open={State['left']} onClose={toggleDrawer('left', false)}>
+                    {list('left')}
+                </Drawer>
+            </React.Fragment>
+            <Fab color="primary" aria-label="add" style={fab} onClick={toggleDrawer('left', true)}>
+                <MenuIcon />
+            </Fab>
+        </div>
       </Switch>
-			{ !hideFooter &&
-				<div>
-					<EcFooter/>
-					<GNUAGPLfooter/>
-				</div>
-			}
+      {!hideFooter &&
+        <div>
+          <EcFooter />
+          <GNUAGPLfooter />
+        </div>
+      }
     </BrowserRouter>
   )
 }
+
diff --git a/src/Components/Header.js b/src/Components/Header.js
index feb870da33aa604488bdf521f365bcdc2cac2ce7..7cb8a2db3f7652fef30467738dabfec68c6b8e7f 100644
--- a/src/Components/Header.js
+++ b/src/Components/Header.js
@@ -37,12 +37,12 @@ function Alert(props) {
 }
 
 
-export default function Header(props){
-  const { state, dispatch } = useContext(Store)
-  const [signUpOpen, setSignUp] = useState(false)
-  const [loginOpen, setLogin] = useState(false)
-  const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
-  const [modalColaborar, setModalColaborar] = useState(false)
+export default function Header(props) {
+    const { state, dispatch } = useContext(Store)
+    const [signUpOpen, setSignUp] = useState(false)
+    const [loginOpen, setLogin] = useState(false)
+    const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
+    const [modalColaborar, setModalColaborar] = useState(false)
 
   function handleSuccessValidateToken (data) {
       dispatch ({
@@ -96,23 +96,23 @@ export default function Header(props){
           return;
       }
 
-      handleSuccessfulLogin(false);
-  }
+        handleSuccessfulLogin(false);
+    }
 
-  const handleSignUp = () => {
-      setSignUp(!signUpOpen)
-  }
+    const handleSignUp = () => {
+        setSignUp(!signUpOpen)
+    }
 
-  const handleLogin = () => {
-      setLogin(!loginOpen)
-  }
+    const handleLogin = () => {
+        setLogin(!loginOpen)
+    }
 
-  const handleClickSearch = (open) => {
-    dispatch({
-      type: "HANDLE_SEARCH_BAR",
-      opened: !state.searchOpen
-    })
-  }
+    const handleClickSearch = (open) => {
+        dispatch({
+            type: "HANDLE_SEARCH_BAR",
+            opened: !state.searchOpen
+        })
+    }
 
   let windowWidth = window.innerWidth
 
diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js
index dd911f2b4f04d9f33403cb8eda7f1d0a0d30f408..21cc08c712993cf257ec4f56f77c8448f253c45e 100644
--- a/src/Components/MenuBar.js
+++ b/src/Components/MenuBar.js
@@ -16,7 +16,7 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useContext} from 'react';
+import React, { useContext } from 'react';
 import { Link } from 'react-router-dom'
 import { Container } from 'react-grid-system'
 import logo from '../img/logo_small.svg'
@@ -80,7 +80,7 @@ const Right = styled.span`
     margin-right : 10px;
 `
 
-const Left = styled.span `
+const Left = styled.span`
     width: 100%;
     display: inline-flex;
     align-items: center;
@@ -96,10 +96,39 @@ export const ButtonPubRecursoStyled = styled(Button)`
 `
 
 
-export default function MenuBar(props){
+export default function MenuBar(props) {
 
   const { state } = useContext(Store)
 
+  const buildMyAreaTabs = () => {
+    let canUserAdmin = false;
+    let index = 0;
+    const userRoles = [...state.currentUser.roles]
+    const minhaArea = [
+      { name: "Perfil e Atividades", href: "/perfil", value: '0' },
+      { name: "Recursos Publicados", href: "/perfil", value: '1' },
+      { name: "Favoritos", href: "/perfil", value: '2' },
+      { name: "Coleções", href: "/perfil", value: '3' },
+      { name: "Rede", href: "/perfil", value: '4' },
+      { name: "Configurações", href: "/editarperfil", value: '5'},
+    ]
+
+    while (!canUserAdmin && index < userRoles.length) {
+      if(userRoles[index].id === 3 || userRoles[index].id === 7)
+        canUserAdmin = true
+      index++
+    }
+
+    if(canUserAdmin)
+      minhaArea.push({
+        name: "Administrador", 
+        href: "/admin/home", 
+        value: '6',
+      })
+
+    return minhaArea;
+  }
+
   const menuSobre = [
     { name: "Sobre a Plataforma", href: "sobre" },
     { name: "Portais Parceiros", href: "sobre#portaisparceiros" },
@@ -108,72 +137,65 @@ export default function MenuBar(props){
   ]
 
   const menuAjuda = [
-    { name: "Central de Ajuda", href: "ajuda"},
-    { name: "Publicando Recursos", href: "publicando-recurso"},
-    { name: "Encontrando Recursos", href: "encontrando-recurso"},
-    { name: "Participando da Rede", href: "participando-da-rede"},
-    { name: "Gerenciando a Conta", href: "gerenciando-conta"}
+    { name: "Central de Ajuda", href: "ajuda" },
+    { name: "Publicando Recursos", href: "publicando-recurso" },
+    { name: "Encontrando Recursos", href: "encontrando-recurso" },
+    { name: "Participando da Rede", href: "participando-da-rede" },
+    { name: "Gerenciando a Conta", href: "gerenciando-conta" }
   ]
 
-  const minhaArea = [
-      { name: "Perfil e Atividades", href: "/perfil", value : '0'},
-      { name: "Recursos Publicados", href: "/perfil", value : '1'},
-      { name: "Favoritos", href: "/perfil", value : '2'},
-      { name: "Coleções", href: "/perfil", value : '3'},
-      { name: "Rede", href: "/perfil", value : '4'},
-      { name: "Configurações", href: "/editarperfil"},
-  ]
+  const minhaArea = buildMyAreaTabs()
 
-  return(
+  return (
     <ContainerStyled fluid={true} >
       <Left>
         <Link to="/"> <ImageStyled src={logo} alt="Plataforma Integrada" /> </Link>
-        <Dropdown name="Sobre" items={menuSobre}/>
-        <Dropdown name="Ajuda" items={menuAjuda}/>
+        <Dropdown name="Sobre" items={menuSobre} />
+        <Dropdown name="Ajuda" items={menuAjuda} />
         <a href="http://educacaoconectada.mec.gov.br/" rel="noopener noreferrer" target="_blank" >
-            <ButtonStyled >Educação Conectada</ButtonStyled>
+          <ButtonStyled >Educação Conectada</ButtonStyled>
         </a>
         {/*<Link to="/loja">
             <ButtonStyled>Lojinha</ButtonStyled>
         </Link>*/}
         <ButtonStyled onClick={props.openSearchBar} ><IconSearchStyled />Buscar</ButtonStyled>
-        
-     </Left>
-     <Right>
+
+      </Left>
+      <Right>
         {
-            state.userIsLoggedIn
+          state.userIsLoggedIn
             ? (
-                    <>
-                        <div style={{boxSizing:"border-box"}}>
-                            <Link to="/termos-publicar-recurso">
-                                <ButtonPublicarRecurso>
-                                    <CloudUploadIcon style={{color:"white", marginLeft : "0"}}/>
-                                        <span style={{color : "#fff", textAlign: "center", alignSelf : "center", fontWeight:"500"}} >
-                                            PUBLICAR RECURSO
+              <>
+                <div style={{ boxSizing: "border-box" }}>
+                  <Link to="/termos-publicar-recurso">
+                    <ButtonPublicarRecurso>
+                      <CloudUploadIcon style={{ color: "white", marginLeft: "0" }} />
+                      <span style={{ color: "#fff", textAlign: "center", alignSelf: "center", fontWeight: "500" }} >
+                        PUBLICAR RECURSO
                                         </span>
 
-                                </ButtonPublicarRecurso>
-                            </Link>
-                        </div>
+                    </ButtonPublicarRecurso>
+                  </Link>
+                </div>
 
-                        <div>
-                            <Notifications/>
-                        </div>
+                <div>
+                  <Notifications />
+                </div>
 
-                        <MenuList items={minhaArea}/>
+                <MenuList items={minhaArea} />
 
-                    </>
+              </>
             )
             : (
-                    <React.Fragment>
-                        <ButtonPubRecursoStyled onClick={props.openLogin}>PUBLICAR RECURSO?</ButtonPubRecursoStyled>
-                        <ButtonStyled onClick={props.openLogin}><ExitToAppIcon style={{color:"#00bcd4"}}/>Entrar</ButtonStyled>
-                        <ButtonStyled onClick={props.openSignUp}>Cadastre-se</ButtonStyled>
-                    </React.Fragment>
+              <React.Fragment>
+                <ButtonPubRecursoStyled onClick={props.openLogin}>PUBLICAR RECURSO?</ButtonPubRecursoStyled>
+                <ButtonStyled onClick={props.openLogin}><ExitToAppIcon style={{ color: "#00bcd4" }} />Entrar</ButtonStyled>
+                <ButtonStyled onClick={props.openSignUp}>Cadastre-se</ButtonStyled>
+              </React.Fragment>
             )
         }
 
-     </Right>
+      </Right>
     </ContainerStyled>
   );
 }
diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js
index 643b4b04a72b14cda85a328c8f14ee572a13be83..3614035457caeb857efe57232b3857c7a6ced80f 100644
--- a/src/Components/MenuList.js
+++ b/src/Components/MenuList.js
@@ -142,94 +142,3 @@ const StyledMenuItem = styled(MenuItem)`
     color : #a5a5a5 !important;
     padding : 5px 20px !important;
 `
-
-//import React from 'react';
-//import Button from '@material-ui/core/Button';
-//import ClickAwayListener from '@material-ui/core/ClickAwayListener';
-//import Grow from '@material-ui/core/Grow';
-//import Paper from '@material-ui/core/Paper';
-//import Popper from '@material-ui/core/Popper';
-//import MenuItem from '@material-ui/core/MenuItem';
-//import MenuList from '@material-ui/core/MenuList';
-//import { makeStyles } from '@material-ui/styles';
-//import AccountCircleRoundedIcon from '@material-ui/icons/AccountCircleRounded';
-//import styled from 'styled-components'
-//import {BrowserRouter, Switch, Route} from 'react-router-dom';
-//
-//const iconStyles = {
-//    fontSize : "xxx-large",
-//    color: "white",
-//    backgroundColor: "gray",
-//    borderRadius : "50%",
-//    overflow : "hidden",
-//    border : "2px solid #fff",
-//}
-//
-//export default function MenuListComposition(props) {
-//  const [open, setOpen] = React.useState(false);
-//  const anchorRef = React.useRef(null);
-//
-//  const handleToggle = () => {
-//    setOpen(prevOpen => !prevOpen);
-//  };
-//
-//  const handleClose = event => {
-//    if (anchorRef.current && anchorRef.current.contains(event.target)) {
-//      return;
-//    }
-//
-//    setOpen(false);
-//  };
-//
-//  function handleListKeyDown(event) {
-//    if (event.key === 'Tab') {
-//      event.preventDefault();
-//      setOpen(false);
-//    }
-//  }
-//
-//  // return focus to the button when we transitioned from !open -> open
-//// const prevOpen = React.useRef(open);
-////  React.useEffect(() => {
-////    if (prevOpen.current === true && open === false) {
-////      anchorRef.current.focus();
-////    }
-////
-////    prevOpen.current = open;
-////  }, [open]);
-//
-//  return (
-//    <div style={{minWidth:"212px"}}>
-//      <div>
-//      <Button
-//        ref={anchorRef}
-//        aria-controls={open ? 'menu-list-grow' : undefined}
-//        aria-haspopup="true"
-//        onMouseOver={handleToggle}>
-//      <AccountCircleRoundedIcon style={iconStyles}/>
-//        Minha Área
-//      </Button>
-//        <Popper open={open} anchorEl={anchorRef.current} role={undefined} transition disablePortal>
-//          {({ TransitionProps, placement }) => (
-//            <Grow
-//              {...TransitionProps}
-//              style={{ transformOrigin: placement = 'bottom'}}
-//            >
-//              <Paper>
-//                <ClickAwayListener onClickAway={handleClose}>
-//                  {
-//                      props.items.map((item)=>
-//                        <Route path={item.href} ><MenuItem>{item.name}</MenuItem></Route>
-//                    )
-//                }
-//                </ClickAwayListener>
-//              </Paper>
-//            </Grow>
-//          )}
-//        </Popper>
-//      </div>
-//    </div>
-//
-//  );
-//}
-//
diff --git a/src/Components/MobileDrawerMenu.js b/src/Components/MobileDrawerMenu.js
index 01ca7521d766886607235c6691c6e188c7085f7a..59a723e9b081711aa7b3131c5ed37c6311131a06 100644
--- a/src/Components/MobileDrawerMenu.js
+++ b/src/Components/MobileDrawerMenu.js
@@ -16,17 +16,17 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useContext} from 'react'
+import React, { useContext } from 'react'
 import { Store } from '../Store';
 import Drawer from '@material-ui/core/Drawer';
 import styled from 'styled-components'
-import {Link} from 'react-router-dom'
+import { Link } from 'react-router-dom'
 import HomeIcon from '@material-ui/icons/Home';
 import InfoIcon from '@material-ui/icons/Info';
 import MailOutlineIcon from '@material-ui/icons/MailOutline';
 import HelpOutlineIcon from '@material-ui/icons/HelpOutline';
 import AssignmentIcon from '@material-ui/icons/Assignment';
-import {ButtonStyled} from './MenuBar'
+import { ButtonStyled } from './MenuBar'
 import ExitToAppIcon from '@material-ui/icons/ExitToApp'
 import { Button } from '@material-ui/core';
 import DefaultAvatar from '../img/default_profile0.png'
@@ -36,20 +36,49 @@ import HistoryIcon from '@material-ui/icons/History';
 import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';
 import FolderOpenIcon from '@material-ui/icons/FolderOpen';
 import SettingsIcon from '@material-ui/icons/Settings';
-import {apiDomain} from '../env.js'
-import {deleteRequest} from './HelperFunctions/getAxiosConfig'
+import { apiDomain } from '../env.js'
+import { deleteRequest } from './HelperFunctions/getAxiosConfig'
 import SearchIcon from '@material-ui/icons/Search';
 
-export default function MobileDrawerMenu (props) {
-    const {state, dispatch} = useContext(Store)
+export default function MobileDrawerMenu(props) {
+    const { state, dispatch } = useContext(Store)
+
+    const buildMyAreaTabs = () => {
+        let canUserAdmin = false;
+        let index = 0;
+        const userRoles = [...state.currentUser.roles]
+        const minhaArea = [
+            { name: "Perfil e Atividades", href: "/perfil", value: '0' },
+            { name: "Recursos Publicados", href: "/perfil", value: '1' },
+            { name: "Favoritos", href: "/perfil", value: '2' },
+            { name: "Coleções", href: "/perfil", value: '3' },
+            { name: "Rede", href: "/perfil", value: '4' },
+            { name: "Configurações", href: "/editarperfil", value: '5' },
+        ]
+
+        while (!canUserAdmin && index < userRoles.length) {
+            if (userRoles[index].id === 3 || userRoles[index].id === 7)
+                canUserAdmin = true
+            index++
+        }
+
+        if (canUserAdmin)
+            minhaArea.push({
+                name: "Administrador",
+                href: "/admin/home",
+                value: '6',
+            })
+
+        return minhaArea;
+    }
 
     const menuSobre = [
-        { name : "Página Inicial", href : "/", icon : <HomeIcon/>},
-        { name : "Sobre a Plataforma", href : "sobre", icon : <InfoIcon/>},
-        { name : "Contato", href : "contato", icon : <MailOutlineIcon/>},
-        { name : "Central de Ajuda", href : "ajuda", icon : <HelpOutlineIcon/>},
-        { name : "Termos de Uso", href : "termos", icon : <AssignmentIcon/>},
-        { name : "Busca", href : `busca?query=${state.search.query}&search_class=${state.search.class}`, icon : <SearchIcon/> }
+        { name: "Página Inicial", href: "/", icon: <HomeIcon /> },
+        { name: "Sobre a Plataforma", href: "sobre", icon: <InfoIcon /> },
+        { name: "Contato", href: "contato", icon: <MailOutlineIcon /> },
+        { name: "Central de Ajuda", href: "ajuda", icon: <HelpOutlineIcon /> },
+        { name: "Termos de Uso", href: "termos", icon: <AssignmentIcon /> },
+        { name: "Busca", href: `busca?query=${state.search.query}&search_class=${state.search.class}`, icon: <SearchIcon /> }
     ]
 
     // {/*used in dynamic css selection*/}
@@ -58,7 +87,7 @@ export default function MobileDrawerMenu (props) {
         setSelectedIndex(index);
     };
 
-    const getUserAvatar = ()  => {
+    const getUserAvatar = () => {
         if (state.currentUser.avatar === '' || state.currentUser.avatar == null) {
             return DefaultAvatar
         }
@@ -68,109 +97,102 @@ export default function MobileDrawerMenu (props) {
     }
 
     // {/*main user actions array */}
-    const minhaArea = [
-        { name: "Publicar Recurso", href: "/termos-publicar-recurso", icon : <CloudUploadIcon/>},
-        { name: "Recursos Publicados", href: "/perfil", icon : <CloudDoneIcon/>, value : '1'},
-        { name: "Perfil e Atividades", href: "/perfil", icon : <HistoryIcon/>, value : '0'},
-        { name: "Favoritos", href: "/perfil", icon : <FavoriteBorderIcon/>, value : '2'},
-        { name: "Coleções", href: "/perfil", icon : <FolderOpenIcon/>, value : '3'},
-    ]
-
+    const minhaArea = buildMyAreaTabs()
 
-    function handleSuccessSignOut (data) {
-        dispatch( {
+    function handleSuccessSignOut(data) {
+        dispatch({
             type: 'USER_LOGGED_OUT',
             userLoggedOut: !state.userIsLoggedIn,
         })
     }
     const handleLogout = () => {
         const url = `/auth/sign_out`
-        deleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
+        deleteRequest(url, handleSuccessSignOut, (error) => { console.log(error) })
     }
 
     return (
         <StyledDrawer anchor={props.anchor} open={props.open} onClose={props.onClose}>
             <MenuBody>
-            {/*Renders menuSobre array options*/}
+                {/*Renders menuSobre array options*/}
                 {
-                    menuSobre.map( (item, index) =>
+                    menuSobre.map((item, index) =>
                         <Link to={item.href} className={`menu-buttons ${selectedIndex === index ? 'selected' : ''}`} onClick={(event) => handleMenuItemClick(event, index)}>
-                                {item.icon}
-                                {item.name}
+                            {item.icon}
+                            {item.name}
                         </Link>
                     )
                 }
             </MenuBody>
 
 
-            <div style={{borderTop : "1px solid #e5e5e5", borderBottom : "1px solid #e5e5e5", marginTop : "10px", paddingTop : "10px", marginBottom : "10px"}}>
-            {
-                /*If user is logged in, render user actions menu; else render log in/sign in buttons*/
-                state.userIsLoggedIn ?
-                (
-                    <div style={{display : "flex", flexDirection : "column", color : "#666", paddingBottom : "10px"}}>
-                        <MyArea>
-                            <div className="user-avatar">
-                                <img alt="user-avatar"
-                                    src={getUserAvatar()}
-                                />
+            <div style={{ borderTop: "1px solid #e5e5e5", borderBottom: "1px solid #e5e5e5", marginTop: "10px", paddingTop: "10px", marginBottom: "10px" }}>
+                {
+                    /*If user is logged in, render user actions menu; else render log in/sign in buttons*/
+                    state.userIsLoggedIn ?
+                        (
+                            <div style={{ display: "flex", flexDirection: "column", color: "#666", paddingBottom: "10px" }}>
+                                <MyArea>
+                                    <div className="user-avatar">
+                                        <img alt="user-avatar"
+                                            src={getUserAvatar()}
+                                        />
+                                    </div>
+                                    <span className="text">Minha área</span>
+                                </MyArea>
+
+                                {
+                                    minhaArea.map((item, index) =>
+                                        <Link to={{
+                                            pathname: item.href,
+                                            state: item.value
+                                        }}
+                                            className={`menu-buttons ${selectedIndex === (index + menuSobre.length) ? 'selected' : ''}`}
+                                            onClick={(event) => handleMenuItemClick(event, index + menuSobre.length)}
+                                        >
+                                            {item.icon}
+                                            {item.name}
+                                        </Link>
+                                    )
+                                }
+
                             </div>
-                            <span className="text">Minha área</span>
-                        </MyArea>
-
-                        {
-                            minhaArea.map( (item, index) =>
-                                <Link to={{
-                                        pathname : item.href,
-                                        state: item.value
-                                    }}
-                                    className={`menu-buttons ${selectedIndex === (index  + menuSobre.length) ? 'selected' : ''}`}
-                                    onClick={(event) => handleMenuItemClick(event, index + menuSobre.length)}
-                                    >
-                                        {item.icon}
-                                        {item.name}
-                                </Link>
-                            )
-                        }
-
-                    </div>
-                )
-                :
-                (
-                    <React.Fragment>
-                        <div style={{display : "flex", justifyContent : "center", marginTop : "10px"}}>
-                            <ButtonPublicarRecurso onClick={props.openLogin}>
-                                PUBLICAR RECURSO?
+                        )
+                        :
+                        (
+                            <React.Fragment>
+                                <div style={{ display: "flex", justifyContent: "center", marginTop: "10px" }}>
+                                    <ButtonPublicarRecurso onClick={props.openLogin}>
+                                        PUBLICAR RECURSO?
                             </ButtonPublicarRecurso>
-                        </div>
+                                </div>
 
-                        <div style={{display : "flex", flexDirection : "row", margin : "10px 0", justifyContent : "center"}}>
-                            <div style={{borderRight : "1px solid #e5e5e5"}}>
-                                <ButtonStyled onClick={props.openLogin}>
-                                    <ExitToAppIcon style={{color:"#00bcd4"}}/>Entrar
+                                <div style={{ display: "flex", flexDirection: "row", margin: "10px 0", justifyContent: "center" }}>
+                                    <div style={{ borderRight: "1px solid #e5e5e5" }}>
+                                        <ButtonStyled onClick={props.openLogin}>
+                                            <ExitToAppIcon style={{ color: "#00bcd4" }} />Entrar
                                 </ButtonStyled>
-                            </div>
+                                    </div>
 
-                            <div>
-                                <ButtonStyled onClick={props.openSignUp}>
-                                    Cadastre-se
+                                    <div>
+                                        <ButtonStyled onClick={props.openSignUp}>
+                                            Cadastre-se
                                 </ButtonStyled>
-                            </div>
-                        </div>
-                    </React.Fragment>
-                )
-            }
+                                    </div>
+                                </div>
+                            </React.Fragment>
+                        )
+                }
             </div>
             {
                 /*Renders settings and log off buttons */
                 state.userIsLoggedIn &&
                 <React.Fragment>
                     <Link to={"/editarperfil"} className={`menu-buttons`}>
-                        <SettingsIcon/> Configurações
+                        <SettingsIcon /> Configurações
                     </Link>
 
                     <Link to={"/"} className={`menu-buttons`} onClick={handleLogout}>
-                        <ExitToAppIcon/> Sair
+                        <ExitToAppIcon /> Sair
                     </Link>
                 </React.Fragment>
             }
diff --git a/src/Components/SearchSection.js b/src/Components/SearchSection.js
index 228d72b41c9762d19fc62fe0d73676ed36fc643a..c2cdfc4e12bcf56e4d3b19376059d75f84d60c3f 100644
--- a/src/Components/SearchSection.js
+++ b/src/Components/SearchSection.js
@@ -25,31 +25,31 @@ import {MdInfoOutline} from "react-icons/md"
 import { FaRegPlayCircle} from "react-icons/fa";
 import ModalVideoApresentacao from "./ModalVideoApresentacao.js"
 
-const bannerStyle={
-  width: "100%",
-  backgroundImage: `url(${banner})`,
-  backgroundSize: "cover",
-  textAlign: "center"
+const bannerStyle = {
+    width: "100%",
+    backgroundImage: `url(${banner})`,
+    backgroundSize: "cover",
+    textAlign: "center"
 }
-const titleStyle={
-  color: "white",
-  paddingTop: "5%"
+const titleStyle = {
+    color: "white",
+    paddingTop: "5%"
 }
-const buttonStyle={
-  alignItems: "flex-start",
-  fontSize: "0.7em",
-  textAlign: "center",
-  cursor: "pointer",
-  borderTopLeftRadius: "15px",
-  borderTopRightRadius: "15px",
-  lineHeight: 1.42857143,
-  width: "20%",
-  marginTop: "1%",
-  color: "white",
-  padding: "1.2%",
-  borderWidth: "5%",
-  borderStyle: "none",
-  borderImage: "initial"
+const buttonStyle = {
+    alignItems: "flex-start",
+    fontSize: "0.7em",
+    textAlign: "center",
+    cursor: "pointer",
+    borderTopLeftRadius: "15px",
+    borderTopRightRadius: "15px",
+    lineHeight: 1.42857143,
+    width: "20%",
+    marginTop: "1%",
+    color: "white",
+    padding: "1.2%",
+    borderWidth: "5%",
+    borderStyle: "none",
+    borderImage: "initial"
 }
 
 class SearchSection extends Component{
diff --git a/src/Components/SnackbarComponent.js b/src/Components/SnackbarComponent.js
index 74730d3c4b949a6e4af69f5799ba6bad09961fca..0a359a78ba406c70f94ce37fba45b979f4608f60 100644
--- a/src/Components/SnackbarComponent.js
+++ b/src/Components/SnackbarComponent.js
@@ -22,10 +22,10 @@ import Snackbar from '@material-ui/core/Snackbar';
 
 export default function SnackbarComponent (props) {
     return (
-        <Snackbar open={props.snackbarOpen} autoHideDuration={1000} onClose={props.handleClose}
+        <Snackbar open={props.snackbarOpen} autoHideDuration={3000} onClose={props.handleClose}
         anchorOrigin = {{ vertical:'top', horizontal:'right' }}
         >
-            <Alert severity={props.severity} style={{backgroundColor:"#00acc1"}}>
+            <Alert severity={props.severity}  style={ props.color === null ? {backgroundColor:"#00acc1"} : {backgroundColor: props.color}}>
                 {props.text}
             </Alert>
         </Snackbar>
diff --git a/src/Pages/Home.js b/src/Pages/Home.js
index 2ad839baec1eabd782b36dfb2e523637b7d2ad27..9e1ed689888c44d5f3f7ad22d6896f239980ab8d 100755
--- a/src/Pages/Home.js
+++ b/src/Pages/Home.js
@@ -16,37 +16,37 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {Component} from 'react';
+import React, { Component } from 'react';
 import './Styles/Home.css';
 import SearchSection from '../Components/SearchSection';
 import SubPages from '../Components/AreasSubPages';
 import StatsBar from '../Components/StatsBar';
 import Funcionalities from '../Components/Funcionalities';
 class App extends Component {
-  constructor(props){
-    super(props);
-    this.state={
-      bannerState: "Recursos"
-    };
-    this.changeBanner = this.changeBanner.bind(this)
-  }
-
-  changeBanner(parameter){
-    this.setState({
-      bannerState: parameter
-    });
-  }
+    constructor(props) {
+        super(props);
+        this.state = {
+            bannerState: "Recursos"
+        };
+        this.changeBanner = this.changeBanner.bind(this)
+    }
+
+    changeBanner(parameter) {
+        this.setState({
+            bannerState: parameter
+        });
+    }
 
     render() {
-      return (
-        <React.Fragment>
-          <SearchSection function={this.changeBanner} banner={this.state.bannerState}/>
-          <SubPages banner={this.state.bannerState}/>
-          <StatsBar/>
-          <Funcionalities/>
-        </React.Fragment>
-      );
+        return (
+            <React.Fragment>
+                <SearchSection function={this.changeBanner} banner={this.state.bannerState} />
+                <SubPages banner={this.state.bannerState} />
+                <StatsBar />
+                <Funcionalities />
+            </React.Fragment>
+        );
     }
-  }
+}
 
 export default App;
diff --git a/src/Store.js b/src/Store.js
index cd077019da28bea447876f15b4c1c8abd3ab8ac8..2cf8d373cb9b4f3f88c18bfd71199b893af0886d 100644
--- a/src/Store.js
+++ b/src/Store.js
@@ -49,6 +49,8 @@ const initialState = {
   }
 }
 
+
+
 function reducer(state, action) {
   switch (action.type){
     case 'SAVE_SEARCH':
@@ -169,11 +171,11 @@ function reducer(state, action) {
 }
 
 export function StoreProvider(props) {
-  const [state, dispatch] = React.useReducer(reducer, initialState);
-  const value = { state, dispatch };
-  return (
-    <Store.Provider value={value}>
-      {props.children}
-    </Store.Provider>
-  )
+    const [state, dispatch] = React.useReducer(reducer, initialState);
+    const value = { state, dispatch };  
+    return (
+        <Store.Provider value={value}>
+            {props.children}
+        </Store.Provider>
+    )
 }
diff --git a/src/env.js b/src/env.js
index c13c03e40d90e114c527b17dd43088c759948fcb..82bf229b11fe78f3cb5ff8a58d096eec156cedf2 100644
--- a/src/env.js
+++ b/src/env.js
@@ -17,7 +17,7 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 
-var apiDomain = 'https://api.portalmec.c3sl.ufpr.br',
+var apiDomain = 'https://api.portalmectest.c3sl.ufpr.br',
     apiVersion = 'v1',
     apiUrl = apiDomain + '/' + apiVersion;
 
@@ -25,6 +25,7 @@ var simcaqAPIDomain = 'https://www.simcaq.c3sl.ufpr.br/api',
     apiSimcaqVersion = 'v1',
     simcaqAPIurl = simcaqAPIDomain + '/' + apiSimcaqVersion
 
+
 export {apiUrl};
 export {apiDomain};
 export {simcaqAPIurl}
diff --git a/src/index.css b/src/index.css
index 4e83f283d3889e3eed001d2fa220e4b5f0b009d9..954a9e8f75d3224cd71757bc80193fdaad5ac914 100755
--- a/src/index.css
+++ b/src/index.css
@@ -30,3 +30,7 @@ code {
   font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
     monospace;
 }
+
+a {
+  text-decoration: none;
+}
diff --git a/tsconfig.json b/tsconfig.json
index 0980b23fa1e05a97ba9ea750849ebc32ab890875..ce12e006e2adffd753e4462829f288ad87393ca0 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,6 +10,7 @@
     "skipLibCheck": true,
     "esModuleInterop": true,
     "allowSyntheticDefaultImports": true,
+    "experimentalDecorators" : true,
     "strict": true,
     "forceConsistentCasingInFileNames": true,
     "module": "esnext",