{"version":3,"sources":["base64/base64.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mB;;AAEA,uF;;AAEA,sB;;AAEA,gD;AACA,4C;AACA,E;;AAEA,Y;;AAEA,kC;;AAEA,kC;AACA,oB;AACA,yC;AACA,0C;AACA,iC;AACA,sB;AACA,wB;AACA,mE;AACA,O;AACA,oB;AACA,K;AACA,G;;AAEA,kB;AACA,e;AACA,e;AACA,e;AACA,e;AACA,0C;AACA,oB;AACA,W;AACA,iC;AACA,iC;AACA,Y;AACA,W;AACA,oC;AACA,gC;AACA,Y;AACA,W;AACA,qC;AACA,0B;AACA,8B;AACA,8B;AACA,8B;AACA,8B;AACA,e;AACA,e;AACA,e;AACA,e;AACA,Y;AACA,K;AACA,G;AACA,kB;AACA,4B;AACA,4B;AACA,kB;AACA,uB;AACA,Q;AACA,8B;AACA,kB;AACA,uB;AACA,G;AACA,yB;AACA,E;;AAEA,8B;AACA,mC;AACA,E;;AAEA,4B;AACA,mB;AACA,c;AACA,G;AACA,0B;AACA,E;;AAEA,oE;AACA,mE;AACA,sE;AACA,qE;AACA,O;AACA,mC;AACA,gF;AACA,iB;AACA,mC;AACA,kB;AACA,K;AACA,mC;AACA,e;AACA,G;AACA,8C;AACA,E;;AAEA,gC;AACA,yC;AACA,0C;AACA,U;AACA,0C;AACA,Y;AACA,G;AACA,kC;;AAEA,iB;AACA,iB;AACA,mB;;AAEA,Y;;AAEA,wC;AACA,0B;AACA,sB;AACA,oB;AACA,W;AACA,gB;AACA,iD;AACA,mB;AACA,Y;AACA,W;AACA,gB;AACA,iD;AACA,2B;AACA,qB;AACA,4B;AACA,Y;AACA,W;AACA,mB;AACA,6B;AACA,uB;AACA,gC;AACA,O;AACA,Y;AACA,W;AACA,mB;AACA,6B;AACA,O;AACA,Y;AACA,K;AACA,G;AACA,a;AACA,E","file":"/packages/base64.js","sourcesContent":["// Base 64 encoding\n\nvar BASE_64_CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nvar BASE_64_VALS = {};\n\nfor (var i = 0; i < BASE_64_CHARS.length; i++) {\n  BASE_64_VALS[BASE_64_CHARS.charAt(i)] = i;\n};\n\nBase64 = {};\n\nBase64.encode = function (array) {\n\n  if (typeof array === \"string\") {\n    var str = array;\n    array = Base64.newBinary(str.length);\n    for (var i = 0; i < str.length; i++) {\n      var ch = str.charCodeAt(i);\n      if (ch > 0xFF) {\n        throw new Error(\n          \"Not ascii. Base64.encode can only take ascii strings.\");\n      }\n      array[i] = ch;\n    }\n  }\n\n  var answer = [];\n  var a = null;\n  var b = null;\n  var c = null;\n  var d = null;\n  for (var i = 0; i < array.length; i++) {\n    switch (i % 3) {\n    case 0:\n      a = (array[i] >> 2) & 0x3F;\n      b = (array[i] & 0x03) << 4;\n      break;\n    case 1:\n      b = b | (array[i] >> 4) & 0xF;\n      c = (array[i] & 0xF) << 2;\n      break;\n    case 2:\n      c = c | (array[i] >> 6) & 0x03;\n      d = array[i] & 0x3F;\n      answer.push(getChar(a));\n      answer.push(getChar(b));\n      answer.push(getChar(c));\n      answer.push(getChar(d));\n      a = null;\n      b = null;\n      c = null;\n      d = null;\n      break;\n    }\n  }\n  if (a != null) {\n    answer.push(getChar(a));\n    answer.push(getChar(b));\n    if (c == null)\n      answer.push('=');\n    else\n      answer.push(getChar(c));\n    if (d == null)\n      answer.push('=');\n  }\n  return answer.join(\"\");\n};\n\nvar getChar = function (val) {\n  return BASE_64_CHARS.charAt(val);\n};\n\nvar getVal = function (ch) {\n  if (ch === '=') {\n    return -1;\n  }\n  return BASE_64_VALS[ch];\n};\n\n// XXX This is a weird place for this to live, but it's used both by\n// this package and 'ejson', and we can't put it in 'ejson' without\n// introducing a circular dependency. It should probably be in its own\n// package or as a helper in a package that both 'base64' and 'ejson'\n// use.\nBase64.newBinary = function (len) {\n  if (typeof Uint8Array === 'undefined' || typeof ArrayBuffer === 'undefined') {\n    var ret = [];\n    for (var i = 0; i < len; i++) {\n      ret.push(0);\n    }\n    ret.$Uint8ArrayPolyfill = true;\n    return ret;\n  }\n  return new Uint8Array(new ArrayBuffer(len));\n};\n\nBase64.decode = function (str) {\n  var len = Math.floor((str.length*3)/4);\n  if (str.charAt(str.length - 1) == '=') {\n    len--;\n    if (str.charAt(str.length - 2) == '=')\n      len--;\n  }\n  var arr = Base64.newBinary(len);\n\n  var one = null;\n  var two = null;\n  var three = null;\n\n  var j = 0;\n\n  for (var i = 0; i < str.length; i++) {\n    var c = str.charAt(i);\n    var v = getVal(c);\n    switch (i % 4) {\n    case 0:\n      if (v < 0)\n        throw new Error('invalid base64 string');\n      one = v << 2;\n      break;\n    case 1:\n      if (v < 0)\n        throw new Error('invalid base64 string');\n      one = one | (v >> 4);\n      arr[j++] = one;\n      two = (v & 0x0F) << 4;\n      break;\n    case 2:\n      if (v >= 0) {\n        two = two | (v >> 2);\n        arr[j++] = two;\n        three = (v & 0x03) << 6;\n      }\n      break;\n    case 3:\n      if (v >= 0) {\n        arr[j++] = three | v;\n      }\n      break;\n    }\n  }\n  return arr;\n};\n"]}