PKZyM=/_ appinfo.json{ "targetPlatforms": [ "basalt", "chalk", "diorite" ], "uuid": "d2cb5dda-d554-47d7-bed7-357bd1685ed7", "messageKeys": { "cfgWakeupTime": 320, "uploadDone": 130, "cfgAutoClose": 310, "modalMessage": 120, "cfgStart": 301, "uploadFailed": 150, "cfgEnd": 302, "uploadStart": 140, "dataLine": 220, "lastSent": 110, "dataKey": 210 }, "companyName": "Natasha Kerensikova", "enableMultiJS": true, "versionLabel": "1.2", "capabilities": [ "health", "configurable" ], "sdkVersion": "3", "appKeys": { "cfgWakeupTime": 320, "uploadDone": 130, "cfgAutoClose": 310, "modalMessage": 120, "cfgStart": 301, "uploadFailed": 150, "cfgEnd": 302, "uploadStart": 140, "dataLine": 220, "lastSent": 110, "dataKey": 210 }, "longName": "Pebble Health Export", "shortName": "Health Export", "watchapp": { "watchface": false }, "resources": { "media": [] } }PK[yM<ޥeepebble-js-app.js/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(1); module.exports = __webpack_require__(2); /***/ }), /* 1 */ /***/ (function(module, exports) { (function(p) { if (!p === undefined) { console.error('Pebble object not found!?'); return; } // Aliases: p.on = p.addEventListener; p.off = p.removeEventListener; // For Android (WebView-based) pkjs, print stacktrace for uncaught errors: if (typeof window !== 'undefined' && window.addEventListener) { window.addEventListener('error', function(event) { if (event.error && event.error.stack) { console.error('' + event.error + '\n' + event.error.stack); } }); } })(Pebble); /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { /* * Copyright (c) 2016-2017, Natacha Porté * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ var cfg_endpoint = null; var cfg_data_field = null; var cfg_bundle_max = 1; var cfg_bundle_separator = "\r\n"; var cfg_sign_algo = ""; var cfg_sign_field = ""; var cfg_sign_field_format = ""; var cfg_sign_key = ""; var cfg_sign_key_format = ""; var cfg_auto_close = false; var cfg_wakeup_time = -1; var cfg_extra_fields = []; var to_send = []; var senders = [new XMLHttpRequest(), new XMLHttpRequest()]; var i_sender = 1; var bundle_size = 0; var jsSHA = __webpack_require__(3); function sendPayload(payload) { var data = encodeURIComponent(cfg_data_field) + '=' + encodeURIComponent(payload); if (cfg_sign_field) { var sha = new jsSHA(cfg_sign_algo, "TEXT"); sha.setHMACKey(cfg_sign_key, cfg_sign_key_format); sha.update(payload); data += '&' + encodeURIComponent(cfg_sign_field) +'=' + encodeURIComponent(sha.getHMAC(cfg_sign_field_format)); } if (cfg_extra_fields.length > 0) { for (var i = 0; i < cfg_extra_fields.length; i += 1) { var decoded = decodeURIComponent(cfg_extra_fields[i]).split("="); var name = decoded.shift(); var value = decoded.join("="); data += '&' + encodeURIComponent(name) + '=' + encodeURIComponent(value); } } i_sender = 1 - i_sender; senders[i_sender].open("POST", cfg_endpoint, true); senders[i_sender].setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); senders[i_sender].send(data); } function sendHead() { if (to_send.length < 1) return; bundle_size = 0; var payload = []; while (bundle_size < cfg_bundle_max && bundle_size < to_send.length) { payload.push(to_send[bundle_size].split(";")[1]); bundle_size += 1; } sendPayload(payload.join(cfg_bundle_separator)); } function enqueue(key, line) { to_send.push(key + ";" + line); localStorage.setItem("toSend", to_send.join("|")); localStorage.setItem("lastSent", key); if (to_send.length === 1) { Pebble.sendAppMessage({ "uploadStart": parseInt(key, 10) }); sendHead(); } } function uploadDone() { if (bundle_size > 1) { to_send.splice(0, bundle_size - 1); } var sent_key = to_send.shift().split(";")[0]; localStorage.setItem("toSend", to_send.join("|")); Pebble.sendAppMessage({ "uploadDone": parseInt(sent_key, 10) }); sendHead(); } function uploadError() { console.log(this.statusText); Pebble.sendAppMessage({ "uploadFailed": this.statusText }); } senders[0].addEventListener("load", uploadDone); senders[0].addEventListener("error", uploadError); senders[1].addEventListener("load", uploadDone); senders[1].addEventListener("error", uploadError); Pebble.addEventListener("ready", function() { console.log("Health Export PebbleKit JS ready!"); var str_to_send = localStorage.getItem("toSend"); to_send = str_to_send ? str_to_send.split("|") : []; var str_extra_fields = localStorage.getItem("extraFields"); cfg_extra_fields = str_extra_fields ? str_extra_fields.split(",") : []; cfg_endpoint = localStorage.getItem("cfgEndpoint"); cfg_data_field = localStorage.getItem("cfgDataField"); cfg_bundle_max = parseInt(localStorage.getItem("cfgBundleMax") || "1", 10); cfg_bundle_separator = localStorage.getItem("cfgBundleSeparator"); cfg_sign_algo = localStorage.getItem("cfgSignAlgorithm"); cfg_sign_field = localStorage.getItem("cfgSignFieldName"); cfg_sign_field_format = localStorage.getItem("cfgSignFieldFormat"); cfg_sign_key = localStorage.getItem("cfgSignKey"); cfg_sign_key_format = localStorage.getItem("cfgSignKeyFormat"); cfg_auto_close = (parseInt(localStorage.getItem("cfgAutoClose") || "0", 10) > 0); cfg_wakeup_time = parseInt(localStorage.getItem("cfgWakeupTime") || "-1", 10); if (!(cfg_bundle_max >= 1)) cfg_bundle_max = 1; var msg = {}; if (cfg_endpoint && cfg_data_field) { msg.lastSent = parseInt(localStorage.getItem("lastSent") || "0", 10); } else { msg.modalMessage = "Not configured"; } if (to_send.length >= 1) { msg.uploadStart = parseInt(to_send[0].split(";")[0]); } Pebble.sendAppMessage(msg); if (to_send.length >= 1) { sendHead(); } }); Pebble.addEventListener("appmessage", function(e) { if (e.payload.dataKey && e.payload.dataLine) { enqueue(e.payload.dataKey, e.payload.dataLine); } }); Pebble.addEventListener("showConfiguration", function() { var settings = "?v=1.2"; Pebble.sendAppMessage({ "cfgStart": 1 }); if (cfg_endpoint) { settings += "&url=" + encodeURIComponent(cfg_endpoint); } if (cfg_data_field) { settings += "&data_field=" + encodeURIComponent(cfg_data_field); } if (cfg_bundle_max) { settings += "&bundle_max=" + encodeURIComponent(cfg_bundle_max); } if (cfg_bundle_separator) { settings += "&bundle_sep=" + encodeURIComponent(cfg_bundle_separator); } if (cfg_sign_field) { settings += "&s_algo=" + encodeURIComponent(cfg_sign_algo) + "&s_field=" + encodeURIComponent(cfg_sign_field) + "&s_fieldf=" + encodeURIComponent(cfg_sign_field_format) + "&s_key=" + encodeURIComponent(cfg_sign_key) + "&s_keyf=" + encodeURIComponent(cfg_sign_key_format); } if (cfg_auto_close) { settings += "&ac=1"; } if (cfg_wakeup_time >= 0) { settings += "&wakeup=" + cfg_wakeup_time.toString(10); } if (cfg_extra_fields.length > 0) { settings += "&extra=" + cfg_extra_fields.join(","); } Pebble.openURL("https://cdn.rawgit.com/faelys/pebble-health-export/v1.0/config.html" + settings); }); Pebble.addEventListener("webviewclosed", function(e) { var configData = JSON.parse(e.response); var wasConfigured = (cfg_endpoint && cfg_data_field); var msg = { "cfgEnd": 1 }; if (configData.url) { cfg_endpoint = decodeURIComponent(configData.url); localStorage.setItem("cfgEndpoint", cfg_endpoint); } if (configData.dataField) { cfg_data_field = configData.dataField; localStorage.setItem("cfgDataField", cfg_data_field); } if (configData.bundleMax) { cfg_bundle_max = parseInt(configData.bundleMax, 10); if (!(cfg_bundle_max >= 1)) cfg_bundle_max = 1; localStorage.setItem("cfgBundleMax", cfg_bundle_max); } if (configData.bundleSeparator) { cfg_bundle_separator = decodeURIComponent(configData.bundleSeparator); localStorage.setItem("cfgBundleSeparator", cfg_bundle_separator); } if (configData.signAlgorithm) { cfg_sign_algo = configData.signAlgorithm; localStorage.setItem("cfgSignAlgorithm", cfg_sign_algo); } if (configData.signFieldName) { cfg_sign_field = configData.signFieldName; localStorage.setItem("cfgSignFieldName", cfg_sign_field); } if (configData.signFieldFormat) { cfg_sign_field_format = configData.signFieldFormat; localStorage.setItem("cfgSignFieldFormat", cfg_sign_field_format); } if (configData.signKey) { cfg_sign_key = decodeURIComponent(configData.signKey); localStorage.setItem("cfgSignKey", cfg_sign_key); } if (configData.signKeyFormat) { cfg_sign_key_format = configData.signKeyFormat; localStorage.setItem("cfgSignKeyFormat", cfg_sign_key_format); } if (configData.autoClose !== null) { cfg_auto_close = configData.autoClose; localStorage.setItem("cfgAutoClose", cfg_auto_close); msg.cfgAutoClose = cfg_auto_close ? 1 : 0; } if (configData.wakeupTime !== null) { console.log("Received wakeupTime \"" + configData.wakeupTime + "\""); var wakeupComponents = configData.wakeupTime.split(":"); if (wakeupComponents.length === 2) { var wakeupH = parseInt(wakeupComponents[0], 10); var wakeupM = parseInt(wakeupComponents[1], 10); if (wakeupH >= 0 && wakeupH < 24 && wakeupM >= 0 && wakeupM < 60) { cfg_wakeup_time = wakeupH * 60 + wakeupM; localStorage.setItem("cfgWakeupTime", cfg_wakeup_time); msg.cfgWakeupTime = cfg_wakeup_time; } else console.log("Invalid wakeupTime \"" + configData.wakeupTime + "\""); } else console.log("Invalid wakeupTime \"" + configData.wakeupTime + "\""); } if (configData.extraFields !== null) { console.log("received extraFields \"" + configData.extraFields + "\""); cfg_extra_fields = configData.extraFields ? configData.extraFields.split(",") : []; localStorage.setItem("extraFields", cfg_extra_fields.join(",")); } if (configData.resend) { senders[0].abort(); senders[1].abort(); localStorage.setItem("toSend", ""); localStorage.setItem("lastSent", "0"); to_send = []; wasConfigured = false; } if (!wasConfigured && cfg_endpoint && cfg_data_field) { msg.lastSent = 0; } Pebble.sendAppMessage(msg); }); /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/* A JavaScript implementation of the SHA family of hashes, as defined in FIPS PUB 180-2 as well as the corresponding HMAC implementation as defined in FIPS PUB 198a Copyright Brian Turek 2008-2015 Distributed under the BSD License See http://caligatio.github.com/jsSHA/ for more information Several functions taken from Paul Johnston */ 'use strict';(function(T){function y(c,a,d){var b=0,f=[],k=0,g,e,n,h,m,u,r,p=!1,q=!1,t=[],v=[],x,w=!1;d=d||{};g=d.encoding||"UTF8";x=d.numRounds||1;n=J(a,g);if(x!==parseInt(x,10)||1>x)throw Error("numRounds must a integer >= 1");if("SHA-1"===c)m=512,u=K,r=U,h=160;else if(u=function(a,d){return L(a,d,c)},r=function(a,d,b,f){var k,e;if("SHA-224"===c||"SHA-256"===c)k=(d+65>>>9<<4)+15,e=16;else if("SHA-384"===c||"SHA-512"===c)k=(d+129>>>10<<5)+31,e=32;else throw Error("Unexpected error in SHA-2 implementation"); for(;a.length<=k;)a.push(0);a[d>>>5]|=128<<24-d%32;a[k]=d+b;b=a.length;for(d=0;d>>3;f=k/4-1;if(k< a/8){for(d=r(d,a,0,z(c));d.length<=f;)d.push(0);d[f]&=4294967040}else if(k>a/8){for(;d.length<=f;)d.push(0);d[f]&=4294967040}for(a=0;a<=f;a+=1)t[a]=d[a]^909522486,v[a]=d[a]^1549556828;e=u(t,e);b=m;q=!0};this.update=function(a){var c,d,g,h=0,p=m>>>5;c=n(a,f,k);a=c.binLen;d=c.value;c=a>>>5;for(g=0;g>>5);k=a%m;w=!0};this.getHash=function(a,d){var g,m,n;if(!0===q)throw Error("Cannot call getHash after setting HMAC key");n=M(d);switch(a){case "HEX":g= function(a){return N(a,n)};break;case "B64":g=function(a){return O(a,n)};break;case "BYTES":g=P;break;default:throw Error("format must be HEX, B64, or BYTES");}if(!1===p)for(e=r(f,k,b,e),m=1;m>>3;if(0!==b%2)throw Error("String of HEX type must be in byte increments");for(f=0;f>>1)+n;for(e=l>>>2;a.length<=e;)a.push(0);a[e]|=k<<8*(3-l%4)}return{value:a,binLen:4*b+d}}function W(c,a,d){var b=[],f,k,e,l,b=a||[0];d= d||0;k=d>>>3;for(f=0;f>>2,b.length<=e&&b.push(0),b[e]|=a<<8*(3-l%4);return{value:b,binLen:8*c.length+d}}function X(c,a,d){var b=[],f=0,e,g,l,n,h,m,b=a||[0];d=d||0;a=d>>>3;if(-1===c.search(/^[a-zA-Z0-9=+\/]+$/))throw Error("Invalid character in base-64 string");g=c.indexOf("=");c=c.replace(/\=/g,"");if(-1!==g&&g 1) {\n to_send.splice(0, bundle_size - 1);\n }\n var sent_key = to_send.shift().split(\";\")[0];\n localStorage.setItem(\"toSend\", to_send.join(\"|\"));\n Pebble.sendAppMessage({ \"uploadDone\": parseInt(sent_key, 10) });\n sendHead();\n}\n\nfunction uploadError() {\n console.log(this.statusText);\n Pebble.sendAppMessage({ \"uploadFailed\": this.statusText });\n}\n\nsenders[0].addEventListener(\"load\", uploadDone);\nsenders[0].addEventListener(\"error\", uploadError);\nsenders[1].addEventListener(\"load\", uploadDone);\nsenders[1].addEventListener(\"error\", uploadError);\n\nPebble.addEventListener(\"ready\", function() {\n console.log(\"Health Export PebbleKit JS ready!\");\n\n var str_to_send = localStorage.getItem(\"toSend\");\n to_send = str_to_send ? str_to_send.split(\"|\") : [];\n\n var str_extra_fields = localStorage.getItem(\"extraFields\");\n cfg_extra_fields = str_extra_fields ? str_extra_fields.split(\",\") : [];\n\n cfg_endpoint = localStorage.getItem(\"cfgEndpoint\");\n cfg_data_field = localStorage.getItem(\"cfgDataField\");\n cfg_bundle_max = parseInt(localStorage.getItem(\"cfgBundleMax\") || \"1\", 10);\n cfg_bundle_separator = localStorage.getItem(\"cfgBundleSeparator\");\n cfg_sign_algo = localStorage.getItem(\"cfgSignAlgorithm\");\n cfg_sign_field = localStorage.getItem(\"cfgSignFieldName\");\n cfg_sign_field_format = localStorage.getItem(\"cfgSignFieldFormat\");\n cfg_sign_key = localStorage.getItem(\"cfgSignKey\");\n cfg_sign_key_format = localStorage.getItem(\"cfgSignKeyFormat\");\n cfg_auto_close = (parseInt(localStorage.getItem(\"cfgAutoClose\") || \"0\", 10) > 0);\n cfg_wakeup_time = parseInt(localStorage.getItem(\"cfgWakeupTime\") || \"-1\", 10);\n\n if (!(cfg_bundle_max >= 1)) cfg_bundle_max = 1;\n\n var msg = {};\n\n if (cfg_endpoint && cfg_data_field) {\n msg.lastSent = parseInt(localStorage.getItem(\"lastSent\") || \"0\", 10);\n } else {\n msg.modalMessage = \"Not configured\";\n }\n\n if (to_send.length >= 1) {\n msg.uploadStart = parseInt(to_send[0].split(\";\")[0]);\n }\n\n Pebble.sendAppMessage(msg);\n\n if (to_send.length >= 1) {\n sendHead();\n }\n});\n\nPebble.addEventListener(\"appmessage\", function(e) {\n if (e.payload.dataKey && e.payload.dataLine) {\n enqueue(e.payload.dataKey, e.payload.dataLine);\n }\n});\n\nPebble.addEventListener(\"showConfiguration\", function() {\n var settings = \"?v=1.2\";\n\n Pebble.sendAppMessage({ \"cfgStart\": 1 });\n\n if (cfg_endpoint) {\n settings += \"&url=\" + encodeURIComponent(cfg_endpoint);\n }\n if (cfg_data_field) {\n settings += \"&data_field=\" + encodeURIComponent(cfg_data_field);\n }\n if (cfg_bundle_max) {\n settings += \"&bundle_max=\" + encodeURIComponent(cfg_bundle_max);\n }\n if (cfg_bundle_separator) {\n settings += \"&bundle_sep=\" + encodeURIComponent(cfg_bundle_separator);\n }\n if (cfg_sign_field) {\n settings += \"&s_algo=\" + encodeURIComponent(cfg_sign_algo)\n + \"&s_field=\" + encodeURIComponent(cfg_sign_field)\n + \"&s_fieldf=\" + encodeURIComponent(cfg_sign_field_format)\n + \"&s_key=\" + encodeURIComponent(cfg_sign_key)\n + \"&s_keyf=\" + encodeURIComponent(cfg_sign_key_format);\n }\n\n if (cfg_auto_close) {\n settings += \"&ac=1\";\n }\n\n if (cfg_wakeup_time >= 0) {\n settings += \"&wakeup=\" + cfg_wakeup_time.toString(10);\n }\n\n if (cfg_extra_fields.length > 0) {\n settings += \"&extra=\" + cfg_extra_fields.join(\",\");\n }\n\n Pebble.openURL(\"https://cdn.rawgit.com/faelys/pebble-health-export/v1.0/config.html\" + settings);\n});\n\nPebble.addEventListener(\"webviewclosed\", function(e) {\n var configData = JSON.parse(e.response);\n var wasConfigured = (cfg_endpoint && cfg_data_field);\n var msg = { \"cfgEnd\": 1 };\n\n if (configData.url) {\n cfg_endpoint = decodeURIComponent(configData.url);\n localStorage.setItem(\"cfgEndpoint\", cfg_endpoint);\n }\n\n if (configData.dataField) {\n cfg_data_field = configData.dataField;\n localStorage.setItem(\"cfgDataField\", cfg_data_field);\n }\n\n if (configData.bundleMax) {\n cfg_bundle_max = parseInt(configData.bundleMax, 10);\n if (!(cfg_bundle_max >= 1)) cfg_bundle_max = 1;\n localStorage.setItem(\"cfgBundleMax\", cfg_bundle_max);\n }\n\n if (configData.bundleSeparator) {\n cfg_bundle_separator = decodeURIComponent(configData.bundleSeparator);\n localStorage.setItem(\"cfgBundleSeparator\", cfg_bundle_separator);\n }\n\n if (configData.signAlgorithm) {\n cfg_sign_algo = configData.signAlgorithm;\n localStorage.setItem(\"cfgSignAlgorithm\", cfg_sign_algo);\n }\n\n if (configData.signFieldName) {\n cfg_sign_field = configData.signFieldName;\n localStorage.setItem(\"cfgSignFieldName\", cfg_sign_field);\n }\n\n if (configData.signFieldFormat) {\n cfg_sign_field_format = configData.signFieldFormat;\n localStorage.setItem(\"cfgSignFieldFormat\", cfg_sign_field_format);\n }\n\n if (configData.signKey) {\n cfg_sign_key = decodeURIComponent(configData.signKey);\n localStorage.setItem(\"cfgSignKey\", cfg_sign_key);\n }\n\n if (configData.signKeyFormat) {\n cfg_sign_key_format = configData.signKeyFormat;\n localStorage.setItem(\"cfgSignKeyFormat\", cfg_sign_key_format);\n }\n\n if (configData.autoClose !== null) {\n cfg_auto_close = configData.autoClose;\n localStorage.setItem(\"cfgAutoClose\", cfg_auto_close);\n msg.cfgAutoClose = cfg_auto_close ? 1 : 0;\n }\n\n if (configData.wakeupTime !== null) {\n console.log(\"Received wakeupTime \\\"\" + configData.wakeupTime + \"\\\"\");\n var wakeupComponents = configData.wakeupTime.split(\":\");\n if (wakeupComponents.length === 2) {\n var wakeupH = parseInt(wakeupComponents[0], 10);\n var wakeupM = parseInt(wakeupComponents[1], 10);\n if (wakeupH >= 0 && wakeupH < 24 && wakeupM >= 0 && wakeupM < 60) {\n cfg_wakeup_time = wakeupH * 60 + wakeupM;\n localStorage.setItem(\"cfgWakeupTime\", cfg_wakeup_time);\n msg.cfgWakeupTime = cfg_wakeup_time;\n }\n else\n console.log(\"Invalid wakeupTime \\\"\" + configData.wakeupTime + \"\\\"\");\n }\n else\n console.log(\"Invalid wakeupTime \\\"\" + configData.wakeupTime + \"\\\"\");\n }\n\n if (configData.extraFields !== null) {\n console.log(\"received extraFields \\\"\" + configData.extraFields + \"\\\"\");\n cfg_extra_fields = configData.extraFields\n ? configData.extraFields.split(\",\") : [];\n localStorage.setItem(\"extraFields\", cfg_extra_fields.join(\",\"));\n }\n\n if (configData.resend) {\n senders[0].abort();\n senders[1].abort();\n localStorage.setItem(\"toSend\", \"\");\n localStorage.setItem(\"lastSent\", \"0\");\n to_send = [];\n wasConfigured = false;\n }\n\n if (!wasConfigured && cfg_endpoint && cfg_data_field) {\n msg.lastSent = 0;\n }\n\n Pebble.sendAppMessage(msg);\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/js/app.js\n// module id = 2\n// module chunks = 0","/*\n A JavaScript implementation of the SHA family of hashes, as\n defined in FIPS PUB 180-2 as well as the corresponding HMAC implementation\n as defined in FIPS PUB 198a\n\n Copyright Brian Turek 2008-2015\n Distributed under the BSD License\n See http://caligatio.github.com/jsSHA/ for more information\n\n Several functions taken from Paul Johnston\n*/\n'use strict';(function(T){function y(c,a,d){var b=0,f=[],k=0,g,e,n,h,m,u,r,p=!1,q=!1,t=[],v=[],x,w=!1;d=d||{};g=d.encoding||\"UTF8\";x=d.numRounds||1;n=J(a,g);if(x!==parseInt(x,10)||1>x)throw Error(\"numRounds must a integer >= 1\");if(\"SHA-1\"===c)m=512,u=K,r=U,h=160;else if(u=function(a,d){return L(a,d,c)},r=function(a,d,b,f){var k,e;if(\"SHA-224\"===c||\"SHA-256\"===c)k=(d+65>>>9<<4)+15,e=16;else if(\"SHA-384\"===c||\"SHA-512\"===c)k=(d+129>>>10<<5)+31,e=32;else throw Error(\"Unexpected error in SHA-2 implementation\");\nfor(;a.length<=k;)a.push(0);a[d>>>5]|=128<<24-d%32;a[k]=d+b;b=a.length;for(d=0;d>>3;f=k/4-1;if(k<\na/8){for(d=r(d,a,0,z(c));d.length<=f;)d.push(0);d[f]&=4294967040}else if(k>a/8){for(;d.length<=f;)d.push(0);d[f]&=4294967040}for(a=0;a<=f;a+=1)t[a]=d[a]^909522486,v[a]=d[a]^1549556828;e=u(t,e);b=m;q=!0};this.update=function(a){var c,d,g,h=0,p=m>>>5;c=n(a,f,k);a=c.binLen;d=c.value;c=a>>>5;for(g=0;g>>5);k=a%m;w=!0};this.getHash=function(a,d){var g,m,n;if(!0===q)throw Error(\"Cannot call getHash after setting HMAC key\");n=M(d);switch(a){case \"HEX\":g=\nfunction(a){return N(a,n)};break;case \"B64\":g=function(a){return O(a,n)};break;case \"BYTES\":g=P;break;default:throw Error(\"format must be HEX, B64, or BYTES\");}if(!1===p)for(e=r(f,k,b,e),m=1;m>>3;if(0!==b%2)throw Error(\"String of HEX type must be in byte increments\");for(f=0;f>>1)+n;for(e=l>>>2;a.length<=e;)a.push(0);a[e]|=k<<8*(3-l%4)}return{value:a,binLen:4*b+d}}function W(c,a,d){var b=[],f,k,e,l,b=a||[0];d=\nd||0;k=d>>>3;for(f=0;f>>2,b.length<=e&&b.push(0),b[e]|=a<<8*(3-l%4);return{value:b,binLen:8*c.length+d}}function X(c,a,d){var b=[],f=0,e,g,l,n,h,m,b=a||[0];d=d||0;a=d>>>3;if(-1===c.search(/^[a-zA-Z0-9=+\\/]+$/))throw Error(\"Invalid character in base-64 string\");g=c.indexOf(\"=\");c=c.replace(/\\=/g,\"\");if(-1!==g&&g `" $p&L|D@`f!`nDbnHFFF`nF(F((`* ,p .!F f! n"nHFFF nF(F:O 2 !0406 31FfSnYF^"Fnc#Fnh(Fn:< !8> ;L1F|Df'nYF2nF8nF>(Fn@`B0DpFD!F fX! nZHF`SFXFE n<(F(FXH`JLpN@`f0!`n2HFfn,F0F`nF(F3 Outs$rr K{Dx{ HxDo HxDo K"{Dppl-COND~D:3B[ӧLM|D#h}D +` `H#FOa*FxD0H&1FORxD>  )h"h(FљJ zDD)h"hK{DTIK Or{DyDKJ{D`KzD{D`K {DpK{Do`JzDpJzDx*JzDoB KJ{DzDR#`J,K0{DhB <%#IyD B;4<% JB8!FzDR#@CB#@3B 0t^KI yD@"{D8 K M{D Lh}D|D(n nnn8@.@t7F  (K{Dh#;<"!oneo1E d! n#o<"SC@=JF@! FzDAK{Dh+ "oBI@yD0@*-"on@<"SC Je !zD0s%spNF~D3xB-KM{Dh}D(n!Fhn{!FnM!F}D(no!Fhni!Fn!F4pps&:sr-OF)FpO &`00p*LI|DyD `;! h=HxD5FHF' hF(F<#O > `" $p&L|D@`f!`nDbnHFFF`nF(F((`* ,p .!F f! n"nHFFF nF(F:O 2 !0406 31FfSnYF^"Fnc#Fnh(Fn:< !8> ;L1F|Df'nYF2nF8nF>(Fn@`B0DpFD!F fX! nZHF`SFXFE n<(F(FXH`JLpN@`f0!`n2HFfn,F0F`nF(F3 Outs$rr K{Dx{ HxDo HxDo K"{Dppl-COND~D:3B[ӧLM|D#h}D +` `H#FOa*FxD0H&1FORxD>  )h"h(FљJ zDD)h"hK{DTIK Or{DyDKJ{D`KzD{D`K {DpK{Do`JzDpJzDx*JzDoB KJ{DzDR#`J,K0{DhB <%#IyD B;4<% JB8!FzDR#@CB#@3B 0t^KI yD@"{D8 K M{D Lh}D|D(n nnn8@.@t7F  (K{Dh#;<"!oneo1E d! n#o<"SC@=JF@! FzDAK{Dh+ "oBI@yD0@*-"on@<"SC Je !zD0s%spNF~D3xB-KM{Dh}D(n!Fhn{!FnM!F}D(no!Fhni!Fn!F4pps&:sr-OF)FpO &`00p*LI|DyD `;! h=HxD5FHF' hF(F<#O > `" $p&L|D@`f!`nDbnHFFF`nF(F((`* ,p .!F f! n"nHFFF nF(F:O 2 !0406 31FfSnYF^"Fnc#Fnh(Fn:< !8> ;L1F|Df'nYF2nF8nF>(Fn@`B0DpFD!F fX! nZHF`SFXFE n<(F(FXH`JLpN@`f0!`n2HFfn,F0F`nF(F3 Outs$rr K{Dx{ HxDo HxDo K"{Dppl-COND~D:3B[ӧLM|D#h}D +` `H#FOa*FxD0H&1FORxD>  )h"h(FљJ zDD)h"hK{DTIK Or{DyDKJ{D`KzD{D`K {DpK{Do`JzDpJzDx*JzDoB KJ{DzDR#`J