lines-num lines-num-new"> 2205
         },
2169 2206
         "is-stream": {
2170 2207
           "version": "2.0.1",
2171 2208
           "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
2172
-          "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
2209
+          "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
2210
+          "dev": true
2173 2211
         },
2174 2212
         "jsonfile": {
2175 2213
           "version": "6.1.0",
2176 2214
           "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
2177 2215
           "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
2216
+          "dev": true,
2178 2217
           "requires": {
2179 2218
             "graceful-fs": "^4.1.6",
2180 2219
             "universalify": "^2.0.0"
@@ -2184,6 +2223,7 @@
2184 2223
           "version": "6.0.0",
2185 2224
           "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2186 2225
           "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2226
+          "dev": true,
2187 2227
           "requires": {
2188 2228
             "yallist": "^4.0.0"
2189 2229
           }
@@ -2192,6 +2232,7 @@
2192 2232
           "version": "4.0.3",
2193 2233
           "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
2194 2234
           "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
2235
+          "dev": true,
2195 2236
           "requires": {
2196 2237
             "abbrev": "1",
2197 2238
             "osenv": "^0.1.4"
@@ -2201,6 +2242,7 @@
2201 2242
           "version": "4.0.1",
2202 2243
           "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
2203 2244
           "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
2245
+          "dev": true,
2204 2246
           "requires": {
2205 2247
             "path-key": "^3.0.0"
2206 2248
           }
@@ -2208,12 +2250,14 @@
2208 2250
         "path-key": {
2209 2251
           "version": "3.1.1",
2210 2252
           "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2211
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
2253
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2254
+          "dev": true
2212 2255
         },
2213 2256
         "semver": {
2214 2257
           "version": "7.3.5",
2215 2258
           "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
2216 2259
           "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
2260
+          "dev": true,
2217 2261
           "requires": {
2218 2262
             "lru-cache": "^6.0.0"
2219 2263
           }
@@ -2222,6 +2266,7 @@
2222 2266
           "version": "2.0.0",
2223 2267
           "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2224 2268
           "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2269
+          "dev": true,
2225 2270
           "requires": {
2226 2271
             "shebang-regex": "^3.0.0"
2227 2272
           }
@@ -2229,17 +2274,20 @@
2229 2274
         "shebang-regex": {
2230 2275
           "version": "3.0.0",
2231 2276
           "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2232
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
2277
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2278
+          "dev": true
2233 2279
         },
2234 2280
         "universalify": {
2235 2281
           "version": "2.0.0",
2236 2282
           "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
2237
-          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
2283
+          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
2284
+          "dev": true
2238 2285
         },
2239 2286
         "which": {
2240 2287
           "version": "2.0.2",
2241 2288
           "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2242 2289
           "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2290
+          "dev": true,
2243 2291
           "requires": {
2244 2292
             "isexe": "^2.0.0"
2245 2293
           }
@@ -2247,7 +2295,8 @@
2247 2295
         "yallist": {
2248 2296
           "version": "4.0.0",
2249 2297
           "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2250
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
2298
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
2299
+          "dev": true
2251 2300
         }
2252 2301
       }
2253 2302
     },
@@ -2255,6 +2304,7 @@
2255 2304
       "version": "4.0.2",
2256 2305
       "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.0.2.tgz",
2257 2306
       "integrity": "sha512-od7aNShyuBajzPY83mUEO8tERwwWdFklXETHiXP5Ft87CWeo/tSuwNPFztyTy8XYc74yXdogXKPTJeUHuVzB8Q==",
2307
+      "dev": true,
2258 2308
       "requires": {
2259 2309
         "@netflix/nerror": "^1.1.3",
2260 2310
         "ansi": "^0.3.1",
@@ -2276,6 +2326,7 @@
2276 2326
           "version": "7.0.3",
2277 2327
           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
2278 2328
           "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
2329
+          "dev": true,
2279 2330
           "requires": {
2280 2331
             "path-key": "^3.1.0",
2281 2332
             "shebang-command": "^2.0.0",
@@ -2286,6 +2337,7 @@
2286 2337
           "version": "9.1.0",
2287 2338
           "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
2288 2339
           "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
2340
+          "dev": true,
2289 2341
           "requires": {
2290 2342
             "at-least-node": "^1.0.0",
2291 2343
             "graceful-fs": "^4.2.0",
@@ -2296,12 +2348,14 @@
2296 2348
         "graceful-fs": {
2297 2349
           "version": "4.2.8",
2298 2350
           "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
2299
-          "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
2351
+          "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
2352
+          "dev": true
2300 2353
         },
2301 2354
         "jsonfile": {
2302 2355
           "version": "6.1.0",
2303 2356
           "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
2304 2357
           "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
2358
+          "dev": true,
2305 2359
           "requires": {
2306 2360
             "graceful-fs": "^4.1.6",
2307 2361
             "universalify": "^2.0.0"
@@ -2310,12 +2364,14 @@
2310 2364
         "path-key": {
2311 2365
           "version": "3.1.1",
2312 2366
           "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2313
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
2367
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2368
+          "dev": true
2314 2369
         },
2315 2370
         "shebang-command": {
2316 2371
           "version": "2.0.0",
2317 2372
           "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2318 2373
           "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2374
+          "dev": true,
2319 2375
           "requires": {
2320 2376
             "shebang-regex": "^3.0.0"
2321 2377
           }
@@ -2323,22 +2379,26 @@
2323 2379
         "shebang-regex": {
2324 2380
           "version": "3.0.0",
2325 2381
           "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2326
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
2382
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2383
+          "dev": true
2327 2384
         },
2328 2385
         "strip-bom": {
2329 2386
           "version": "4.0.0",
2330 2387
           "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
2331
-          "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
2388
+          "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
2389
+          "dev": true
2332 2390
         },
2333 2391
         "universalify": {
2334 2392
           "version": "2.0.0",
2335 2393
           "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
2336
-          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
2394
+          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
2395
+          "dev": true
2337 2396
         },
2338 2397
         "which": {
2339 2398
           "version": "2.0.2",
2340 2399
           "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2341 2400
           "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2401
+          "dev": true,
2342 2402
           "requires": {
2343 2403
             "isexe": "^2.0.0"
2344 2404
           }
@@ -2376,9 +2436,9 @@
2376 2436
           }
2377 2437
         },
2378 2438
         "graceful-fs": {
2379
-          "version": "4.2.8",
2380
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
2381
-          "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
2439
+          "version": "4.2.9",
2440
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
2441
+          "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==",
2382 2442
           "dev": true
2383 2443
         },
2384 2444
         "jsonfile": {
@@ -2446,11 +2506,23 @@
2446 2506
       "resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-1.11.1.tgz",
2447 2507
       "integrity": "sha1-VrdtN0hlAPNX7lEcD63NEm4WcAI="
2448 2508
     },
2509
+    "cordova-plugin-camera": {
2510
+      "version": "5.0.3",
2511
+      "resolved": "https://registry.npmjs.org/cordova-plugin-camera/-/cordova-plugin-camera-5.0.3.tgz",
2512
+      "integrity": "sha512-CfoqP8+0XGm8wS0Ri6BCaTTq195Z7ny/tXrD14DsYyR7hHjf1nn+B643tzdYuPNVynxMLRQa1T8n1EkCxFyUog==",
2513
+      "dev": true
2514
+    },
2449 2515
     "cordova-plugin-file": {
2450 2516
       "version": "6.0.1",
2451 2517
       "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.1.tgz",
2452 2518
       "integrity": "sha1-SWBrjBWlaI1HKPkuSnMloGHeB/U="
2453 2519
     },
2520
+    "cordova-plugin-file-transfer": {
2521
+      "version": "1.7.1",
2522
+      "resolved": "https://registry.npmjs.org/cordova-plugin-file-transfer/-/cordova-plugin-file-transfer-1.7.1.tgz",
2523
+      "integrity": "sha1-p12L4uvDu5sjxbG70ZkhTsJnWGs=",
2524
+      "dev": true
2525
+    },
2454 2526
     "cordova-plugin-inappbrowser": {
2455 2527
       "version": "5.0.0",
2456 2528
       "resolved": "https://registry.npmjs.org/cordova-plugin-inappbrowser/-/cordova-plugin-inappbrowser-5.0.0.tgz",
@@ -2737,7 +2809,8 @@
2737 2809
     "dedent": {
2738 2810
       "version": "0.7.0",
2739 2811
       "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
2740
-      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw="
2812
+      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
2813
+      "dev": true
2741 2814
     },
2742 2815
     "define-property": {
2743 2816
       "version": "2.0.2",
@@ -2929,6 +3002,7 @@
2929 3002
       "version": "0.1.7",
2930 3003
       "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
2931 3004
       "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=",
3005
+      "dev": true,
2932 3006
       "requires": {
2933 3007
         "sax": "1.1.4"
2934 3008
       },
@@ -2936,7 +3010,8 @@
2936 3010
         "sax": {
2937 3011
           "version": "1.1.4",
2938 3012
           "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
2939
-          "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk="
3013
+          "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=",
3014
+          "dev": true
2940 3015
         }
2941 3016
       }
2942 3017
     },
@@ -2991,6 +3066,7 @@
2991 3066
       "version": "1.4.4",
2992 3067
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
2993 3068
       "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
3069
+      "dev": true,
2994 3070
       "requires": {
2995 3071
         "once": "^1.4.0"
2996 3072
       }
@@ -2999,6 +3075,7 @@
2999 3075
       "version": "1.4.1",
3000 3076
       "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz",
3001 3077
       "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==",
3078
+      "dev": true,
3002 3079
       "requires": {
3003 3080
         "dedent": "^0.7.0",
3004 3081
         "fast-json-parse": "^1.0.3",
@@ -3392,6 +3469,7 @@
3392 3469
       "version": "3.2.7",
3393 3470
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
3394 3471
       "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
3472
+      "dev": true,
3395 3473
       "requires": {
3396 3474
         "@nodelib/fs.stat": "^2.0.2",
3397 3475
         "@nodelib/fs.walk": "^1.2.3",
@@ -3403,7 +3481,8 @@
3403 3481
     "fast-json-parse": {
3404 3482
       "version": "1.0.3",
3405 3483
       "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz",
3406
-      "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw=="
3484
+      "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==",
3485
+      "dev": true
3407 3486
     },
3408 3487
     "fast-json-stable-stringify": {
3409 3488
       "version": "2.1.0",
@@ -3415,6 +3494,7 @@
3415 3494
       "version": "1.13.0",
3416 3495
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
3417 3496
       "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
3497
+      "dev": true,
3418 3498
       "requires": {
3419 3499
         "reusify": "^1.0.4"
3420 3500
       }
@@ -3546,7 +3626,8 @@
3546 3626
     "fs.realpath": {
3547 3627
       "version": "1.0.0",
3548 3628
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3549
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
3629
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
3630
+      "dev": true
3550 3631
     },
3551 3632
     "fsevents": {
3552 3633
       "version": "2.3.2",
@@ -3638,6 +3719,7 @@
3638 3719
       "version": "7.1.7",
3639 3720
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
3640 3721
       "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
3722
+      "dev": true,
3641 3723
       "requires": {
3642 3724
         "fs.realpath": "^1.0.0",
3643 3725
         "inflight": "^1.0.4",
@@ -3884,7 +3966,8 @@
3884 3966
     "human-signals": {
3885 3967
       "version": "1.1.1",
3886 3968
       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
3887
-      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
3969
+      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
3970
+      "dev": true
3888 3971
     },
3889 3972
     "humanize-num": {
3890 3973
       "version": "1.1.5",
@@ -3930,6 +4013,7 @@
3930 4013
       "version": "1.0.6",
3931 4014
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
3932 4015
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4016
+      "dev": true,
3933 4017
       "requires": {
3934 4018
         "once": "^1.3.0",
3935 4019
         "wrappy": "1"
@@ -4121,7 +4205,8 @@
4121 4205
     "is-path-inside": {
4122 4206
       "version": "3.0.3",
4123 4207
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
4124
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
4208
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
4209
+      "dev": true
4125 4210
     },
4126 4211
     "is-plain-object": {
4127 4212
       "version": "2.0.4",
@@ -4173,7 +4258,8 @@
4173 4258
     "isexe": {
4174 4259
       "version": "2.0.0",
4175 4260
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4176
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
4261
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
4262
+      "dev": true
4177 4263
     },
4178 4264
     "isstream": {
4179 4265
       "version": "0.1.2",
@@ -4396,7 +4482,8 @@
4396 4482
     "lodash": {
4397 4483
       "version": "4.17.21",
4398 4484
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
4399
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
4485
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
4486
+      "dev": true
4400 4487
     },
4401 4488
     "longest": {
4402 4489
       "version": "1.0.1",
@@ -4523,12 +4610,14 @@
4523 4610
     "merge-stream": {
4524 4611
       "version": "2.0.0",
4525 4612
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
4526
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
4613
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
4614
+      "dev": true
4527 4615
     },
4528 4616
     "merge2": {
4529 4617
       "version": "1.4.1",
4530 4618
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
4531
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
4619
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
4620
+      "dev": true
4532 4621
     },
4533 4622
     "methods": {
4534 4623
       "version": "1.1.2",
@@ -4540,6 +4629,7 @@
4540 4629
       "version": "4.0.4",
4541 4630
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
4542 4631
       "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
4632
+      "dev": true,
4543 4633
       "requires": {
4544 4634
         "braces": "^3.0.1",
4545 4635
         "picomatch": "^2.2.3"
@@ -4606,6 +4696,7 @@
4606 4696
       "version": "3.0.4",
4607 4697
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
4608 4698
       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
4699
+      "dev": true,
4609 4700
       "requires": {
4610 4701
         "brace-expansion": "^1.1.7"
4611 4702
       }
@@ -5002,7 +5093,8 @@
5002 5093
     "objectorarray": {
5003 5094
       "version": "1.0.5",
5004 5095
       "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz",
5005
-      "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg=="
5096
+      "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==",
5097
+      "dev": true
5006 5098
     },
5007 5099
     "on-finished": {
5008 5100
       "version": "2.3.0",
@@ -5017,6 +5109,7 @@
5017 5109
       "version": "1.4.0",
5018 5110
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5019 5111
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5112
+      "dev": true,
5020 5113
       "requires": {
5021 5114
         "wrappy": "1"
5022 5115
       }
@@ -5025,6 +5118,7 @@
5025 5118
       "version": "5.1.2",
5026 5119
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
5027 5120
       "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
5121
+      "dev": true,
5028 5122
       "requires": {
5029 5123
         "mimic-fn": "^2.1.0"
5030 5124
       },
@@ -5032,7 +5126,8 @@
5032 5126
         "mimic-fn": {
5033 5127
           "version": "2.1.0",
5034 5128
           "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
5035
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
5129
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
5130
+          "dev": true
5036 5131
         }
5037 5132
       }
5038 5133
     },
@@ -5045,7 +5140,8 @@
5045 5140
     "os-homedir": {
5046 5141
       "version": "1.0.2",
5047 5142
       "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
5048
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
5143
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
5144
+      "dev": true
5049 5145
     },
5050 5146
     "os-locale": {
5051 5147
       "version": "2.1.0",
@@ -5071,12 +5167,14 @@
5071 5167
     "os-tmpdir": {
5072 5168
       "version": "1.0.2",
5073 5169
       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
5074
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
5170
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
5171
+      "dev": true
5075 5172
     },
5076 5173
     "osenv": {
5077 5174
       "version": "0.1.5",
5078 5175
       "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
5079 5176
       "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
5177
+      "dev": true,
5080 5178
       "requires": {
5081 5179
         "os-homedir": "^1.0.0",
5082 5180
         "os-tmpdir": "^1.0.0"
@@ -5085,7 +5183,8 @@
5085 5183
     "p-finally": {
5086 5184
       "version": "1.0.0",
5087 5185
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
5088
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
5186
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
5187
+      "dev": true
5089 5188
     },
5090 5189
     "p-limit": {
5091 5190
       "version": "2.3.0",
@@ -5108,7 +5207,8 @@
5108 5207
     "p-try": {
5109 5208
       "version": "2.2.0",
5110 5209
       "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
5111
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
5210
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
5211
+      "dev": true
5112 5212
     },
5113 5213
     "pako": {
5114 5214
       "version": "1.0.11",
@@ -5174,7 +5274,8 @@
5174 5274
     "path-is-absolute": {
5175 5275
       "version": "1.0.1",
5176 5276
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
5177
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
5277
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
5278
+      "dev": true
5178 5279
     },
5179 5280
     "path-key": {
5180 5281
       "version": "2.0.1",
@@ -5263,6 +5364,7 @@
5263 5364
       "version": "3.0.4",
5264 5365
       "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
5265 5366
       "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
5367
+      "dev": true,
5266 5368
       "requires": {
5267 5369
         "base64-js": "^1.5.1",
5268 5370
         "xmlbuilder": "^9.0.7"
@@ -5271,7 +5373,8 @@
5271 5373
         "xmlbuilder": {
5272 5374
           "version": "9.0.7",
5273 5375
           "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
5274
-          "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
5376
+          "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
5377
+          "dev": true
5275 5378
         }
5276 5379
       }
5277 5380
     },
@@ -5319,6 +5422,7 @@
5319 5422
       "version": "0.3.1",
5320 5423
       "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz",
5321 5424
       "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=",
5425
+      "dev": true,
5322 5426
       "requires": {
5323 5427
         "string.prototype.codepointat": "^0.2.0"
5324 5428
       }
@@ -5383,6 +5487,7 @@
5383 5487
       "version": "3.0.0",
5384 5488
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
5385 5489
       "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
5490
+      "dev": true,
5386 5491
       "requires": {
5387 5492
         "end-of-stream": "^1.1.0",
5388 5493
         "once": "^1.3.1"
@@ -5397,7 +5502,8 @@
5397 5502
     "q": {
5398 5503
       "version": "1.5.1",
5399 5504
       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
5400
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
5505
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
5506
+      "dev": true
5401 5507
     },
5402 5508
     "qs": {
5403 5509
       "version": "6.7.0",
@@ -5420,7 +5526,8 @@
5420 5526
     "queue-microtask": {
5421 5527
       "version": "1.2.3",
5422 5528
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
5423
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
5529
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
5530
+      "dev": true
5424 5531
     },
5425 5532
     "randombytes": {
5426 5533
       "version": "2.1.0",
@@ -5463,6 +5570,7 @@
5463 5570
       "version": "3.2.0",
5464 5571
       "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz",
5465 5572
       "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==",
5573
+      "dev": true,
5466 5574
       "requires": {
5467 5575
         "pify": "^4.0.1",
5468 5576
         "with-open-file": "^0.1.6"
@@ -5471,7 +5579,8 @@
5471 5579
         "pify": {
5472 5580
           "version": "4.0.1",
5473 5581
           "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
5474
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
5582
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
5583
+          "dev": true
5475 5584
         }
5476 5585
       }
5477 5586
     },
@@ -5666,7 +5775,8 @@
5666 5775
     "reusify": {
5667 5776
       "version": "1.0.4",
5668 5777
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
5669
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
5778
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
5779
+      "dev": true
5670 5780
     },
5671 5781
     "right-align": {
5672 5782
       "version": "0.1.3",
@@ -5756,6 +5866,7 @@
5756 5866
       "version": "1.2.0",
5757 5867
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
5758 5868
       "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
5869
+      "dev": true,
5759 5870
       "requires": {
5760 5871
         "queue-microtask": "^1.2.2"
5761 5872
       }
@@ -5841,7 +5952,8 @@
5841 5952
     "semver": {
5842 5953
       "version": "5.7.1",
5843 5954
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
5844
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
5955
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
5956
+      "dev": true
5845 5957
     },
5846 5958
     "send": {
5847 5959
       "version": "0.17.1",
@@ -5964,7 +6076,8 @@
5964 6076
     "signal-exit": {
5965 6077
       "version": "3.0.3",
5966 6078
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
5967
-      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
6079
+      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
6080
+      "dev": true
5968 6081
     },
5969 6082
     "simctl": {
5970 6083
       "version": "2.0.0",
@@ -6296,7 +6409,8 @@
6296 6409
     "string.prototype.codepointat": {
6297 6410
       "version": "0.2.1",
6298 6411
       "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
6299
-      "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
6412
+      "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==",
6413
+      "dev": true
6300 6414
     },
6301 6415
     "string_decoder": {
6302 6416
       "version": "1.1.1",
@@ -6334,7 +6448,8 @@
6334 6448
     "strip-final-newline": {
6335 6449
       "version": "2.0.0",
6336 6450
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
6337
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
6451
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
6452
+      "dev": true
6338 6453
     },
6339 6454
     "strip-indent": {
6340 6455
       "version": "1.0.1",
@@ -6744,7 +6859,8 @@
6744 6859
     "underscore": {
6745 6860
       "version": "1.13.1",
6746 6861
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
6747
-      "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
6862
+      "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
6863
+      "dev": true
6748 6864
     },
6749 6865
     "union-value": {
6750 6866
       "version": "1.0.1",
@@ -7889,6 +8005,7 @@
7889 8005
       "version": "0.1.7",
7890 8006
       "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz",
7891 8007
       "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==",
8008
+      "dev": true,
7892 8009
       "requires": {
7893 8010
         "p-finally": "^1.0.0",
7894 8011
         "p-try": "^2.1.0",
@@ -7898,7 +8015,8 @@
7898 8015
         "pify": {
7899 8016
           "version": "4.0.1",
7900 8017
           "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
7901
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
8018
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
8019
+          "dev": true
7902 8020
         }
7903 8021
       }
7904 8022
     },
@@ -7956,7 +8074,8 @@
7956 8074
     "wrappy": {
7957 8075
       "version": "1.0.2",
7958 8076
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
7959
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
8077
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
8078
+      "dev": true
7960 8079
     },
7961 8080
     "ws": {
7962 8081
       "version": "3.3.2",

+ 13 - 4
package.json

@@ -21,8 +21,11 @@
21 21
     "@angular/http": "5.2.10",
22 22
     "@angular/platform-browser": "5.2.10",
23 23
     "@angular/platform-browser-dynamic": "5.2.10",
24
+    "@ionic-native/camera": "^4.20.0",
24 25
     "@ionic-native/core": "4.7.0",
25 26
     "@ionic-native/device": "^4.7.0",
27
+    "@ionic-native/file": "^4.20.0",
28
+    "@ionic-native/file-transfer": "^4.20.0",
26 29
     "@ionic-native/health": "^4.7.0",
27 30
     "@ionic-native/http": "^4.20.0",
28 31
     "@ionic-native/in-app-browser": "^4.7.0",
@@ -50,7 +53,10 @@
50 53
   },
51 54
   "devDependencies": {
52 55
     "@ionic/app-scripts": "^3.2.4",
56
+    "cordova-android": "^9.1.0",
53 57
     "cordova-ios": "^6.2.0",
58
+    "cordova-plugin-camera": "^5.0.3",
59
+    "cordova-plugin-file-transfer": "^1.7.1",
54 60
     "cordova-plugin-inappbrowser": "^5.0.0",
55 61
     "typescript": "~2.6.2"
56 62
   },
@@ -65,11 +71,14 @@
65 71
       "cordova-plugin-splashscreen": {},
66 72
       "cordova-plugin-device": {},
67 73
       "cordova-plugin-whitelist": {},
68
-      "cordova-plugin-inappbrowser": {}
74
+      "cordova-plugin-inappbrowser": {},
75
+      "cordova-plugin-file-transfer": {},
76
+      "cordova-plugin-file": {},
77
+      "cordova-plugin-camera": {}
69 78
     },
70 79
     "platforms": [
71
-      "ios",
72
-      "android"
80
+      "android",
81
+      "ios"
73 82
     ]
74 83
   }
75
-}
84
+}

+ 15 - 3
src/app/app.module.ts

@@ -13,6 +13,7 @@ import { EventPage } from '../pages/event/event';
13 13
 import { ProductCatDetailPage } from '../pages/product-cat-detail/product-cat-detail';
14 14
 import { NewsReaderPage } from '../pages/news-reader/news-reader';
15 15
 import { CouponViewPage } from '../pages/coupon-view/coupon-view';
16
+import { EventUploadPage } from '../pages/event-upload/event-upload';
16 17
 
17 18
 import { StatusBar } from '@ionic-native/status-bar';
18 19
 import { SplashScreen } from '@ionic-native/splash-screen';
@@ -33,6 +34,12 @@ import { UserAgent } from '@ionic-native/user-agent';
33 34
 
34 35
 import { HTTP  } from '@ionic-native/http';
35 36
 
37
+import { FileTransfer } from '@ionic-native/file-transfer';
38
+import { File } from '@ionic-native/file';
39
+import { Camera } from '@ionic-native/camera';
40
+
41
+
42
+
36 43
 @NgModule({
37 44
     declarations: [
38 45
         MyApp,
@@ -45,7 +52,8 @@ import { HTTP  } from '@ionic-native/http';
45 52
         EventPage,
46 53
         ProductCatDetailPage,
47 54
         NewsReaderPage,
48
-        CouponViewPage
55
+        CouponViewPage,
56
+        EventUploadPage
49 57
     ],
50 58
     imports: [
51 59
         BrowserModule,
@@ -69,7 +77,8 @@ import { HTTP  } from '@ionic-native/http';
69 77
         EventPage,
70 78
         ProductCatDetailPage,
71 79
         NewsReaderPage,
72
-        CouponViewPage
80
+        CouponViewPage,
81
+        EventUploadPage
73 82
     ],
74 83
     providers: [
75 84
         StatusBar,
@@ -83,7 +92,10 @@ import { HTTP  } from '@ionic-native/http';
83 92
         HumanizePipe,
84 93
         Device,
85 94
         HTTP, 
86
-        UserAgent
95
+        UserAgent,
96
+        FileTransfer,
97
+        File,
98
+        Camera
87 99
     ]
88 100
 })
89 101
 export class AppModule {}

+ 19 - 0
src/pages/event-upload/event-upload.html

@@ -0,0 +1,19 @@
1
+<!--
2
+  Generated template for the EventUploadPage page.
3
+
4
+  See http://ionicframework.com/docs/components/#navigation for more info on
5
+  Ionic pages and navigation.
6
+-->
7
+<ion-header>
8
+
9
+  <ion-navbar color="primary">
10
+    <ion-title>Event Detail</ion-title>
11
+  </ion-navbar>
12
+
13
+</ion-header>
14
+
15
+
16
+<ion-content padding>
17
+     <button ion-button (click)="selectImage()" color="tertiary" size='small'>Upload</button>
18
+
19
+</ion-content>

+ 13 - 0
src/pages/event-upload/event-upload.module.ts

@@ -0,0 +1,13 @@
1
+import { NgModule } from '@angular/core';
2
+import { IonicPageModule } from 'ionic-angular';
3
+import { EventUploadPage } from './event-upload';
4
+
5
+@NgModule({
6
+  declarations: [
7
+    EventUploadPage,
8
+  ],
9
+  imports: [
10
+    IonicPageModule.forChild(EventUploadPage),
11
+  ],
12
+})
13
+export class EventUploadPageModule {}

+ 3 - 0
src/pages/event-upload/event-upload.scss

@@ -0,0 +1,3 @@
1
+page-event-upload {
2
+
3
+}

+ 87 - 0
src/pages/event-upload/event-upload.ts

@@ -0,0 +1,87 @@
1
+import { Component } from '@angular/core';
2
+import { IonicPage, NavController, NavParams } from 'ionic-angular';
3
+import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
4
+import { File } from '@ionic-native/file';
5
+import { ActionSheetController } from 'ionic-angular';
6
+import { Camera, CameraOptions } from '@ionic-native/camera';
7
+import { HealthProvider } from '../../providers/health/health';
8
+/**
9
+ * Generated class for the EventUploadPage page.
10
+ *
11
+ * See https://ionicframework.com/docs/components/#navigation for more info on
12
+ * Ionic pages and navigation.
13
+ */
14
+
15
+@IonicPage()
16
+@Component({
17
+    selector: 'page-event-upload',
18
+    templateUrl: 'event-upload.html',
19
+})
20
+export class EventUploadPage {
21
+
22
+     imagePickerOptions = {
23
+         maximumImagesCount: 1,
24
+         quality: 50
25
+       };
26
+     croppedImagePath:string = "";
27
+
28
+     photoURL: any;
29
+     msg:string = "Upload Your Photo";
30
+
31
+    constructor(public navCtrl: NavController, public navParams: NavParams, private camera: Camera,   public actionSheetController: ActionSheetController, private hp: HealthProvider) {
32
+        let eventId = navParams.get('eventId');
33
+        console.log("eventId "+eventId);
34
+    }
35
+
36
+    ionViewDidLoad() {
37
+        console.log('ionViewDidLoad EventUploadPage');
38
+    }
39
+      async selectImage() {
40
+         const actionSheet = await this.actionSheetController.create({
41
+             header: "Select Image source",
42
+             buttons: [{
43
+                 text: 'Load from Library',
44
+                 handler: () => {
45
+                     this.pickImage(this.camera.PictureSourceType.PHOTOLIBRARY);
46
+                 }
47
+             },
48
+                 {
49
+                     text: 'Use Camera',
50
+                     handler: () => {
51
+                         this.pickImage(this.camera.PictureSourceType.CAMERA);
52
+                     }
53
+                 },
54
+                 {
55
+                     text: 'Cancel',
56
+                     role: 'cancel'
57
+                 }
58
+             ]
59
+         });
60
+         await actionSheet.present();
61
+     }
62
+    pickImage(sourceType) {
63
+        const options: CameraOptions = {
64
+            quality: 100,
65
+            sourceType: sourceType,
66
+            destinationType: this.camera.DestinationType.FILE_URI,
67
+            encodingType: this.camera.EncodingType.JPEG,
68
+            mediaType: this.camera.MediaType.PICTURE
69
+        }
70
+        this.camera.getPicture(options).then( async (imageData) => {
71
+            // imageData is either a base64 encoded string or a file URI
72
+            this.croppedImagePath = 'data:image/jpeg;base64,' + imageData;
73
+
74
+            console.log(this.croppedImagePath);
75
+            this.msg = "Uploading ...";
76
+            let r0  = await this.hp.uploadPhoto(imageData);
77
+            this.photoURL = await this.hp.getPhoto();
78
+            this.msg = "Upload Your Photo";
79
+            console.log("r0");
80
+            console.log(r0);
81
+        }, (err) => {
82
+            // Handle error
83
+            console.log(err);
84
+        });
85
+    }
86
+
87
+}

+ 1 - 1
src/pages/event/event.html

@@ -31,7 +31,7 @@
31 31
       </button>
32 32
     </ion-col>
33 33
     <ion-col>
34
-      <button ion-button icon-start color='success' block>
34
+      <button ion-button icon-start color='success' block (click)="joinEvent(p.id)">
35 35
         <ion-icon name="text"></ion-icon>
36 36
         <div>Join</div>
37 37
       </button>

+ 6 - 0
src/pages/event/event.ts

@@ -7,6 +7,7 @@ import { HealthProvider } from '../../providers/health/health';
7 7
 import { HumanizePipe  } from 'angular2-humanize';
8 8
 import { NativeStorage } from '@ionic-native/native-storage';
9 9
 import { InAppBrowser } from '@ionic-native/in-app-browser';
10
+import { EventUploadPage }  from '../event-upload/event-upload';
10 11
 /**
11 12
  * Generated class for the EventPage page.
12 13
  *
@@ -88,6 +89,7 @@ export class EventPage {
88 89
         this.hp.getWPPostCat(46, 1)
89 90
             .then( data => {
90 91
                 this.eventPosts = JSON.parse(data.data);
92
+                console.log(JSON.stringify(this.eventPosts));
91 93
             }, error => {
92 94
                 console.log("errors");
93 95
                 console.log(""+error);
@@ -188,4 +190,8 @@ export class EventPage {
188 190
     openLink(link: string) {
189 191
          this.ab.create(link, '_blank');
190 192
     }
193
+    joinEvent(id) {
194
+        console.log("join "+id);
195
+        this.navCtrl.push(EventUploadPage, { eventId: id });
196
+    }
191 197
 }

+ 2 - 1
src/pages/home/home.ts

@@ -33,6 +33,7 @@ export class HomePage {
33 33
     }
34 34
 
35 35
     ionViewDidEnter() {
36
+        this.postPage = 1;
36 37
         this.healthProvider.getWPPostCat(30, this.postPage++)
37 38
             .then( data => {
38 39
                 console.log(data);
@@ -40,7 +41,7 @@ export class HomePage {
40 41
                 console.log(this.wpPosts);
41 42
             }, error => {
42 43
                 console.log("errors");
43
-                console.log(""+error);
44
+                console.log(JSON.stringify(error));
44 45
             });
45 46
         /*
46 47
         this.healthProvider.getProducts()

+ 62 - 2
src/providers/health/health.ts

@@ -4,7 +4,8 @@ import { Observable } from 'rxjs';
4 4
 import { HttpHeaders } from '@angular/common/http';
5 5
 import { Device } from '@ionic-native/device';
6 6
 import { HTTP, HTTPResponse } from '@ionic-native/http';
7
-
7
+import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
8
+import { NativeStorage } from '@ionic-native/native-storage';
8 9
 
9 10
 /*
10 11
   Generated class for the HealthProvider provider.
@@ -20,6 +21,7 @@ const IMAGE_URL = HOSTBASE + "/media/";
20 21
 const QR_URL = HOSTBASE + "/static/";
21 22
 const REDEEM_API = HOSTBASE + "/coredata/api/redeem";
22 23
 const SV_API = HOSTBASE + "/strava/api";
24
+const UPLOAD_API = HOSTBASE + "/strava/uploadPhoto";
23 25
 const WP = "https://whitesports.net/wp-json/wp/v2/";
24 26
 
25 27
 @Injectable()
@@ -33,7 +35,7 @@ export class HealthProvider {
33 35
             'Authorization': 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoicHVibGljIiwicm9sZXMiOlsicHVibGljIl0sImV4cCI6MTczNDE2NTcxMCwiaWF0IjoxNDc0OTY1NzEwLCJuYmYiOjE0NzQ5NjU3MTAsImlkZW50aXR5IjoiNTdlOWVmMjZjMjU0ZmQ4N2Q3ZmQ4MzM2In0.-9fcm5s8qYbdqBDUX7cZJ5J3AX91fe6VrCLs_S-_eBU'
34 36
         })
35 37
     };
36
-    constructor(public http: HttpClient, private nhttp: HTTP, private dev: Device) {
38
+    constructor(public http: HttpClient, private nhttp: HTTP, private dev: Device, private transfer: FileTransfer, private storage: NativeStorage) {
37 39
         console.log('Hello HealthProvider Provider');
38 40
         console.log("construct device = ", this.dev.model, this.dev.serial, this.dev.isVirtual);
39 41
     }
@@ -115,6 +117,64 @@ export class HealthProvider {
115 117
     getWSProfile(athId, token) {
116 118
         return this.http.post(SV_API, {action: "GET_WS_PROFILE", athId: athId,   token: token });
117 119
     }
120
+      async getPhoto() {
121
+          /*
122
+ >>        let info = await this.kohaService.getPatronInfo();
123
+
124
+           console.log(info);
125
+           if( info != null ) {
126
+ >>            let url =  this.getPhotoUrl(info.GetPatronInfo.borrowernumber)
127
+               return this.http.get(url, {}, this.header)
128
+               .then(
129
+                   res => {
130
+ >>                    let o = JSON.parse(res.data);
131
+                       console.log(o);
132
+                       if(o.output == null ) {
133
+ >>                        return "";
134
+                       }else {
135
+                           return this.UPLOAD_URL + o.output;
136
+                       }
137
+                   },
138
+                   error => {
139
+                       return null;
140
+                   }
141
+               );
142
+           }else {
143
+               return null;
144
+           }*/
145
+       }
146
+    uploadPhotoUrl(eventId, athId) {
147
+        let url = UPLOAD_API + "?eventId="+eventId+"&athId="+athId;
148
+        return url;
149
+    }
150
+     async uploadPhoto(filePath) {
151
+
152
+         /*
153
+         let info = await this.kohaService.getPatronInfo();
154
+
155
+         console.log(info);
156
+         if( info != null ) {
157
+             const fileTransfer: FileTransferObject = this.transfer.create();
158
+
159
+             let options: FileUploadOptions = {
160
+                 fileKey: 'file',
161
+                 //fileName: 'name.jpg',
162
+             }
163
+
164
+             return fileTransfer.upload(filePath, this.uploadPhotoUrl(info.GetPatronInfo.borrowernumber), options)
165
+                 .then((data) => {
166
+                     // success
167
+                     console.log("from tranfer");
168
+                     console.log(data);
169
+                     return JSON.parse(data.response);
170
+                 }, (err) => {
171
+                     // error
172
+                     return err;
173
+                 })
174
+         } else {
175
+             return null;
176
+         }*/
177
+     }
118 178
     /*
119 179
   listNews(token, act): Observable<any> {
120 180
     return this.http.post("http://mcotn-api.simplico.net/api/v2.0/posts", {  action: "LIST", model: {} }, this.httpOptions);

golf/tge - Gogs: Simplico Git Service

暫無描述

LICENSE 765B

12345678910111213141516
  1. The ISC License
  2. Copyright (c) Isaac Z. Schlueter and Contributors
  3. Permission to use, copy, modify, and/or distribute this software for any
  4. purpose with or without fee is hereby granted, provided that the above
  5. copyright notice and this permission notice appear in all copies.
  6. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  7. WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  8. MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  9. ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  10. WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  11. ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
  12. IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.