diff --git a/config.xml b/config.xml
index bac29b4..0e8b1e7 100644
--- a/config.xml
+++ b/config.xml
@@ -84,4 +84,7 @@
     <plugin name="cordova-plugin-network-information" spec="^2.0.1" />
     <plugin name="onesignal-cordova-plugin" spec="^2.4.1" />
     <plugin name="cordova-plugin-request-location-accuracy" spec="^2.2.3" />
+    <plugin name="cordova-plugin-geolocation" spec="^4.0.1">
+        <variable name="GEOLOCATION_USAGE_DESCRIPTION" value="To locate you" />
+    </plugin>
 </widget>
diff --git a/package-lock.json b/package-lock.json
index 90ede18..f3d46b7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -99,11 +99,217 @@
         "tslib": "1.9.3"
       }
     },
+    "@firebase/app": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.3.3.tgz",
+      "integrity": "sha512-V5fMC2Ysx1TlHD6x7vj7EOtoyJSU/ts+fp9qxt0E3TA+DbWgKFrkcL+o2jZhi30h0sXKV7oW0vh67YZdZylqOg==",
+      "requires": {
+        "@firebase/app-types": "0.3.2",
+        "@firebase/util": "0.2.1",
+        "dom-storage": "2.1.0",
+        "tslib": "1.9.0",
+        "xmlhttprequest": "1.8.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+          "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+        }
+      }
+    },
+    "@firebase/app-types": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.3.2.tgz",
+      "integrity": "sha512-ZD8lTgW07NGgo75bTyBJA8Lt9+NweNzot7lrsBtIvfciwUzaFJLsv2EShqjBeuhF7RpG6YFucJ6m67w5buCtzw=="
+    },
+    "@firebase/auth": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.7.0.tgz",
+      "integrity": "sha512-OUjjtq91VFALUjVYp9meHMNtG40mibzkPKIWKAVkc3zucXORShxsDBGRlXjrVSENrQDr7FLrOF2kWCZXwvjiFQ==",
+      "requires": {
+        "@firebase/auth-types": "0.3.4"
+      }
+    },
+    "@firebase/auth-types": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.3.4.tgz",
+      "integrity": "sha512-0r3gSQk9jw5orFHCTUIgao0zan6dHt2J0BO3t/uEzbod+uwqvUn/gh+yg+kK6HX92Fg8E7y030KX4Bw/aXt0Ew=="
+    },
+    "@firebase/database": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.3.3.tgz",
+      "integrity": "sha512-8r/snlMuOB6QXdkfjbZaFxK1U8CbQgCG0rVfMHclRVNQhZLtTEtiVNDTQk75bfxY0k+iqyg+6fsNWClA92glcg==",
+      "requires": {
+        "@firebase/database-types": "0.3.2",
+        "@firebase/logger": "0.1.1",
+        "@firebase/util": "0.2.1",
+        "faye-websocket": "0.11.1",
+        "tslib": "1.9.0"
+      },
+      "dependencies": {
+        "faye-websocket": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+          "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+          "requires": {
+            "websocket-driver": "0.7.0"
+          }
+        },
+        "tslib": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+          "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+        }
+      }
+    },
+    "@firebase/database-types": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.3.2.tgz",
+      "integrity": "sha512-9ZYdvYQ6r3aaHJarhUM5Hf6lQWu3ZJme+RR0o8qfBb9L04TL3uNjt+AJFku1ysVPntTn+9GqJjiIB2/OC3JtwA=="
+    },
+    "@firebase/firestore": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.5.5.tgz",
+      "integrity": "sha512-JE97NcAinBSt2JArhjSHWETldUHn5gWhl25jQkiwIhEUqcie4Km0xcXFveah8GNaHJQYfz61RPCV4lkjJoEtQw==",
+      "requires": {
+        "@firebase/firestore-types": "0.4.3",
+        "@firebase/logger": "0.1.1",
+        "@firebase/webchannel-wrapper": "0.2.8",
+        "grpc": "1.11.3",
+        "tslib": "1.9.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+          "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+        }
+      }
+    },
+    "@firebase/firestore-types": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-0.4.3.tgz",
+      "integrity": "sha512-QdFBhH0Bcw7TRodN6nJ1pQq0AGAgMfpIUQguKcogTE/2L/lAECxbUfTWtBcGenKcSKpae5xJuuhGZxaPGkQv7A=="
+    },
+    "@firebase/functions": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.2.4.tgz",
+      "integrity": "sha512-HSa2MdBRPWltv1gvE1nWmbzxtWt5jJt4gZ8wje5qEIld7tbLvaWCJRvLGwH/dX1r9s6u6GtDF9FD4Gn2z2xFiQ==",
+      "requires": {
+        "@firebase/functions-types": "0.1.3",
+        "@firebase/messaging-types": "0.2.3",
+        "isomorphic-fetch": "2.2.1",
+        "tslib": "1.9.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+          "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+        }
+      }
+    },
+    "@firebase/functions-types": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.1.3.tgz",
+      "integrity": "sha512-9cOrF5b2B3kfdwsRm3owSXZciIQbupbEKhq4WTsLRXU8mz8ol7WxuOuG/FwYaHryeI8z29gIzP9NpiGoKJgo4w=="
+    },
+    "@firebase/logger": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.1.tgz",
+      "integrity": "sha512-5jn3HHbEfdOwychyIEIkP1cik+MW/vvoOavTOzwDkH+fv6Bx+HBUOzh09M7sCYzXFtKzjbUax9+g39mJNBLklQ=="
+    },
+    "@firebase/messaging": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.3.5.tgz",
+      "integrity": "sha512-+FkrW+li/QOqSXUGipOEvqPUSy1/ZH7zibB63UtRHy3LSwxn5PZ6lKgaeCVkWZBwCHm92riHrjR0cpRhE4+4SQ==",
+      "requires": {
+        "@firebase/messaging-types": "0.2.3",
+        "@firebase/util": "0.2.1",
+        "tslib": "1.9.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+          "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+        }
+      }
+    },
+    "@firebase/messaging-types": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.2.3.tgz",
+      "integrity": "sha512-avwCgZzcx2uxIW/wT3p3G/EyHftIrvMyiTS7AA7dxDlzfx+8dpAeTsb1+jsHJT4F6foSh5HG17Nw8sDzYuxH1Q=="
+    },
+    "@firebase/polyfill": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.3.tgz",
+      "integrity": "sha512-xs8IZf1WEbufYXyfV8YjmiFZOaujRRq0T03NteihYfuGVTTym7z5SmvLvEHLEUjf2fgeobPEzZ2JgrCQHS+QHw==",
+      "requires": {
+        "core-js": "2.5.5",
+        "promise-polyfill": "7.1.2",
+        "whatwg-fetch": "2.0.4"
+      },
+      "dependencies": {
+        "promise-polyfill": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-7.1.2.tgz",
+          "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ=="
+        }
+      }
+    },
+    "@firebase/storage": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.2.3.tgz",
+      "integrity": "sha512-2sq5jckWszW53gfQMkPNc7EumJ92oErRhzGJANbVzBumwR8qwKZU8/I+/uV9SPK1tVmSUc3S21jdoW5oOJVEuA==",
+      "requires": {
+        "@firebase/storage-types": "0.2.3",
+        "tslib": "1.9.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+          "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+        }
+      }
+    },
+    "@firebase/storage-types": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.2.3.tgz",
+      "integrity": "sha512-RaZeam2LgsB7xwAtOQr4G0Geoyf7D5TnLF3a12By6Rh0Z9PqBSlWn0SVYGW3SkmxIdqvWZMZvCyamUlqQvQzWw=="
+    },
+    "@firebase/util": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.1.tgz",
+      "integrity": "sha512-KPNcIK5+bUUBMII87NqGu+tRUnMcY95xujS2z0QyAfoQCKe11DMHICv3M6uweiLSXqdQwrMTyFtiql1q+0UOYQ==",
+      "requires": {
+        "tslib": "1.9.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+          "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+        }
+      }
+    },
+    "@firebase/webchannel-wrapper": {
+      "version": "0.2.8",
+      "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.8.tgz",
+      "integrity": "sha512-ToJbeJnxDc3O325FvcKVb3yHO1hvgHjCFvhKol6Z17GiB7vL104POjFQT4RnlLiAGSRCBAMxinDec9y9vQYdyg=="
+    },
     "@ionic-native/core": {
       "version": "4.7.0",
       "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-4.7.0.tgz",
       "integrity": "sha512-BT4a9qIl3qfJMukcfMPtXDAAsOrYIAoVQvCodDZhqGExTakIx0/JlOr+lZa6KEU46CoA1SEctcBjj0N+nNcWOw=="
     },
+    "@ionic-native/geolocation": {
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/@ionic-native/geolocation/-/geolocation-4.8.0.tgz",
+      "integrity": "sha512-5WcloJjAbKTG9WcAvJnRPgylTbVZgWB25LyejQb6bed4by/jE3yHmL+CmSetmFsu00/NvMQrE3BmrC/tJBLulA=="
+    },
     "@ionic-native/location-accuracy": {
       "version": "4.8.0",
       "resolved": "https://registry.npmjs.org/@ionic-native/location-accuracy/-/location-accuracy-4.8.0.tgz",
@@ -250,11 +456,15 @@
       "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
     },
+    "angularfire2": {
+      "version": "5.0.0-rc.11",
+      "resolved": "https://registry.npmjs.org/angularfire2/-/angularfire2-5.0.0-rc.11.tgz",
+      "integrity": "sha512-Jr6uEquMRuJSgYTw8YxNkDwpkvg2CDJtLlQD0AdMXYoUAwcgsIE4ar7qatIJ2/fwX12TO+oPooCyr0G4GjdwXQ=="
+    },
     "ansi-regex": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-      "dev": true
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
     },
     "ansi-styles": {
       "version": "3.2.1",
@@ -335,6 +545,15 @@
       "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
       "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
     },
+    "ascli": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
+      "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
+      "requires": {
+        "colour": "0.7.1",
+        "optjs": "3.2.2"
+      }
+    },
     "asn1": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
@@ -835,6 +1054,14 @@
       "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
       "dev": true
     },
+    "bytebuffer": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
+      "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
+      "requires": {
+        "long": "3.2.0"
+      }
+    },
     "bytes": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -869,8 +1096,7 @@
     "camelcase": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-      "dev": true
+      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
     },
     "camelcase-keys": {
       "version": "2.1.0",
@@ -990,7 +1216,6 @@
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
       "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-      "dev": true,
       "requires": {
         "string-width": "1.0.2",
         "strip-ansi": "3.0.1",
@@ -1006,8 +1231,7 @@
     "code-point-at": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-      "dev": true
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
     },
     "collection-visit": {
       "version": "1.0.0",
@@ -1034,6 +1258,11 @@
       "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
       "dev": true
     },
+    "colour": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
+      "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
+    },
     "combined-stream": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
@@ -1117,6 +1346,11 @@
       "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
       "dev": true
     },
+    "cordova-plugin-geolocation": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/cordova-plugin-geolocation/-/cordova-plugin-geolocation-4.0.1.tgz",
+      "integrity": "sha1-RwP6ZJ0kBdJamnMsmev4aHVKLAQ="
+    },
     "cordova-plugin-network-information": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/cordova-plugin-network-information/-/cordova-plugin-network-information-2.0.1.tgz",
@@ -1127,6 +1361,11 @@
       "resolved": "https://registry.npmjs.org/cordova-plugin-request-location-accuracy/-/cordova-plugin-request-location-accuracy-2.2.3.tgz",
       "integrity": "sha512-cwcG+4sHIU/Vfe1mvEtXh5hfo4k8OEdHo1Rdc9GU0YU/5J/umsBQdHfuBJ7hez59N7lRoUKpKhLhcY8MPBz9Fg=="
     },
+    "core-js": {
+      "version": "2.5.5",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+      "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs="
+    },
     "core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -1261,8 +1500,7 @@
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
     },
     "decode-uri-component": {
       "version": "0.2.0",
@@ -1398,6 +1636,11 @@
         }
       }
     },
+    "dom-storage": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
+      "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
+    },
     "domain-browser": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -1453,6 +1696,14 @@
       "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
       "dev": true
     },
+    "encoding": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "requires": {
+        "iconv-lite": "0.4.19"
+      }
+    },
     "enhanced-resolve": {
       "version": "3.4.1",
       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
@@ -1872,6 +2123,21 @@
         "pinkie-promise": "2.0.1"
       }
     },
+    "firebase": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/firebase/-/firebase-5.1.0.tgz",
+      "integrity": "sha512-Q9m10Jvfge+2PAbxBM5zy0BiTf3UhAY5W32nIhwg6yKVhq4ZCk6xeZcxoLqTwKJLdJRH05rpnz9mx88QaAP5oQ==",
+      "requires": {
+        "@firebase/app": "0.3.3",
+        "@firebase/auth": "0.7.0",
+        "@firebase/database": "0.3.3",
+        "@firebase/firestore": "0.5.5",
+        "@firebase/functions": "0.2.4",
+        "@firebase/messaging": "0.3.5",
+        "@firebase/polyfill": "0.3.3",
+        "@firebase/storage": "0.2.3"
+      }
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -1942,8 +2208,7 @@
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
     "fstream": {
       "version": "1.0.11",
@@ -2042,7 +2307,6 @@
       "version": "7.1.2",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
       "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-      "dev": true,
       "requires": {
         "fs.realpath": "1.0.0",
         "inflight": "1.0.6",
@@ -2085,6 +2349,421 @@
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
       "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
     },
+    "grpc": {
+      "version": "1.11.3",
+      "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.11.3.tgz",
+      "integrity": "sha512-7fJ40USpnP7hxGK0uRoEhJz6unA5VUdwInfwAY2rK2+OVxdDJSdTZQ/8/M+1tW68pHZYgHvg2ohvJ+clhW3ANg==",
+      "requires": {
+        "lodash": "4.17.10",
+        "nan": "2.10.0",
+        "node-pre-gyp": "0.10.0",
+        "protobufjs": "5.0.3"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.4",
+          "bundled": true,
+          "requires": {
+            "delegates": "1.0.0",
+            "readable-stream": "2.3.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "requires": {
+            "balanced-match": "1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.5.1",
+          "bundled": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "requires": {
+            "minipass": "2.2.4"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "requires": {
+            "aproba": "1.2.0",
+            "console-control-strings": "1.1.0",
+            "has-unicode": "2.0.1",
+            "object-assign": "4.1.1",
+            "signal-exit": "3.0.2",
+            "string-width": "1.0.2",
+            "strip-ansi": "3.0.1",
+            "wide-align": "1.1.2"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "bundled": true,
+          "requires": {
+            "fs.realpath": "1.0.0",
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "iconv-lite": {
+          "version": "0.4.19",
+          "bundled": true
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "requires": {
+            "minimatch": "3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "requires": {
+            "once": "1.4.0",
+            "wrappy": "1.0.2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "number-is-nan": "1.0.1"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "requires": {
+            "brace-expansion": "1.1.11"
+          }
+        },
+        "minimist": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "minipass": {
+          "version": "2.2.4",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "5.1.1",
+            "yallist": "3.0.2"
+          }
+        },
+        "minizlib": {
+          "version": "1.1.0",
+          "bundled": true,
+          "requires": {
+            "minipass": "2.2.4"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "requires": {
+            "minimist": "0.0.8"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "0.0.8",
+              "bundled": true
+            }
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "needle": {
+          "version": "2.2.1",
+          "bundled": true,
+          "requires": {
+            "debug": "2.6.9",
+            "iconv-lite": "0.4.19",
+            "sax": "1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.10.0",
+          "bundled": true,
+          "requires": {
+            "detect-libc": "1.0.3",
+            "mkdirp": "0.5.1",
+            "needle": "2.2.1",
+            "nopt": "4.0.1",
+            "npm-packlist": "1.1.10",
+            "npmlog": "4.1.2",
+            "rc": "1.2.7",
+            "rimraf": "2.6.2",
+            "semver": "5.5.0",
+            "tar": "4.4.2"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "requires": {
+            "abbrev": "1.1.1",
+            "osenv": "0.1.5"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "npm-packlist": {
+          "version": "1.1.10",
+          "bundled": true,
+          "requires": {
+            "ignore-walk": "3.0.1",
+            "npm-bundled": "1.0.3"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "requires": {
+            "are-we-there-yet": "1.1.4",
+            "console-control-strings": "1.1.0",
+            "gauge": "2.7.4",
+            "set-blocking": "2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "requires": {
+            "wrappy": "1.0.2"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "requires": {
+            "os-homedir": "1.0.2",
+            "os-tmpdir": "1.0.2"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "rc": {
+          "version": "1.2.7",
+          "bundled": true,
+          "requires": {
+            "deep-extend": "0.5.1",
+            "ini": "1.3.5",
+            "minimist": "1.2.0",
+            "strip-json-comments": "2.0.1"
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "requires": {
+            "core-util-is": "1.0.2",
+            "inherits": "2.0.3",
+            "isarray": "1.0.0",
+            "process-nextick-args": "2.0.0",
+            "safe-buffer": "5.1.1",
+            "string_decoder": "1.1.1",
+            "util-deprecate": "1.0.2"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.2",
+          "bundled": true,
+          "requires": {
+            "glob": "7.1.2"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.1",
+          "bundled": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true
+        },
+        "semver": {
+          "version": "5.5.0",
+          "bundled": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "requires": {
+            "code-point-at": "1.1.0",
+            "is-fullwidth-code-point": "1.0.0",
+            "strip-ansi": "3.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "tar": {
+          "version": "4.4.2",
+          "bundled": true,
+          "requires": {
+            "chownr": "1.0.1",
+            "fs-minipass": "1.2.5",
+            "minipass": "2.2.4",
+            "minizlib": "1.1.0",
+            "mkdirp": "0.5.1",
+            "safe-buffer": "5.1.2",
+            "yallist": "3.0.2"
+          },
+          "dependencies": {
+            "safe-buffer": {
+              "version": "5.1.2",
+              "bundled": true
+            }
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "wide-align": {
+          "version": "1.1.2",
+          "bundled": true,
+          "requires": {
+            "string-width": "1.0.2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "yallist": {
+          "version": "3.0.2",
+          "bundled": true
+        }
+      }
+    },
     "har-validator": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
@@ -2275,8 +2954,7 @@
     "http-parser-js": {
       "version": "0.4.13",
       "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz",
-      "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=",
-      "dev": true
+      "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc="
     },
     "http-signature": {
       "version": "1.1.1",
@@ -2298,8 +2976,7 @@
     "iconv-lite": {
       "version": "0.4.19",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
-      "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
-      "dev": true
+      "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
     },
     "ieee754": {
       "version": "1.1.12",
@@ -2337,7 +3014,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
       "requires": {
         "once": "1.4.0",
         "wrappy": "1.0.2"
@@ -2366,8 +3042,7 @@
     "invert-kv": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-      "dev": true
+      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
     },
     "ionic-angular": {
       "version": "3.9.2",
@@ -2486,7 +3161,6 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
       "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "dev": true,
       "requires": {
         "number-is-nan": "1.0.1"
       }
@@ -2585,8 +3259,7 @@
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
-      "dev": true
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
     },
     "is-typedarray": {
       "version": "1.0.0",
@@ -2625,6 +3298,15 @@
         "isarray": "1.0.0"
       }
     },
+    "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.7.3",
+        "whatwg-fetch": "2.0.4"
+      }
+    },
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -2771,7 +3453,6 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
       "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "dev": true,
       "requires": {
         "invert-kv": "1.0.0"
       }
@@ -2861,8 +3542,7 @@
     "lodash": {
       "version": "4.17.10",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
-      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
-      "dev": true
+      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
     },
     "lodash.assign": {
       "version": "4.2.0",
@@ -2888,6 +3568,11 @@
       "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
       "dev": true
     },
+    "long": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
+      "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
+    },
     "longest": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -3147,8 +3832,7 @@
     "nan": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
-      "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
-      "dev": true
+      "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
     },
     "nanomatch": {
       "version": "1.2.9",
@@ -3208,6 +3892,15 @@
       "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
       "dev": true
     },
+    "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.12",
+        "is-stream": "1.1.0"
+      }
+    },
     "node-gyp": {
       "version": "3.7.0",
       "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz",
@@ -3396,8 +4089,7 @@
     "number-is-nan": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "dev": true
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
     },
     "oauth-sign": {
       "version": "0.8.2",
@@ -3494,7 +4186,6 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
       "requires": {
         "wrappy": "1.0.2"
       }
@@ -3504,6 +4195,11 @@
       "resolved": "https://registry.npmjs.org/onesignal-cordova-plugin/-/onesignal-cordova-plugin-2.4.1.tgz",
       "integrity": "sha512-P4Jiypo5d549LrRWsZE1g5z7cmQMseG6yIayQem+hLRUXlWx7qqOdxTa1oUh5nFxlYon8u6jI5wIybRWxL5YfQ=="
     },
+    "optjs": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
+      "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
+    },
     "os-browserify": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
@@ -3520,7 +4216,6 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
       "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-      "dev": true,
       "requires": {
         "lcid": "1.0.0"
       }
@@ -3774,6 +4469,43 @@
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
       "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
     },
+    "promise-polyfill": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.0.0.tgz",
+      "integrity": "sha512-QGmPnw2hDEaRS6freHynJ7nfS1nDg0/P0c/CGglA43utoJjYQMiY9ojEpK0HaJ4wbUztdmwqQRlEfGWdsEQ5uQ=="
+    },
+    "protobufjs": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
+      "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
+      "requires": {
+        "ascli": "1.0.1",
+        "bytebuffer": "5.0.1",
+        "glob": "7.1.2",
+        "yargs": "3.32.0"
+      },
+      "dependencies": {
+        "window-size": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+          "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
+        },
+        "yargs": {
+          "version": "3.32.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+          "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+          "requires": {
+            "camelcase": "2.1.1",
+            "cliui": "3.2.0",
+            "decamelize": "1.2.0",
+            "os-locale": "1.4.0",
+            "string-width": "1.0.2",
+            "window-size": "0.1.4",
+            "y18n": "3.2.1"
+          }
+        }
+      }
+    },
     "proxy-addr": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
@@ -4693,7 +5425,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
       "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "dev": true,
       "requires": {
         "code-point-at": "1.1.0",
         "is-fullwidth-code-point": "1.0.0",
@@ -4718,7 +5449,6 @@
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "dev": true,
       "requires": {
         "ansi-regex": "2.1.1"
       }
@@ -5927,7 +6657,6 @@
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
       "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
-      "dev": true,
       "requires": {
         "http-parser-js": "0.4.13",
         "websocket-extensions": "0.1.3"
@@ -5936,8 +6665,12 @@
     "websocket-extensions": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
-      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
-      "dev": true
+      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
+    },
+    "whatwg-fetch": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
+      "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
     },
     "which": {
       "version": "1.3.1",
@@ -5988,7 +6721,6 @@
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
       "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "dev": true,
       "requires": {
         "string-width": "1.0.2",
         "strip-ansi": "3.0.1"
@@ -5997,8 +6729,7 @@
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
     "ws": {
       "version": "3.3.2",
@@ -6027,6 +6758,11 @@
       "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
       "dev": true
     },
+    "xmlhttprequest": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+    },
     "xtend": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
@@ -6035,8 +6771,7 @@
     "y18n": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
-      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
-      "dev": true
+      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
     },
     "yallist": {
       "version": "2.1.2",
diff --git a/package.json b/package.json
index ae8d11d..5785167 100644
--- a/package.json
+++ b/package.json
@@ -22,17 +22,22 @@
         "@angular/platform-browser": "5.2.11",
         "@angular/platform-browser-dynamic": "5.2.11",
         "@ionic-native/core": "4.7.0",
+        "@ionic-native/geolocation": "^4.8.0",
         "@ionic-native/location-accuracy": "^4.8.0",
         "@ionic-native/network": "^4.8.0",
         "@ionic-native/onesignal": "^4.8.0",
         "@ionic-native/splash-screen": "4.7.0",
         "@ionic-native/status-bar": "4.7.0",
         "@ionic/storage": "2.1.3",
+        "angularfire2": "^5.0.0-rc.11",
+        "cordova-plugin-geolocation": "^4.0.1",
         "cordova-plugin-network-information": "^2.0.1",
         "cordova-plugin-request-location-accuracy": "^2.2.3",
+        "firebase": "^5.1.0",
         "ionic-angular": "3.9.2",
         "ionicons": "3.0.0",
         "onesignal-cordova-plugin": "^2.4.1",
+        "promise-polyfill": "^8.0.0",
         "rxjs": "5.5.11",
         "sw-toolbox": "3.6.0",
         "zone.js": "0.8.26"
@@ -46,7 +51,10 @@
         "plugins": {
             "cordova-plugin-network-information": {},
             "onesignal-cordova-plugin": {},
-            "cordova-plugin-request-location-accuracy": {}
+            "cordova-plugin-request-location-accuracy": {},
+            "cordova-plugin-geolocation": {
+                "GEOLOCATION_USAGE_DESCRIPTION": "To locate you"
+            }
         }
     }
 }
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 7fb917a..e4706c8 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -14,6 +14,19 @@ import { Myservice } from "../providers/myservice";
 import { HttpModule } from "@angular/http";
 import { IonicStorageModule } from '@ionic/storage';
 import { OrderbyPipe } from '../providers/sort-pipe';
+import { Geolocation } from '@ionic-native/geolocation';
+import { fireService } from "../providers/firebase.service";
+import { AngularFireDatabase } from 'angularfire2/database';
+import { AngularFireModule } from 'angularfire2';
+
+export const firebaseConfig = {
+  apiKey: "AIzaSyDLrbLd4RCCh86xuTVu7-cfJ28We_cG1sU",
+  authDomain: "callmycab-205809.firebaseapp.com",
+  databaseURL: "https://callmycab-205809.firebaseio.com",
+  projectId: "callmycab-205809",
+  storageBucket: "callmycab-205809.appspot.com",
+  messagingSenderId: "151146703576"
+};
 @NgModule({
   declarations: [
     MyApp
@@ -23,6 +36,7 @@ import { OrderbyPipe } from '../providers/sort-pipe';
     IonicModule.forRoot(MyApp),
     HttpModule,
     IonicStorageModule.forRoot(),
+    AngularFireModule.initializeApp(firebaseConfig),
   ],
   bootstrap: [IonicApp],
   entryComponents: [
@@ -37,6 +51,9 @@ import { OrderbyPipe } from '../providers/sort-pipe';
     LocationAccuracy,
     Myservice,
     OrderbyPipe,
+    Geolocation,
+    fireService,
+    AngularFireDatabase,
   ]
 })
 export class AppModule {}
diff --git a/src/index.html b/src/index.html
index e254871..4158283 100644
--- a/src/index.html
+++ b/src/index.html
@@ -44,6 +44,8 @@
 
   <!-- The main bundle js is generated during the build process -->
   <script src="build/main.js"></script>
+  
+  <script src="http://maps.google.com/maps/api/js?libraries=places&key=AIzaSyCk1_NXO6fDntAzKEl7sO-z6Ut5evHLsKQ"></script>
 
 </body>
 </html>
diff --git a/src/pages/home/home.html b/src/pages/home/home.html
index ed62640..2d94e57 100644
--- a/src/pages/home/home.html
+++ b/src/pages/home/home.html
@@ -21,68 +21,45 @@
 <ion-content padding class="home_background">
 	<div class="home_content_tab"  [hidden]="tab != 'active'">
 		<ul>
-			<li>
+			<li *ngFor="let up of upcoming" (click)="rideDetails(up)">
 				<div class="home_content_circle">
+					<img [src]=baseurl+up.image />
 				</div>
 				<div class="home_content_detail">
-					<h5>Lora Sebastain</h5>
-					<p class="yellow">HSR Layout Bengaluru</p>
-					<p class="grey">Electronic City</p>
+					<h5>{{up.username}}</h5>
+					<p class="yellow">{{up.pickup_area}}</p>
+					<p class="grey">{{up.drop_area}}</p>
 				</div>
 				<div class="home_content_right">
-					<p>28/08/2018</p>
-					<p>05:00 am</p>
+					<p>{{up.pickup_date | date:'dd/MM/yy'}}</p>
+					<p>{{up.pickup_time}}</p>
 				</div>
 				<div class="clear"></div>
 			</li>
-			<li>
-				<div class="home_content_circle">
-				</div>
-				<div class="home_content_detail">
-					<h5>Lora Sebastain</h5>
-					<p class="yellow">HSR Layout Bengaluru</p>
-					<p class="grey">Electronic City</p>
-				</div>
-				<div class="home_content_right">
-					<p>28/08/2018</p>
-					<p>05:00 am</p>
-				</div>
-				<div class="clear"></div>
-			</li>
-			<li>
-				<div class="home_content_circle">
-				</div>
-				<div class="home_content_detail">
-					<h5>Lora Sebastain</h5>
-					<p class="yellow">HSR Layout Bengaluru</p>
-					<p class="grey">Electronic City</p>
-				</div>
-				<div class="home_content_right">
-					<p>28/08/2018</p>
-					<p>05:00 am</p>
-				</div>
-				<div class="clear"></div>
-			</li>
-			<li>
+		</ul>
+		<p *ngIf="upcoming?.length==0" class="blank">No rides found</p>
+	</div>
+	<!-- <div class="home_content_tab" [hidden]="tab != 'inactive'">
+		3
+	</div> -->
+	<div class="home_content_tab" [hidden]="tab != 'inactive1'">
+		<ul>
+			<li *ngFor="let comp of completed" (click)="rideDetails(comp)">
 				<div class="home_content_circle">
+					<img [src]=baseurl+comp.image />
 				</div>
 				<div class="home_content_detail">
-					<h5>Lora Sebastain</h5>
-					<p class="yellow">HSR Layout Bengaluru</p>
-					<p class="grey">Electronic City</p>
+					<h5>{{comp.username}}</h5>
+					<p class="yellow">{{comp.pickup_area}}</p>
+					<p class="grey">{{comp.drop_area}}</p>
 				</div>
 				<div class="home_content_right">
-					<p>28/08/2018</p>
-					<p>05:00 am</p>
+					<p>{{comp.pickup_date | date:'dd/MM/yy'}}</p>
+					<p>{{comp.pickup_time}}</p>
 				</div>
 				<div class="clear"></div>
 			</li>
 		</ul>
-	</div>
-	<!-- <div class="home_content_tab" [hidden]="tab != 'inactive'">
-		3
-	</div> -->
-	<div class="home_content_tab" [hidden]="tab != 'inactive1'">
-		5
+		<p *ngIf="completed?.length==0" class="blank">No rides found</p>
 	</div>
 </ion-content>
diff --git a/src/pages/home/home.scss b/src/pages/home/home.scss
index 76428ad..56bc537 100644
--- a/src/pages/home/home.scss
+++ b/src/pages/home/home.scss
@@ -58,6 +58,7 @@ page-home {
 						height:100%;
 						object-fit:cover;
 						object-position:center;
+						border-radius: 50%;
 					}
 				}
 				.home_content_detail{
@@ -113,4 +114,9 @@ page-home {
 			}
 		}
 	}
+	.blank{    padding-top: 50%;
+    text-align: center;
+    font-size: 20px;
+    font-weight: 500;
+    color: #ccb59a;}
 }
diff --git a/src/pages/home/home.ts b/src/pages/home/home.ts
index 5d95c07..dc11aef 100644
--- a/src/pages/home/home.ts
+++ b/src/pages/home/home.ts
@@ -12,6 +12,7 @@ export class HomePage {
 tab:any;
 upcoming:any;
 completed:any;
+baseurl = this.myservice.base_url
 
   constructor(public navCtrl: NavController, public navParams: NavParams, private storage:Storage, private myservice:Myservice) {
   }
@@ -19,11 +20,11 @@ completed:any;
   ionViewDidEnter(){
     this.storage.get('driver_data').then(data=>{
       if(data){
-        console.log(data)
         this.myservice.load_post({id:data.id},'getMyRides').subscribe(response=>{
           if(response.status == 'success'){
             this.upcoming = response.data.upcoming
             this.completed = response.data.completed
+            console.log(this.upcoming)
           }
         })
       }
@@ -40,4 +41,7 @@ tab_swap(type) {
     this.tab = type;
    }
 
+  rideDetails(data){
+    this.navCtrl.push('RidedetailsPage',{data:data})
+  }
 }
diff --git a/src/pages/ridedetails/ridedetails.html b/src/pages/ridedetails/ridedetails.html
index 67f1eca..a065b7d 100644
--- a/src/pages/ridedetails/ridedetails.html
+++ b/src/pages/ridedetails/ridedetails.html
@@ -12,14 +12,14 @@
   <div class="jr_from_to">
     <li>
       <div class="child1 from"><div class="jr_box1"></div></div>
-      <div class="child2 yellow"><strong>Electronic City</strong>
-      <p>fdgsdgsdg</p></div>
+      <div class="child2 yellow"><strong>{{details.from}}</strong>
+      <p>{{details.fromAd}}</p></div>
       <div class="jr_clear"></div>
     </li>
     <li>
       <div class="child1 to"></div>
-      <div class="child2 grey"><strong>HSR Layout</strong>
-      <p>gfhdfgthj</p></div>
+      <div class="child2 grey"><strong>{{details.to}}</strong>
+      <p>{{details.toAd}}</p></div>
       <div class="jr_clear"></div>
     </li>
   </div>
@@ -29,18 +29,21 @@
 
   <div class="jr_search_bottom_bay jr_padding0" >
     <div class="jr_search_profile">
-      <img >
+      <img [src]=baseurl+details.image>
     </div>
     <div class="jr_search_profile_detail">
       <br>
-      <h6>Lina Rhodes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;28 Y/O</h6>
-      <span class="jr_star_ratting"><img src="assets/img/jr_star.png"><strong>4.8/5</strong>05 Ratings</span><br>
+      <h6>{{details.username}}</h6>
+      <span class="jr_star_ratting">
+        <strong>{{details.pickup_date|date:'dd/MM/yy'}}&nbsp;&nbsp;&nbsp;{{details.pickup_time}}
+       </strong></span>
+      <br>
     </div>
     <div class="jr_clear"></div>
   </div>
 
-   <div class="jr_bottom_button_bay">
-      <button ion-button class="cab_footer_btn">Track Driver</button>
+   <div class="jr_bottom_button_bay" *ngIf="details.status=='Booking'">
+      <button ion-button class="cab_footer_btn" (click)="pick()">Pick Up</button>
     </div>
 </div>
 
diff --git a/src/pages/ridedetails/ridedetails.ts b/src/pages/ridedetails/ridedetails.ts
index bdda88f..65510be 100644
--- a/src/pages/ridedetails/ridedetails.ts
+++ b/src/pages/ridedetails/ridedetails.ts
@@ -1,5 +1,7 @@
 import { Component } from '@angular/core';
 import { IonicPage, NavController, NavParams } from 'ionic-angular';
+import { Myservice } from "../../providers/myservice";
+import { dateDataSortValue } from 'ionic-angular/umd/util/datetime-util';
 
 @IonicPage()
 @Component({
@@ -7,16 +9,31 @@ import { IonicPage, NavController, NavParams } from 'ionic-angular';
   templateUrl: 'ridedetails.html',
 })
 export class RidedetailsPage {
+  details = this.navParams.get('data')
+  baseurl = this.myservice.base_url
 
-  constructor(public navCtrl: NavController, public navParams: NavParams) {
+  constructor(public navCtrl: NavController, public navParams: NavParams, private myservice: Myservice) {
+   
   }
 
   ionViewDidLoad() {
-    console.log('ionViewDidLoad RidedetailsPage');
+    var tempf = this.details.pickup_area.split(',')
+    this.details.from = tempf[0]
+    this.details.fromAd = this.details.pickup_area
+    this.details.timestamp = new Date(this.details.pickup_date + ' ' + this.details.pickup_time).getTime()
+
+    var temp = this.details.drop_area.split(',')
+    this.details.to = temp[0]
+    this.details.toAd = this.details.drop_area
+    console.log(this.details)
   }
 
   back(){
   	this.navCtrl.pop();
   }
 
+  pick(){
+    this.navCtrl.push('UserlocationPage',{ data: this.details})
+  }
+
 }
diff --git a/src/pages/signup/signup.ts b/src/pages/signup/signup.ts
index fe87808..0784320 100644
--- a/src/pages/signup/signup.ts
+++ b/src/pages/signup/signup.ts
@@ -6,6 +6,8 @@ import { dialcode } from "../../models/mymodel";
 import { OrderbyPipe } from '../../providers/sort-pipe';
 import { Myservice } from "../../providers/myservice";
 import { OneSignal } from "@ionic-native/onesignal";
+import { fireService } from "../../providers/firebase.service";
+import { Geolocation } from '@ionic-native/geolocation';
 
 @IonicPage()
 @Component({
@@ -16,7 +18,8 @@ export class SignupPage {
   signupForm: FormGroup
   codes: Array<dialcode>;
 
-  constructor(public navCtrl: NavController, public navParams: NavParams, private formBuilder: FormBuilder, private http: Http, private orderbyPipe: OrderbyPipe, private myservice: Myservice, private onesignal: OneSignal) {
+  constructor(public navCtrl: NavController, public navParams: NavParams, private formBuilder: FormBuilder, private http: Http, private orderbyPipe: OrderbyPipe, private myservice: Myservice, private onesignal: OneSignal, private firebase: fireService, private geolocation: Geolocation) {
+
     this.signupForm = this.formBuilder.group({
       name: ['', Validators.compose([Validators.required, Validators.minLength(3)])],
       username: ['', Validators.compose([Validators.required, Validators.minLength(3)])],
@@ -46,12 +49,19 @@ export class SignupPage {
 
   register() {
     this.myservice.show_loader()
+    this.geolocation.getCurrentPosition().then((resp) => {
+
     // this.onesignal.getIds().then((id) => {
       this.signupForm.controls['deviceid'].setValue(0/*id.userId*/)
 
       this.myservice.load_post(this.signupForm.value, 'driver_sign_up').subscribe(response => {
         this.myservice.hide_loader()
         if (response.status == 'success') {
+          response.data.lat = resp.coords.latitude
+          response.data.lng = resp.coords.longitude
+          response.data.started = false
+          response.data.status = 'offline'
+          this.firebase.pushItem('drivers/', response.data)
           this.navCtrl.setRoot("SigninPage");
         }
         else {
@@ -59,6 +69,9 @@ export class SignupPage {
         }
       })
     // })
+    }).catch((error) => {
+      console.log('Error getting location', error);
+    });
   }
 
   MatchPassword(val) {
diff --git a/src/pages/userlocation/userlocation.html b/src/pages/userlocation/userlocation.html
index 25bb288..f44552f 100644
--- a/src/pages/userlocation/userlocation.html
+++ b/src/pages/userlocation/userlocation.html
@@ -7,15 +7,15 @@
 </ion-header>
 <ion-content>
     <div #map id="map"></div>
-    <div class="jr_bottom_distance_card">
+    <div class="jr_bottom_distance_card" *ngIf="temp">
       <div class="jr_bottom_inside">
-        <input class="jr_dest_input from" placeholder="From">
-        <input class="jr_dest_input to" placeholder="To">
+        <input class="jr_dest_input from" placeholder="From" [(ngModel)]="loc.from">
+        <input class="jr_dest_input to" placeholder="To" [(ngModel)]="loc.to">
       </div>
     </div>
 </ion-content>
 <ion-footer>
-  <div class="jr_bottom_button_bay">
-      <button ion-button class="cab_footer_btn">Cancel</button>
+  <div class="jr_bottom_button_bay" *ngIf="temp">
+      <button ion-button class="cab_footer_btn">Start Ride</button>
   </div>
 </ion-footer>
\ No newline at end of file
diff --git a/src/pages/userlocation/userlocation.ts b/src/pages/userlocation/userlocation.ts
index e8f999a..fdf0e19 100644
--- a/src/pages/userlocation/userlocation.ts
+++ b/src/pages/userlocation/userlocation.ts
@@ -1,7 +1,8 @@
-import { Component } from '@angular/core';
+import { Component, ViewChild, ElementRef } from '@angular/core';
 import { IonicPage, NavController, NavParams } from 'ionic-angular';
+import { Geolocation } from '@ionic-native/geolocation';
 
-
+declare var google;
 
 @IonicPage()
 @Component({
@@ -9,17 +10,103 @@ import { IonicPage, NavController, NavParams } from 'ionic-angular';
   templateUrl: 'userlocation.html',
 })
 export class UserlocationPage {
+  @ViewChild('map') mapElement: ElementRef;
+  map: any;
+  directionsDisplay:any;
+  geocoder:any;
+  details = this.navParams.get('data')
+  locSubs:any;
+  temp:boolean = false;
+  loc = {'from':'','to':''}
+  i:number = 0;
 
-  constructor(public navCtrl: NavController, public navParams: NavParams) {
+  constructor(public navCtrl: NavController, public navParams: NavParams, private geolocation: Geolocation) {
+    this.geolocation.getCurrentPosition().then((resp) => {
+      this.loadMap(resp.coords.latitude, resp.coords.longitude);
+    })
   }
 
-  ionViewDidLoad() {
-    console.log('ionViewDidLoad UserlocationPage');
+  ionViewDidEnter() {
+    var This = this
+    var drop = This.details.drop_latlng.split(',')
+    This.geocoder = new google.maps.Geocoder();
+    This.locSubs = This.geolocation.watchPosition()
+      .filter((p) => p.coords !== undefined) //Filter Out Errors
+      .subscribe(position => {
+      This.i++;
+      var directionsService = new google.maps.DirectionsService;
+      
+      This.directionsDisplay.setMap(This.map);
+      This.directionsDisplay.setOptions({ suppressMarkers: true });
+
+      var pickLoc = new google.maps.LatLng(Number(drop[0]), Number(drop[1]));
+        var driverLoc = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
+
+          var dimage = {
+            url: 'assets/img/map_label.png',
+            scaledSize: new google.maps.Size(50, 22),
+            origin: new google.maps.Point(0, 0),
+            anchor: new google.maps.Point(25, 12)
+          };
+
+          var marker = new google.maps.Marker({
+            position: driverLoc,
+            map: This.map,
+            icon: dimage
+          });
+
+        if (This.i == 5) {
+        // if (google.maps.geometry.spherical.computeDistanceBetween(pickLoc, driverLoc) < 100) {
+          This.temp = true
+        }
+
+          This.calculateAndDisplayRoute(directionsService, This.directionsDisplay, pickLoc, driverLoc);
+
+    })
   }
 
+  loadMap(lat, lng) {
+
+    let latLng = new google.maps.LatLng(lat, lng);
+
+    let mapOptions = {
+      center: latLng,
+      zoom: 15,
+      mapTypeId: google.maps.MapTypeId.ROADMAP
+    }
+
+    this.map = new google.maps.Map(this.mapElement.nativeElement, mapOptions);
+
+    this.directionsDisplay = new google.maps.DirectionsRenderer({
+      map: this.map,
+      preserveViewport: true
+    });
+  }
 
   back(){
   	this.navCtrl.pop();
   }
 
+  calculateAndDisplayRoute(directionsService, directionsDisplay, start, dest) {
+    var This = this
+    directionsService.route({
+      origin: start,
+      destination: dest,
+      travelMode: 'DRIVING'
+    }, function (response, status) {
+      if (status === 'OK') {
+        directionsDisplay.setDirections(response);
+        var bounds = response.routes[0].bounds;
+        This.map.fitBounds(bounds);
+        This.map.setCenter(bounds.getCenter());
+      } else {
+        window.alert('Directions request failed due to ' + status);
+      }
+    });
+  }
+
+  ionViewWillLeave() {
+    this.locSubs.unsubscribe();
+  }
+
 }
diff --git a/src/providers/firebase.service.ts b/src/providers/firebase.service.ts
new file mode 100644
index 0000000..cea7b74
--- /dev/null
+++ b/src/providers/firebase.service.ts
@@ -0,0 +1,64 @@
+import { Injectable } from '@angular/core';
+import { AngularFireDatabase } from 'angularfire2/database';
+import { FirebaseListObservable } from 'angularfire2/database-deprecated';
+import * as firebase from 'firebase';
+import 'rxjs/add/operator/toPromise';
+
+// import { Router } from '@angular/router';
+
+@Injectable()
+export class fireService {
+
+  items: FirebaseListObservable<any[]>;
+  //data: FirebaseObjectObservable<any[]>;
+  data:any;
+  currentUser: any;
+  userData: any;
+
+  // private basePath: string = 'users';
+  
+  
+  constructor(
+                private db: AngularFireDatabase,) {
+// console.log(this.currentUser);
+//       console.log('hhhh');
+  }
+
+  pushItem(url,data){
+      var key = firebase.database().ref(url).push().key;
+      var new_node = url + "/" + key;
+      data.push_id = key;
+      this.updateItem(new_node, data)
+      return 'success';
+  }
+  
+  updateItem(url,data){
+    //  return this.db.object(url).update(data);
+      var promise = new Promise((resolve, reject) => {
+          if (this.db.object(url).update(data)) {
+              // console.log("Updated");
+              resolve({ 'status': 'success' });
+          } else {
+              reject();
+          }
+      });
+      return promise;
+  }
+  removeItem(url){
+     return this.db.object(url).remove();
+  }
+  
+  listItem(url){
+    return  this.db.list(url);
+      
+  }
+  listItemQuery(url,query){
+    return  this.db.list(url,query);
+      
+  }
+
+  checkItem(url){
+    return this.db.list(url);
+  }
+}
+