{"version":3,"file":"4eea6b8f-928ec081b74b8c10cef4.js","mappings":"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,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ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","sources":["webpack://kanha-shanthi-vanam/../node_modules/xlsx/xlsx.js"],"sourcesContent":["/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*exported XLSX */\n\n/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */\nvar XLSX = {};\n\nfunction make_xlsx_lib(XLSX) {\n XLSX.version = '0.17.3';\n var current_codepage = 1200,\n current_ansi = 1252;\n /*global cptable:true, window */\n\n if (typeof module !== \"undefined\" && typeof require !== 'undefined') {\n if (typeof cptable === 'undefined') {\n if (typeof global !== 'undefined') global.cptable = require('./dist/cpexcel.js');else if (typeof window !== 'undefined') window.cptable = require('./dist/cpexcel.js');\n }\n }\n\n var VALID_ANSI = [874, 932, 936, 949, 950];\n\n for (var i = 0; i <= 8; ++i) {\n VALID_ANSI.push(1250 + i);\n }\n /* ECMA-376 Part I 18.4.1 charset to codepage mapping */\n\n\n var CS2CP = {\n 0: 1252,\n\n /* ANSI */\n 1: 65001,\n\n /* DEFAULT */\n 2: 65001,\n\n /* SYMBOL */\n 77: 10000,\n\n /* MAC */\n 128: 932,\n\n /* SHIFTJIS */\n 129: 949,\n\n /* HANGUL */\n 130: 1361,\n\n /* JOHAB */\n 134: 936,\n\n /* GB2312 */\n 136: 950,\n\n /* CHINESEBIG5 */\n 161: 1253,\n\n /* GREEK */\n 162: 1254,\n\n /* TURKISH */\n 163: 1258,\n\n /* VIETNAMESE */\n 177: 1255,\n\n /* HEBREW */\n 178: 1256,\n\n /* ARABIC */\n 186: 1257,\n\n /* BALTIC */\n 204: 1251,\n\n /* RUSSIAN */\n 222: 874,\n\n /* THAI */\n 238: 1250,\n\n /* EASTEUROPE */\n 255: 1252,\n\n /* OEM */\n 69: 6969\n /* MISC */\n\n };\n\n var set_ansi = function set_ansi(cp) {\n if (VALID_ANSI.indexOf(cp) == -1) return;\n current_ansi = CS2CP[0] = cp;\n };\n\n function reset_ansi() {\n set_ansi(1252);\n }\n\n var set_cp = function set_cp(cp) {\n current_codepage = cp;\n set_ansi(cp);\n };\n\n function reset_cp() {\n set_cp(1200);\n reset_ansi();\n }\n\n function char_codes(data) {\n var o = [];\n\n for (var i = 0, len = data.length; i < len; ++i) {\n o[i] = data.charCodeAt(i);\n }\n\n return o;\n }\n\n function utf16leread(data) {\n var o = [];\n\n for (var i = 0; i < data.length >> 1; ++i) {\n o[i] = String.fromCharCode(data.charCodeAt(2 * i) + (data.charCodeAt(2 * i + 1) << 8));\n }\n\n return o.join(\"\");\n }\n\n function utf16beread(data) {\n var o = [];\n\n for (var i = 0; i < data.length >> 1; ++i) {\n o[i] = String.fromCharCode(data.charCodeAt(2 * i + 1) + (data.charCodeAt(2 * i) << 8));\n }\n\n return o.join(\"\");\n }\n\n var debom = function debom(data) {\n var c1 = data.charCodeAt(0),\n c2 = data.charCodeAt(1);\n if (c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n if (c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n if (c1 == 0xFEFF) return data.slice(1);\n return data;\n };\n\n var _getchar = function _gc1(x) {\n return String.fromCharCode(x);\n };\n\n var _getansi = function _ga1(x) {\n return String.fromCharCode(x);\n };\n\n if (typeof cptable !== 'undefined') {\n set_cp = function set_cp(cp) {\n current_codepage = cp;\n set_ansi(cp);\n };\n\n debom = function debom(data) {\n if (data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) {\n return cptable.utils.decode(1200, char_codes(data.slice(2)));\n }\n\n return data;\n };\n\n _getchar = function _gc2(x) {\n if (current_codepage === 1200) return String.fromCharCode(x);\n return cptable.utils.decode(current_codepage, [x & 255, x >> 8])[0];\n };\n\n _getansi = function _ga2(x) {\n return cptable.utils.decode(current_ansi, [x])[0];\n };\n }\n\n var DENSE = null;\n var DIF_XL = true;\n\n var Base64 = function make_b64() {\n var map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n return {\n encode: function encode(input) {\n var o = \"\";\n var c1 = 0,\n c2 = 0,\n c3 = 0,\n e1 = 0,\n e2 = 0,\n e3 = 0,\n e4 = 0;\n\n for (var i = 0; i < input.length;) {\n c1 = input.charCodeAt(i++);\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n\n o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\n }\n\n return o;\n },\n decode: function b64_decode(input) {\n var o = \"\";\n var c1 = 0,\n c2 = 0,\n c3 = 0,\n e1 = 0,\n e2 = 0,\n e3 = 0,\n e4 = 0;\n input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\n for (var i = 0; i < input.length;) {\n e1 = map.indexOf(input.charAt(i++));\n e2 = map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n\n e4 = map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n\n return o;\n }\n };\n }();\n\n var has_buf = typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node;\n\n var Buffer_from = function Buffer_from() {};\n\n if (typeof Buffer !== 'undefined') {\n var nbfs = !Buffer.from;\n if (!nbfs) try {\n Buffer.from(\"foo\", \"utf8\");\n } catch (e) {\n nbfs = true;\n }\n Buffer_from = nbfs ? function (buf, enc) {\n return enc ? new Buffer(buf, enc) : new Buffer(buf);\n } : Buffer.from.bind(Buffer); // $FlowIgnore\n\n if (!Buffer.alloc) Buffer.alloc = function (n) {\n return new Buffer(n);\n }; // $FlowIgnore\n\n if (!Buffer.allocUnsafe) Buffer.allocUnsafe = function (n) {\n return new Buffer(n);\n };\n }\n\n function new_raw_buf(len) {\n /* jshint -W056 */\n return has_buf ? Buffer.alloc(len) : new Array(len);\n /* jshint +W056 */\n }\n\n function new_unsafe_buf(len) {\n /* jshint -W056 */\n return has_buf ? Buffer.allocUnsafe(len) : new Array(len);\n /* jshint +W056 */\n }\n\n var s2a = function s2a(s) {\n if (has_buf) return Buffer_from(s, \"binary\");\n return s.split(\"\").map(function (x) {\n return x.charCodeAt(0) & 0xff;\n });\n };\n\n function s2ab(s) {\n if (typeof ArrayBuffer === 'undefined') return s2a(s);\n var buf = new ArrayBuffer(s.length),\n view = new Uint8Array(buf);\n\n for (var i = 0; i != s.length; ++i) {\n view[i] = s.charCodeAt(i) & 0xFF;\n }\n\n return buf;\n }\n\n function a2s(data) {\n if (Array.isArray(data)) return data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\"\");\n var o = [];\n\n for (var i = 0; i < data.length; ++i) {\n o[i] = String.fromCharCode(data[i]);\n }\n\n return o.join(\"\");\n }\n\n function a2u(data) {\n if (typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n return new Uint8Array(data);\n }\n\n function ab2a(data) {\n if (typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n if (data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n var o = new Array(data.length);\n\n for (var i = 0; i < data.length; ++i) {\n o[i] = data[i];\n }\n\n return o;\n }\n\n var bconcat = function bconcat(bufs) {\n return [].concat.apply([], bufs);\n };\n\n var chr0 = /\\u0000/g,\n chr1 = /[\\u0001-\\u0006]/g;\n /* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n /*jshint -W041 */\n\n var SSF = {};\n\n var make_ssf = function make_ssf(SSF) {\n SSF.version = '0.11.2';\n\n function _strrev(x) {\n var o = \"\",\n i = x.length - 1;\n\n while (i >= 0) {\n o += x.charAt(i--);\n }\n\n return o;\n }\n\n function fill(c, l) {\n var o = \"\";\n\n while (o.length < l) {\n o += c;\n }\n\n return o;\n }\n\n function pad0(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n }\n\n function pad_(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : fill(' ', d - t.length) + t;\n }\n\n function rpad_(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : t + fill(' ', d - t.length);\n }\n\n function pad0r1(v, d) {\n var t = \"\" + Math.round(v);\n return t.length >= d ? t : fill('0', d - t.length) + t;\n }\n\n function pad0r2(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n }\n\n var p2_32 = Math.pow(2, 32);\n\n function pad0r(v, d) {\n if (v > p2_32 || v < -p2_32) return pad0r1(v, d);\n var i = Math.round(v);\n return pad0r2(i, d);\n }\n\n function isgeneral(s, i) {\n i = i || 0;\n return s.length >= 7 + i && (s.charCodeAt(i) | 32) === 103 && (s.charCodeAt(i + 1) | 32) === 101 && (s.charCodeAt(i + 2) | 32) === 110 && (s.charCodeAt(i + 3) | 32) === 101 && (s.charCodeAt(i + 4) | 32) === 114 && (s.charCodeAt(i + 5) | 32) === 97 && (s.charCodeAt(i + 6) | 32) === 108;\n }\n\n var days = [['Sun', 'Sunday'], ['Mon', 'Monday'], ['Tue', 'Tuesday'], ['Wed', 'Wednesday'], ['Thu', 'Thursday'], ['Fri', 'Friday'], ['Sat', 'Saturday']];\n var months = [['J', 'Jan', 'January'], ['F', 'Feb', 'February'], ['M', 'Mar', 'March'], ['A', 'Apr', 'April'], ['M', 'May', 'May'], ['J', 'Jun', 'June'], ['J', 'Jul', 'July'], ['A', 'Aug', 'August'], ['S', 'Sep', 'September'], ['O', 'Oct', 'October'], ['N', 'Nov', 'November'], ['D', 'Dec', 'December']];\n\n function init_table(t) {\n t[0] = 'General';\n t[1] = '0';\n t[2] = '0.00';\n t[3] = '#,##0';\n t[4] = '#,##0.00';\n t[9] = '0%';\n t[10] = '0.00%';\n t[11] = '0.00E+00';\n t[12] = '# ?/?';\n t[13] = '# ??/??';\n t[14] = 'm/d/yy';\n t[15] = 'd-mmm-yy';\n t[16] = 'd-mmm';\n t[17] = 'mmm-yy';\n t[18] = 'h:mm AM/PM';\n t[19] = 'h:mm:ss AM/PM';\n t[20] = 'h:mm';\n t[21] = 'h:mm:ss';\n t[22] = 'm/d/yy h:mm';\n t[37] = '#,##0 ;(#,##0)';\n t[38] = '#,##0 ;[Red](#,##0)';\n t[39] = '#,##0.00;(#,##0.00)';\n t[40] = '#,##0.00;[Red](#,##0.00)';\n t[45] = 'mm:ss';\n t[46] = '[h]:mm:ss';\n t[47] = 'mmss.0';\n t[48] = '##0.0E+0';\n t[49] = '@';\n t[56] = '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n }\n\n var table_fmt = {};\n init_table(table_fmt);\n /* Defaults determined by systematically testing in Excel 2019 */\n\n /* These formats appear to default to other formats in the table */\n\n var default_map = [];\n var defi = 0; // 5 -> 37 ... 8 -> 40\n\n for (defi = 5; defi <= 8; ++defi) {\n default_map[defi] = 32 + defi;\n } // 23 -> 0 ... 26 -> 0\n\n\n for (defi = 23; defi <= 26; ++defi) {\n default_map[defi] = 0;\n } // 27 -> 14 ... 31 -> 14\n\n\n for (defi = 27; defi <= 31; ++defi) {\n default_map[defi] = 14;\n } // 50 -> 14 ... 58 -> 14\n\n\n for (defi = 50; defi <= 58; ++defi) {\n default_map[defi] = 14;\n } // 59 -> 1 ... 62 -> 4\n\n\n for (defi = 59; defi <= 62; ++defi) {\n default_map[defi] = defi - 58;\n } // 67 -> 9 ... 68 -> 10\n\n\n for (defi = 67; defi <= 68; ++defi) {\n default_map[defi] = defi - 58;\n } // 72 -> 14 ... 75 -> 17\n\n\n for (defi = 72; defi <= 75; ++defi) {\n default_map[defi] = defi - 58;\n } // 69 -> 12 ... 71 -> 14\n\n\n for (defi = 67; defi <= 68; ++defi) {\n default_map[defi] = defi - 57;\n } // 76 -> 20 ... 78 -> 22\n\n\n for (defi = 76; defi <= 78; ++defi) {\n default_map[defi] = defi - 56;\n } // 79 -> 45 ... 81 -> 47\n\n\n for (defi = 79; defi <= 81; ++defi) {\n default_map[defi] = defi - 34;\n } // 82 -> 0 ... 65536 -> 0 (omitted)\n\n /* These formats technically refer to Accounting formats with no equivalent */\n\n\n var default_str = []; // 5 -- Currency, 0 decimal, black negative\n\n default_str[5] = default_str[63] = '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)'; // 6 -- Currency, 0 decimal, red negative\n\n default_str[6] = default_str[64] = '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)'; // 7 -- Currency, 2 decimal, black negative\n\n default_str[7] = default_str[65] = '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)'; // 8 -- Currency, 2 decimal, red negative\n\n default_str[8] = default_str[66] = '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)'; // 41 -- Accounting, 0 decimal, No Symbol\n\n default_str[41] = '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)'; // 42 -- Accounting, 0 decimal, $ Symbol\n\n default_str[42] = '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)'; // 43 -- Accounting, 2 decimal, No Symbol\n\n default_str[43] = '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)'; // 44 -- Accounting, 2 decimal, $ Symbol\n\n default_str[44] = '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)';\n\n function frac(x, D, mixed) {\n var sgn = x < 0 ? -1 : 1;\n var B = x * sgn;\n var P_2 = 0,\n P_1 = 1,\n P = 0;\n var Q_2 = 1,\n Q_1 = 0,\n Q = 0;\n var A = Math.floor(B);\n\n while (Q_1 < D) {\n A = Math.floor(B);\n P = A * P_1 + P_2;\n Q = A * Q_1 + Q_2;\n if (B - A < 0.00000005) break;\n B = 1 / (B - A);\n P_2 = P_1;\n P_1 = P;\n Q_2 = Q_1;\n Q_1 = Q;\n }\n\n if (Q > D) {\n if (Q_1 > D) {\n Q = Q_2;\n P = P_2;\n } else {\n Q = Q_1;\n P = P_1;\n }\n }\n\n if (!mixed) return [0, sgn * P, Q];\n var q = Math.floor(sgn * P / Q);\n return [q, sgn * P - q * Q, Q];\n }\n\n function parse_date_code(v, opts, b2) {\n if (v > 2958465 || v < 0) return null;\n var date = v | 0,\n time = Math.floor(86400 * (v - date)),\n dow = 0;\n var dout = [];\n var out = {\n D: date,\n T: time,\n u: 86400 * (v - date) - time,\n y: 0,\n m: 0,\n d: 0,\n H: 0,\n M: 0,\n S: 0,\n q: 0\n };\n if (Math.abs(out.u) < 1e-6) out.u = 0;\n if (opts && opts.date1904) date += 1462;\n\n if (out.u > 0.9999) {\n out.u = 0;\n\n if (++time == 86400) {\n out.T = time = 0;\n ++date;\n ++out.D;\n }\n }\n\n if (date === 60) {\n dout = b2 ? [1317, 10, 29] : [1900, 2, 29];\n dow = 3;\n } else if (date === 0) {\n dout = b2 ? [1317, 8, 29] : [1900, 1, 0];\n dow = 6;\n } else {\n if (date > 60) --date;\n /* 1 = Jan 1 1900 in Gregorian */\n\n var d = new Date(1900, 0, 1);\n d.setDate(d.getDate() + date - 1);\n dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n dow = d.getDay();\n if (date < 60) dow = (dow + 6) % 7;\n if (b2) dow = fix_hijri(d, dout);\n }\n\n out.y = dout[0];\n out.m = dout[1];\n out.d = dout[2];\n out.S = time % 60;\n time = Math.floor(time / 60);\n out.M = time % 60;\n time = Math.floor(time / 60);\n out.H = time;\n out.q = dow;\n return out;\n }\n\n SSF.parse_date_code = parse_date_code;\n var basedate = new Date(1899, 11, 31, 0, 0, 0);\n var dnthresh = basedate.getTime();\n var base1904 = new Date(1900, 2, 1, 0, 0, 0);\n\n function datenum_local(v, date1904) {\n var epoch = v.getTime();\n if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1000;else if (v >= base1904) epoch += 24 * 60 * 60 * 1000;\n return (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n }\n /* The longest 32-bit integer text is \"-4294967296\", exactly 11 chars */\n\n\n function general_fmt_int(v) {\n return v.toString(10);\n }\n\n SSF._general_int = general_fmt_int;\n /* ECMA-376 18.8.30 numFmt*/\n\n /* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n\n var general_fmt_num = function make_general_fmt_num() {\n var trailing_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)$/;\n\n function strip_decimal(o) {\n return o.indexOf(\".\") == -1 ? o : o.replace(trailing_zeroes_and_decimal, \"$1\");\n }\n /* General Exponential always shows 2 digits exp and trims the mantissa */\n\n\n var mantissa_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/;\n var exp_with_single_digit = /(E[+-])(\\d)$/;\n\n function normalize_exp(o) {\n if (o.indexOf(\"E\") == -1) return o;\n return o.replace(mantissa_zeroes_and_decimal, \"$1E\").replace(exp_with_single_digit, \"$10$2\");\n }\n /* exponent >= -9 and <= 9 */\n\n\n function small_exp(v) {\n var w = v < 0 ? 12 : 11;\n var o = strip_decimal(v.toFixed(12));\n if (o.length <= w) return o;\n o = v.toPrecision(10);\n if (o.length <= w) return o;\n return v.toExponential(5);\n }\n /* exponent >= 11 or <= -10 likely exponential */\n\n\n function large_exp(v) {\n var o = strip_decimal(v.toFixed(11));\n return o.length > (v < 0 ? 12 : 11) || o === \"0\" || o === \"-0\" ? v.toPrecision(6) : o;\n }\n\n function general_fmt_num_base(v) {\n var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E),\n o;\n if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);else if (Math.abs(V) <= 9) o = small_exp(v);else if (V === 10) o = v.toFixed(10).substr(0, 12);else o = large_exp(v);\n return strip_decimal(normalize_exp(o.toUpperCase()));\n }\n\n return general_fmt_num_base;\n }();\n\n SSF._general_num = general_fmt_num;\n /*\n \t\"General\" rules:\n \t- text is passed through (\"@\")\n \t- booleans are rendered as TRUE/FALSE\n \t- \"up to 11 characters\" displayed for numbers\n \t- Default date format (code 14) used for Dates\n \n \tTODO: technically the display depends on the width of the cell\n */\n\n function general_fmt(v, opts) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? \"TRUE\" : \"FALSE\";\n\n case 'number':\n return (v | 0) === v ? v.toString(10) : general_fmt_num(v);\n\n case 'undefined':\n return \"\";\n\n case 'object':\n if (v == null) return \"\";\n if (v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n }\n\n throw new Error(\"unsupported value in General format: \" + v);\n }\n\n SSF._general = general_fmt;\n\n function fix_hijri(date, o) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if (date < 60) dow = (dow + 6) % 7;\n return dow;\n } //var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n\n /*jshint -W086 */\n\n\n function write_date(type, fmt, val, ss0) {\n var o = \"\",\n ss = 0,\n tt = 0,\n y = val.y,\n out,\n outl = 0;\n\n switch (type) {\n case 98:\n /* 'b' buddhist year */\n y = val.y + 543;\n\n /* falls through */\n\n case 121:\n /* 'y' year */\n switch (fmt.length) {\n case 1:\n case 2:\n out = y % 100;\n outl = 2;\n break;\n\n default:\n out = y % 10000;\n outl = 4;\n break;\n }\n\n break;\n\n case 109:\n /* 'm' month */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.m;\n outl = fmt.length;\n break;\n\n case 3:\n return months[val.m - 1][1];\n\n case 5:\n return months[val.m - 1][0];\n\n default:\n return months[val.m - 1][2];\n }\n\n break;\n\n case 100:\n /* 'd' day */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.d;\n outl = fmt.length;\n break;\n\n case 3:\n return days[val.q][0];\n\n default:\n return days[val.q][1];\n }\n\n break;\n\n case 104:\n /* 'h' 12-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = 1 + (val.H + 11) % 12;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad hour format: ' + fmt;\n }\n\n break;\n\n case 72:\n /* 'H' 24-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.H;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad hour format: ' + fmt;\n }\n\n break;\n\n case 77:\n /* 'M' minutes */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.M;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad minute format: ' + fmt;\n }\n\n break;\n\n case 115:\n /* 's' seconds */\n if (fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n if (val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n if (ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;else tt = ss0 === 1 ? 10 : 1;\n ss = Math.round(tt * (val.S + val.u));\n if (ss >= 60 * tt) ss = 0;\n if (fmt === 's') return ss === 0 ? \"0\" : \"\" + ss / tt;\n o = pad0(ss, 2 + ss0);\n if (fmt === 'ss') return o.substr(0, 2);\n return \".\" + o.substr(2, fmt.length - 1);\n\n case 90:\n /* 'Z' absolute time */\n switch (fmt) {\n case '[h]':\n case '[hh]':\n out = val.D * 24 + val.H;\n break;\n\n case '[m]':\n case '[mm]':\n out = (val.D * 24 + val.H) * 60 + val.M;\n break;\n\n case '[s]':\n case '[ss]':\n out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);\n break;\n\n default:\n throw 'bad abstime format: ' + fmt;\n }\n\n outl = fmt.length === 3 ? 1 : 2;\n break;\n\n case 101:\n /* 'e' era */\n out = y;\n outl = 1;\n break;\n }\n\n var outstr = outl > 0 ? pad0(out, outl) : \"\";\n return outstr;\n }\n /*jshint +W086 */\n\n\n function commaify(s) {\n var w = 3;\n if (s.length <= w) return s;\n var j = s.length % w,\n o = s.substr(0, j);\n\n for (; j != s.length; j += w) {\n o += (o.length > 0 ? \",\" : \"\") + s.substr(j, w);\n }\n\n return o;\n }\n\n var write_num = function make_write_num() {\n var pct1 = /%/g;\n\n function write_num_pct(type, fmt, val) {\n var sfmt = fmt.replace(pct1, \"\"),\n mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_cm(type, fmt, val) {\n var idx = fmt.length - 1;\n\n while (fmt.charCodeAt(idx - 1) === 44) {\n --idx;\n }\n\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_exp(fmt, val) {\n var o;\n var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp(fmt, -val);\n var period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n if (o.indexOf(\"e\") === -1) {\n var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n\n while (o.substr(0, 2) === \"0.\") {\n o = o.charAt(0) + o.substr(2, period) + \".\" + o.substr(2 + period);\n o = o.replace(/^0+([1-9])/, \"$1\").replace(/^0+\\./, \"0.\");\n }\n\n o = o.replace(/\\+-/, \"-\");\n }\n\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n var frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\n\n function write_num_f1(r, aval, sign) {\n var den = parseInt(r[4], 10),\n rr = Math.round(aval * den),\n base = Math.floor(rr / den);\n var myn = rr - base * den,\n myd = den;\n return sign + (base === 0 ? \"\" : \"\" + base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn, r[1].length) + r[2] + \"/\" + r[3] + pad0(myd, r[4].length));\n }\n\n function write_num_f2(r, aval, sign) {\n return sign + (aval === 0 ? \"\" : \"\" + aval) + fill(\" \", r[1].length + 2 + r[4].length);\n }\n\n var dec1 = /^#*0*\\.([0#]+)/;\n var closeparen = /\\).*[0#]/;\n var phone = /\\(###\\) ###\\\\?-####/;\n\n function hashq(str) {\n var o = \"\",\n cc;\n\n for (var i = 0; i != str.length; ++i) {\n switch (cc = str.charCodeAt(i)) {\n case 35:\n break;\n\n case 63:\n o += \" \";\n break;\n\n case 48:\n o += \"0\";\n break;\n\n default:\n o += String.fromCharCode(cc);\n }\n }\n\n return o;\n }\n\n function rnd(val, d) {\n var dd = Math.pow(10, d);\n return \"\" + Math.round(val * dd) / dd;\n }\n\n function dec(val, d) {\n var _frac = val - Math.floor(val),\n dd = Math.pow(10, d);\n\n if (d < ('' + Math.round(_frac * dd)).length) return 0;\n return Math.round(_frac * dd);\n }\n\n function carry(val, d) {\n if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n return 1;\n }\n\n return 0;\n }\n\n function flr(val) {\n if (val < 2147483647 && val > -2147483648) return \"\" + (val >= 0 ? val | 0 : val - 1 | 0);\n return \"\" + Math.floor(val);\n }\n\n function write_num_flt(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_flt('n', ffmt, val);\n return '(' + write_num_flt('n', ffmt, -val) + ')';\n }\n\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_flt(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n var o;\n var r,\n ri,\n ff,\n aval = Math.abs(val),\n sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0r(aval, fmt.length);\n\n if (fmt.match(/^[#?]+$/)) {\n o = pad0r(val, 0);\n if (o === \"0\") o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(frac1)) return write_num_f1(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0r(aval, fmt.length - fmt.indexOf(\"0\"));\n\n if (r = fmt.match(dec1)) {\n o = rnd(val, r[1].length).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1])).replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n return sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n\n if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(pad0r(aval, 0));\n\n if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\" + (Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length), r[1].length);\n }\n\n if (r = fmt.match(/^#,#*,#0/)) return write_num_flt(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n o = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n\n if (fmt.match(phone)) {\n o = write_num_flt(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n\n var oa = \"\";\n\n if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n\n if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n\n if (r = fmt.match(/^[#0?]+$/)) {\n o = pad0r(val, 0);\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(/^([#0?]+)\\.([#0]+)$/)) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n var lres = fmt.indexOf(\".\") - ri,\n rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n\n if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n ri = dec(val, r[1].length);\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(ri, r[1].length);\n }\n\n switch (fmt) {\n case \"###,##0.00\":\n return write_num_flt(type, \"#,##0.00\", val);\n\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n var x = commaify(pad0r(aval, 0));\n return x !== \"0\" ? sign + x : \"\";\n\n case \"###,###.00\":\n return write_num_flt(type, \"###,##0.00\", val).replace(/^0\\./, \".\");\n\n case \"#,###.00\":\n return write_num_flt(type, \"#,##0.00\", val).replace(/^0\\./, \".\");\n\n default:\n }\n\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n function write_num_cm2(type, fmt, val) {\n var idx = fmt.length - 1;\n\n while (fmt.charCodeAt(idx - 1) === 44) {\n --idx;\n }\n\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_pct2(type, fmt, val) {\n var sfmt = fmt.replace(pct1, \"\"),\n mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_exp2(fmt, val) {\n var o;\n var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp2(fmt, -val);\n var period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n if (!o.match(/[Ee]/)) {\n var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n o = o.replace(/\\+-/, \"-\");\n }\n\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n function write_num_int(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_int('n', ffmt, val);\n return '(' + write_num_int('n', ffmt, -val) + ')';\n }\n\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_int(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n var o;\n var r,\n ri,\n ff,\n aval = Math.abs(val),\n sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0(aval, fmt.length);\n\n if (fmt.match(/^[#?]+$/)) {\n o = \"\" + val;\n if (val === 0) o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(frac1)) return write_num_f2(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0(aval, fmt.length - fmt.indexOf(\"0\"));\n\n if (r = fmt.match(dec1)) {\n o = (\"\" + val).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1]));\n o = o.replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n return sign + (\"\" + aval).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n\n if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(\"\" + aval);\n\n if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val) + \".\" + fill('0', r[1].length);\n }\n\n if (r = fmt.match(/^#,#*,#0/)) return write_num_int(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n o = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n\n if (fmt.match(phone)) {\n o = write_num_int(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n\n var oa = \"\";\n\n if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n\n if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n\n if (r = fmt.match(/^[#0?]+$/)) {\n o = \"\" + val;\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(/^([#0]+)\\.([#0]+)$/)) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n var lres = fmt.indexOf(\".\") - ri,\n rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n\n if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(0, r[1].length);\n }\n\n switch (fmt) {\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n var x = commaify(\"\" + aval);\n return x !== \"0\" ? sign + x : \"\";\n\n default:\n if (fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n }\n\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n return function write_num(type, fmt, val) {\n return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n };\n }();\n\n function split_fmt(fmt) {\n var out = [];\n var in_str = false\n /*, cc*/\n ;\n\n for (var i = 0, j = 0; i < fmt.length; ++i) {\n switch (\n /*cc=*/\n fmt.charCodeAt(i)) {\n case 34:\n /* '\"' */\n in_str = !in_str;\n break;\n\n case 95:\n case 42:\n case 92:\n /* '_' '*' '\\\\' */\n ++i;\n break;\n\n case 59:\n /* ';' */\n out[out.length] = fmt.substr(j, i - j);\n j = i + 1;\n }\n }\n\n out[out.length] = fmt.substr(j);\n if (in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n return out;\n }\n\n SSF._split = split_fmt;\n var abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\n\n function fmt_is_date(fmt) {\n var i = 0,\n\n /*cc = 0,*/\n c = \"\",\n o = \"\";\n\n while (i < fmt.length) {\n switch (c = fmt.charAt(i)) {\n case 'G':\n if (isgeneral(fmt, i)) i += 6;\n i++;\n break;\n\n case '\"':\n for (;\n /*cc=*/\n fmt.charCodeAt(++i) !== 34 && i < fmt.length;) {\n /*empty*/\n }\n\n ++i;\n break;\n\n case '\\\\':\n i += 2;\n break;\n\n case '_':\n i += 2;\n break;\n\n case '@':\n ++i;\n break;\n\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") return true;\n\n /* falls through */\n\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n /* falls through */\n\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n return true;\n\n case 'A':\n case 'a':\n case '上':\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n ++i;\n break;\n\n case '[':\n o = c;\n\n while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n o += fmt.charAt(i);\n }\n\n if (o.match(abstime)) return true;\n break;\n\n case '.':\n /* falls through */\n\n case '0':\n case '#':\n while (i < fmt.length && (\"0#?.,E+-%\".indexOf(c = fmt.charAt(++i)) > -1 || c == '\\\\' && fmt.charAt(i + 1) == \"-\" && \"0#\".indexOf(fmt.charAt(i + 2)) > -1)) {\n /* empty */\n }\n\n break;\n\n case '?':\n while (fmt.charAt(++i) === c) {\n /* empty */\n }\n\n break;\n\n case '*':\n ++i;\n if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n break;\n\n case '(':\n case ')':\n ++i;\n break;\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n /* empty */\n }\n\n break;\n\n case ' ':\n ++i;\n break;\n\n default:\n ++i;\n break;\n }\n }\n\n return false;\n }\n\n SSF.is_date = fmt_is_date;\n\n function eval_fmt(fmt, v, opts, flen) {\n var out = [],\n o = \"\",\n i = 0,\n c = \"\",\n lst = 't',\n dt,\n j,\n cc;\n var hr = 'H';\n /* Tokenize */\n\n while (i < fmt.length) {\n switch (c = fmt.charAt(i)) {\n case 'G':\n /* General */\n if (!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {\n t: 'G',\n v: 'General'\n };\n i += 7;\n break;\n\n case '\"':\n /* Literal text */\n for (o = \"\"; (cc = fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) {\n o += String.fromCharCode(cc);\n }\n\n out[out.length] = {\n t: 't',\n v: o\n };\n ++i;\n break;\n\n case '\\\\':\n var w = fmt.charAt(++i),\n t = w === \"(\" || w === \")\" ? w : 't';\n out[out.length] = {\n t: t,\n v: w\n };\n ++i;\n break;\n\n case '_':\n out[out.length] = {\n t: 't',\n v: \" \"\n };\n i += 2;\n break;\n\n case '@':\n /* Text Placeholder */\n out[out.length] = {\n t: 'T',\n v: v\n };\n ++i;\n break;\n\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") {\n if (dt == null) {\n dt = parse_date_code(v, opts, fmt.charAt(i + 1) === \"2\");\n if (dt == null) return \"\";\n }\n\n out[out.length] = {\n t: 'X',\n v: fmt.substr(i, 2)\n };\n lst = c;\n i += 2;\n break;\n }\n\n /* falls through */\n\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n c = c.toLowerCase();\n\n /* falls through */\n\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n if (v < 0) return \"\";\n\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n\n o = c;\n\n while (++i < fmt.length && fmt.charAt(i).toLowerCase() === c) {\n o += c;\n }\n\n if (c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n if (c === 'h') c = hr;\n out[out.length] = {\n t: c,\n v: o\n };\n lst = c;\n break;\n\n case 'A':\n case 'a':\n case '上':\n var q = {\n t: c,\n v: c\n };\n if (dt == null) dt = parse_date_code(v, opts);\n\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") {\n if (dt != null) q.v = dt.H >= 12 ? \"P\" : \"A\";\n q.t = 'T';\n hr = 'h';\n i += 3;\n } else if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") {\n if (dt != null) q.v = dt.H >= 12 ? \"PM\" : \"AM\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") {\n if (dt != null) q.v = dt.H >= 12 ? \"下午\" : \"上午\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else {\n q.t = \"t\";\n ++i;\n }\n\n if (dt == null && q.t === 'T') return \"\";\n out[out.length] = q;\n lst = c;\n break;\n\n case '[':\n o = c;\n\n while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n o += fmt.charAt(i);\n }\n\n if (o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\n if (o.match(abstime)) {\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n\n out[out.length] = {\n t: 'Z',\n v: o.toLowerCase()\n };\n lst = o.charAt(1);\n } else if (o.indexOf(\"$\") > -1) {\n o = (o.match(/\\$([^-\\[\\]]*)/) || [])[1] || \"$\";\n if (!fmt_is_date(fmt)) out[out.length] = {\n t: 't',\n v: o\n };\n }\n\n break;\n\n /* Numbers */\n\n case '.':\n if (dt != null) {\n o = c;\n\n while (++i < fmt.length && (c = fmt.charAt(i)) === \"0\") {\n o += c;\n }\n\n out[out.length] = {\n t: 's',\n v: o\n };\n break;\n }\n\n /* falls through */\n\n case '0':\n case '#':\n o = c;\n\n while (++i < fmt.length && \"0#?.,E+-%\".indexOf(c = fmt.charAt(i)) > -1) {\n o += c;\n }\n\n out[out.length] = {\n t: 'n',\n v: o\n };\n break;\n\n case '?':\n o = c;\n\n while (fmt.charAt(++i) === c) {\n o += c;\n }\n\n out[out.length] = {\n t: c,\n v: o\n };\n lst = c;\n break;\n\n case '*':\n ++i;\n if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n break;\n // **\n\n case '(':\n case ')':\n out[out.length] = {\n t: flen === 1 ? 't' : c,\n v: c\n };\n ++i;\n break;\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n o = c;\n\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n o += fmt.charAt(i);\n }\n\n out[out.length] = {\n t: 'D',\n v: o\n };\n break;\n\n case ' ':\n out[out.length] = {\n t: c,\n v: c\n };\n ++i;\n break;\n\n case '$':\n out[out.length] = {\n t: 't',\n v: '$'\n };\n ++i;\n break;\n\n default:\n if (\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {\n t: 't',\n v: c\n };\n ++i;\n break;\n }\n }\n /* Scan for date/time parts */\n\n\n var bt = 0,\n ss0 = 0,\n ssm;\n\n for (i = out.length - 1, lst = 't'; i >= 0; --i) {\n switch (out[i].t) {\n case 'h':\n case 'H':\n out[i].t = hr;\n lst = 'h';\n if (bt < 1) bt = 1;\n break;\n\n case 's':\n if (ssm = out[i].v.match(/\\.0+$/)) ss0 = Math.max(ss0, ssm[0].length - 1);\n if (bt < 3) bt = 3;\n\n /* falls through */\n\n case 'd':\n case 'y':\n case 'M':\n case 'e':\n lst = out[i].t;\n break;\n\n case 'm':\n if (lst === 's') {\n out[i].t = 'M';\n if (bt < 2) bt = 2;\n }\n\n break;\n\n case 'X':\n /*if(out[i].v === \"B2\");*/\n break;\n\n case 'Z':\n if (bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n if (bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n }\n }\n /* time rounding depends on presence of minute / second / usec fields */\n\n\n switch (bt) {\n case 0:\n break;\n\n case 1:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n\n if (dt.M >= 60) {\n dt.M = 0;\n ++dt.H;\n }\n\n break;\n\n case 2:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n\n break;\n }\n /* replace fields */\n\n\n var nstr = \"\",\n jj;\n\n for (i = 0; i < out.length; ++i) {\n switch (out[i].t) {\n case 't':\n case 'T':\n case ' ':\n case 'D':\n break;\n\n case 'X':\n out[i].v = \"\";\n out[i].t = \";\";\n break;\n\n case 'd':\n case 'm':\n case 'y':\n case 'h':\n case 'H':\n case 'M':\n case 's':\n case 'e':\n case 'b':\n case 'Z':\n out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n out[i].t = 't';\n break;\n\n case 'n':\n case '?':\n jj = i + 1;\n\n while (out[jj] != null && ((c = out[jj].t) === \"?\" || c === \"D\" || (c === \" \" || c === \"t\") && out[jj + 1] != null && (out[jj + 1].t === '?' || out[jj + 1].t === \"t\" && out[jj + 1].v === '/') || out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') || c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj + 1] != null && out[jj + 1].t == '?'))) {\n out[i].v += out[jj].v;\n out[jj] = {\n v: \"\",\n t: \";\"\n };\n ++jj;\n }\n\n nstr += out[i].v;\n i = jj - 1;\n break;\n\n case 'G':\n out[i].t = 't';\n out[i].v = general_fmt(v, opts);\n break;\n }\n }\n\n var vv = \"\",\n myv,\n ostr;\n\n if (nstr.length > 0) {\n if (nstr.charCodeAt(0) == 40)\n /* '(' */\n {\n myv = v < 0 && nstr.charCodeAt(0) === 45 ? -v : v;\n ostr = write_num('n', nstr, myv);\n } else {\n myv = v < 0 && flen > 1 ? -v : v;\n ostr = write_num('n', nstr, myv);\n\n if (myv < 0 && out[0] && out[0].t == 't') {\n ostr = ostr.substr(1);\n out[0].v = \"-\" + out[0].v;\n }\n }\n\n jj = ostr.length - 1;\n var decpt = out.length;\n\n for (i = 0; i < out.length; ++i) {\n if (out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) {\n decpt = i;\n break;\n }\n }\n\n var lasti = out.length;\n\n if (decpt === out.length && ostr.indexOf(\"E\") === -1) {\n for (i = out.length - 1; i >= 0; --i) {\n if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\n if (jj >= out[i].v.length - 1) {\n jj -= out[i].v.length;\n out[i].v = ostr.substr(jj + 1, out[i].v.length);\n } else if (jj < 0) out[i].v = \"\";else {\n out[i].v = ostr.substr(0, jj + 1);\n jj = -1;\n }\n\n out[i].t = 't';\n lasti = i;\n }\n\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n } else if (decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n jj = ostr.indexOf(\".\") - 1;\n\n for (i = decpt; i >= 0; --i) {\n if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") - 1 : out[i].v.length - 1;\n vv = out[i].v.substr(j + 1);\n\n for (; j >= 0; --j) {\n if (jj >= 0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n }\n\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n jj = ostr.indexOf(\".\") + 1;\n\n for (i = decpt; i < out.length; ++i) {\n if (out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") + 1 : 0;\n vv = out[i].v.substr(0, j);\n\n for (; j < out[i].v.length; ++j) {\n if (jj < ostr.length) vv += ostr.charAt(jj++);\n }\n\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n }\n }\n\n for (i = 0; i < out.length; ++i) {\n if (out[i] != null && 'n?'.indexOf(out[i].t) > -1) {\n myv = flen > 1 && v < 0 && i > 0 && out[i - 1].v === \"-\" ? -v : v;\n out[i].v = write_num(out[i].t, out[i].v, myv);\n out[i].t = 't';\n }\n }\n\n var retval = \"\";\n\n for (i = 0; i !== out.length; ++i) {\n if (out[i] != null) retval += out[i].v;\n }\n\n return retval;\n }\n\n SSF._eval = eval_fmt;\n var cfregex = /\\[[=<>]/;\n var cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\n\n function chkcond(v, rr) {\n if (rr == null) return false;\n var thresh = parseFloat(rr[2]);\n\n switch (rr[1]) {\n case \"=\":\n if (v == thresh) return true;\n break;\n\n case \">\":\n if (v > thresh) return true;\n break;\n\n case \"<\":\n if (v < thresh) return true;\n break;\n\n case \"<>\":\n if (v != thresh) return true;\n break;\n\n case \">=\":\n if (v >= thresh) return true;\n break;\n\n case \"<=\":\n if (v <= thresh) return true;\n break;\n }\n\n return false;\n }\n\n function choose_fmt(f, v) {\n var fmt = split_fmt(f);\n var l = fmt.length,\n lat = fmt[l - 1].indexOf(\"@\");\n if (l < 4 && lat > -1) --l;\n if (fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n if (typeof v !== \"number\") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : \"@\"];\n\n switch (fmt.length) {\n case 1:\n fmt = lat > -1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"];\n break;\n\n case 2:\n fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"];\n break;\n\n case 3:\n fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"];\n break;\n\n case 4:\n break;\n }\n\n var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n if (fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\n if (fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n var m1 = fmt[0].match(cfregex2);\n var m2 = fmt[1].match(cfregex2);\n return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n }\n\n return [l, ff];\n }\n\n function format(fmt, v, o) {\n if (o == null) o = {};\n var sfmt = \"\";\n\n switch (typeof fmt) {\n case \"string\":\n if (fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;else sfmt = fmt;\n break;\n\n case \"number\":\n if (fmt == 14 && o.dateNF) sfmt = o.dateNF;else sfmt = (o.table != null ? o.table : table_fmt)[fmt];\n if (sfmt == null) sfmt = o.table && o.table[default_map[fmt]] || table_fmt[default_map[fmt]];\n if (sfmt == null) sfmt = default_str[fmt] || \"General\";\n break;\n }\n\n if (isgeneral(sfmt, 0)) return general_fmt(v, o);\n if (v instanceof Date) v = datenum_local(v, o.date1904);\n var f = choose_fmt(sfmt, v);\n if (isgeneral(f[1])) return general_fmt(v, o);\n if (v === true) v = \"TRUE\";else if (v === false) v = \"FALSE\";else if (v === \"\" || v == null) return \"\";\n return eval_fmt(f[1], v, o, f[0]);\n }\n\n function load_entry(fmt, idx) {\n if (typeof idx != 'number') {\n idx = +idx || -1;\n\n for (var i = 0; i < 0x0188; ++i) {\n if (table_fmt[i] == undefined) {\n if (idx < 0) idx = i;\n continue;\n }\n\n if (table_fmt[i] == fmt) {\n idx = i;\n break;\n }\n }\n\n if (idx < 0) idx = 0x187;\n }\n\n table_fmt[idx] = fmt;\n return idx;\n }\n\n SSF.load = load_entry;\n SSF._table = table_fmt;\n\n SSF.get_table = function get_table() {\n return table_fmt;\n };\n\n SSF.load_table = function load_table(tbl) {\n for (var i = 0; i != 0x0188; ++i) {\n if (tbl[i] !== undefined) load_entry(tbl[i], i);\n }\n };\n\n SSF.init_table = init_table;\n SSF.format = format;\n };\n\n make_ssf(SSF);\n /* map from xlml named formats to SSF TODO: localize */\n\n var XLMLFormatMap\n /*{[string]:string}*/\n = {\n \"General Number\": \"General\",\n \"General Date\": SSF._table[22],\n \"Long Date\": \"dddd, mmmm dd, yyyy\",\n \"Medium Date\": SSF._table[15],\n \"Short Date\": SSF._table[14],\n \"Long Time\": SSF._table[19],\n \"Medium Time\": SSF._table[18],\n \"Short Time\": SSF._table[20],\n \"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"Fixed\": SSF._table[2],\n \"Standard\": SSF._table[4],\n \"Percent\": SSF._table[10],\n \"Scientific\": SSF._table[11],\n \"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n \"True/False\": '\"True\";\"True\";\"False\";@',\n \"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n };\n var SSFImplicit\n /*{[number]:string}*/\n = {\n \"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n \"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n \"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n \"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"23\": 'General',\n \"24\": 'General',\n \"25\": 'General',\n \"26\": 'General',\n \"27\": 'm/d/yy',\n \"28\": 'm/d/yy',\n \"29\": 'm/d/yy',\n \"30\": 'm/d/yy',\n \"31\": 'm/d/yy',\n \"32\": 'h:mm:ss',\n \"33\": 'h:mm:ss',\n \"34\": 'h:mm:ss',\n \"35\": 'h:mm:ss',\n \"36\": 'm/d/yy',\n \"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n \"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n \"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n \"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n \"50\": 'm/d/yy',\n \"51\": 'm/d/yy',\n \"52\": 'm/d/yy',\n \"53\": 'm/d/yy',\n \"54\": 'm/d/yy',\n \"55\": 'm/d/yy',\n \"56\": 'm/d/yy',\n \"57\": 'm/d/yy',\n \"58\": 'm/d/yy',\n \"59\": '0',\n \"60\": '0.00',\n \"61\": '#,##0',\n \"62\": '#,##0.00',\n \"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n \"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n \"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n \"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"67\": '0%',\n \"68\": '0.00%',\n \"69\": '# ?/?',\n \"70\": '# ??/??',\n \"71\": 'm/d/yy',\n \"72\": 'm/d/yy',\n \"73\": 'd-mmm-yy',\n \"74\": 'd-mmm',\n \"75\": 'mmm-yy',\n \"76\": 'h:mm',\n \"77\": 'h:mm:ss',\n \"78\": 'm/d/yy h:mm',\n \"79\": 'mm:ss',\n \"80\": '[h]:mm:ss',\n \"81\": 'mmss.0'\n };\n /* dateNF parse TODO: move to SSF */\n\n var dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\n\n function dateNF_regex(dateNF) {\n var fmt = typeof dateNF == \"number\" ? SSF._table[dateNF] : dateNF;\n fmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n return new RegExp(\"^\" + fmt + \"$\");\n }\n\n function dateNF_fix(str, dateNF, match) {\n var Y = -1,\n m = -1,\n d = -1,\n H = -1,\n M = -1,\n S = -1;\n (dateNF.match(dateNFregex) || []).forEach(function (n, i) {\n var v = parseInt(match[i + 1], 10);\n\n switch (n.toLowerCase().charAt(0)) {\n case 'y':\n Y = v;\n break;\n\n case 'd':\n d = v;\n break;\n\n case 'h':\n H = v;\n break;\n\n case 's':\n S = v;\n break;\n\n case 'm':\n if (H >= 0) M = v;else m = v;\n break;\n }\n });\n\n if (S >= 0 && M == -1 && m >= 0) {\n M = m;\n m = -1;\n }\n\n var datestr = (\"\" + (Y >= 0 ? Y : new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m >= 1 ? m : 1)).slice(-2) + \"-\" + (\"00\" + (d >= 1 ? d : 1)).slice(-2);\n if (datestr.length == 7) datestr = \"0\" + datestr;\n if (datestr.length == 8) datestr = \"20\" + datestr;\n var timestr = (\"00\" + (H >= 0 ? H : 0)).slice(-2) + \":\" + (\"00\" + (M >= 0 ? M : 0)).slice(-2) + \":\" + (\"00\" + (S >= 0 ? S : 0)).slice(-2);\n if (H == -1 && M == -1 && S == -1) return datestr;\n if (Y == -1 && m == -1 && d == -1) return timestr;\n return datestr + \"T\" + timestr;\n }\n\n var DO_NOT_EXPORT_CFB = true;\n /* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n /* vim: set ts=2: */\n\n /*jshint eqnull:true */\n\n /*exported CFB */\n\n /*global Uint8Array:false, Uint16Array:false */\n\n /* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n\n /* vim: set ts=2: */\n\n /*exported CRC32 */\n\n var CRC32;\n\n (function (factory) {\n /*jshint ignore:start */\n\n /*eslint-disable */\n factory(CRC32 = {});\n /*eslint-enable */\n\n /*jshint ignore:end */\n })(function (CRC32) {\n CRC32.version = '1.2.0';\n /* see perf/crc32table.js */\n\n /*global Int32Array */\n\n function signed_crc_table() {\n var c = 0,\n table = new Array(256);\n\n for (var n = 0; n != 256; ++n) {\n c = n;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n table[n] = c;\n }\n\n return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n }\n\n var T = signed_crc_table();\n\n function crc32_bstr(bstr, seed) {\n var C = seed ^ -1,\n L = bstr.length - 1;\n\n for (var i = 0; i < L;) {\n C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n }\n\n if (i === L) C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i)) & 0xFF];\n return C ^ -1;\n }\n\n function crc32_buf(buf, seed) {\n if (buf.length > 10000) return crc32_buf_8(buf, seed);\n var C = seed ^ -1,\n L = buf.length - 3;\n\n for (var i = 0; i < L;) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n while (i < L + 3) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n return C ^ -1;\n }\n\n function crc32_buf_8(buf, seed) {\n var C = seed ^ -1,\n L = buf.length - 7;\n\n for (var i = 0; i < L;) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n while (i < L + 7) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n return C ^ -1;\n }\n\n function crc32_str(str, seed) {\n var C = seed ^ -1;\n\n for (var i = 0, L = str.length, c, d; i < L;) {\n c = str.charCodeAt(i++);\n\n if (c < 0x80) {\n C = C >>> 8 ^ T[(C ^ c) & 0xFF];\n } else if (c < 0x800) {\n C = C >>> 8 ^ T[(C ^ (192 | c >> 6 & 31)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c & 63)) & 0xFF];\n } else if (c >= 0xD800 && c < 0xE000) {\n c = (c & 1023) + 64;\n d = str.charCodeAt(i++) & 1023;\n C = C >>> 8 ^ T[(C ^ (240 | c >> 8 & 7)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c >> 2 & 63)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | d & 63)) & 0xFF];\n } else {\n C = C >>> 8 ^ T[(C ^ (224 | c >> 12 & 15)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c >> 6 & 63)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c & 63)) & 0xFF];\n }\n }\n\n return C ^ -1;\n }\n\n CRC32.table = T;\n CRC32.bstr = crc32_bstr;\n CRC32.buf = crc32_buf;\n CRC32.str = crc32_str;\n });\n /* [MS-CFB] v20171201 */\n\n\n var CFB = function _CFB() {\n var exports = {};\n exports.version = '1.1.4';\n /* [MS-CFB] 2.6.4 */\n\n function namecmp(l, r) {\n var L = l.split(\"/\"),\n R = r.split(\"/\");\n\n for (var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n if (c = L[i].length - R[i].length) return c;\n if (L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n }\n\n return L.length - R.length;\n }\n\n function dirname(p) {\n if (p.charAt(p.length - 1) == \"/\") return p.slice(0, -1).indexOf(\"/\") === -1 ? p : dirname(p.slice(0, -1));\n var c = p.lastIndexOf(\"/\");\n return c === -1 ? p : p.slice(0, c + 1);\n }\n\n function filename(p) {\n if (p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n var c = p.lastIndexOf(\"/\");\n return c === -1 ? p : p.slice(c + 1);\n }\n /* -------------------------------------------------------------------------- */\n\n /* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n */\n\n /* write JS date to buf as a DOS date */\n\n\n function write_dos_date(buf, date) {\n if (typeof date === \"string\") date = new Date(date);\n var hms = date.getHours();\n hms = hms << 6 | date.getMinutes();\n hms = hms << 5 | date.getSeconds() >>> 1;\n buf.write_shift(2, hms);\n var ymd = date.getFullYear() - 1980;\n ymd = ymd << 4 | date.getMonth() + 1;\n ymd = ymd << 5 | date.getDate();\n buf.write_shift(2, ymd);\n }\n /* read four bytes from buf and interpret as a DOS date */\n\n\n function parse_dos_date(buf) {\n var hms = buf.read_shift(2) & 0xFFFF;\n var ymd = buf.read_shift(2) & 0xFFFF;\n var val = new Date();\n var d = ymd & 0x1F;\n ymd >>>= 5;\n var m = ymd & 0x0F;\n ymd >>>= 4;\n val.setMilliseconds(0);\n val.setFullYear(ymd + 1980);\n val.setMonth(m - 1);\n val.setDate(d);\n var S = hms & 0x1F;\n hms >>>= 5;\n var M = hms & 0x3F;\n hms >>>= 6;\n val.setHours(hms);\n val.setMinutes(M);\n val.setSeconds(S << 1);\n return val;\n }\n\n function parse_extra_field(blob) {\n prep_blob(blob, 0);\n var o = {};\n var flags = 0;\n\n while (blob.l <= blob.length - 4) {\n var type = blob.read_shift(2);\n var sz = blob.read_shift(2),\n tgt = blob.l + sz;\n var p = {};\n\n switch (type) {\n /* UNIX-style Timestamps */\n case 0x5455:\n {\n flags = blob.read_shift(1);\n if (flags & 1) p.mtime = blob.read_shift(4);\n /* for some reason, CD flag corresponds to LFH */\n\n if (sz > 5) {\n if (flags & 2) p.atime = blob.read_shift(4);\n if (flags & 4) p.ctime = blob.read_shift(4);\n }\n\n if (p.mtime) p.mt = new Date(p.mtime * 1000);\n }\n break;\n }\n\n blob.l = tgt;\n o[type] = p;\n }\n\n return o;\n }\n\n var fs;\n\n function get_fs() {\n return fs || (fs = require('fs'));\n }\n\n function parse(file, options) {\n if (file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\n if (file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\n var mver = 3;\n var ssz = 512;\n var nmfs = 0; // number of mini FAT sectors\n\n var difat_sec_cnt = 0;\n var dir_start = 0;\n var minifat_start = 0;\n var difat_start = 0;\n var fat_addrs = []; // locations of FAT sectors\n\n /* [MS-CFB] 2.2 Compound File Header */\n\n var blob = file.slice(0, 512);\n prep_blob(blob, 0);\n /* major version */\n\n var mv = check_get_mver(blob);\n mver = mv[0];\n\n switch (mver) {\n case 3:\n ssz = 512;\n break;\n\n case 4:\n ssz = 4096;\n break;\n\n case 0:\n if (mv[1] == 0) return parse_zip(file, options);\n\n /* falls through */\n\n default:\n throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n }\n /* reprocess header */\n\n\n if (ssz !== 512) {\n blob = file.slice(0, ssz);\n prep_blob(blob, 28\n /* blob.l */\n );\n }\n /* Save header for final object */\n\n\n var header = file.slice(0, ssz);\n check_shifts(blob, mver); // Number of Directory Sectors\n\n var dir_cnt = blob.read_shift(4, 'i');\n if (mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt); // Number of FAT Sectors\n\n blob.l += 4; // First Directory Sector Location\n\n dir_start = blob.read_shift(4, 'i'); // Transaction Signature\n\n blob.l += 4; // Mini Stream Cutoff Size\n\n blob.chk('00100000', 'Mini Stream Cutoff Size: '); // First Mini FAT Sector Location\n\n minifat_start = blob.read_shift(4, 'i'); // Number of Mini FAT Sectors\n\n nmfs = blob.read_shift(4, 'i'); // First DIFAT sector location\n\n difat_start = blob.read_shift(4, 'i'); // Number of DIFAT Sectors\n\n difat_sec_cnt = blob.read_shift(4, 'i'); // Grab FAT Sector Locations\n\n for (var q = -1, j = 0; j < 109; ++j) {\n /* 109 = (512 - blob.l)>>>2; */\n q = blob.read_shift(4, 'i');\n if (q < 0) break;\n fat_addrs[j] = q;\n }\n /** Break the file up into sectors */\n\n\n var sectors = sectorify(file, ssz);\n sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n /** Chains */\n\n var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n sector_list[dir_start].name = \"!Directory\";\n if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\n sector_list[fat_addrs[0]].name = \"!FAT\";\n sector_list.fat_addrs = fat_addrs;\n sector_list.ssz = ssz;\n /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n var files = {},\n Paths = [],\n FileIndex = [],\n FullPaths = [];\n read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n build_full_paths(FileIndex, FullPaths, Paths);\n Paths.shift();\n var o = {\n FileIndex: FileIndex,\n FullPaths: FullPaths\n }; // $FlowIgnore\n\n if (options && options.raw) o.raw = {\n header: header,\n sectors: sectors\n };\n return o;\n } // parse\n\n /* [MS-CFB] 2.2 Compound File Header -- read up to major version */\n\n\n function check_get_mver(blob) {\n if (blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0]; // header signature 8\n\n blob.chk(HEADER_SIGNATURE, 'Header Signature: '); // clsid 16\n //blob.chk(HEADER_CLSID, 'CLSID: ');\n\n blob.l += 16; // minor version 2\n\n var mver = blob.read_shift(2, 'u');\n return [blob.read_shift(2, 'u'), mver];\n }\n\n function check_shifts(blob, mver) {\n var shift = 0x09; // Byte Order\n //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\n blob.l += 2; // Sector Shift\n\n switch (shift = blob.read_shift(2)) {\n case 0x09:\n if (mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift);\n break;\n\n case 0x0c:\n if (mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift);\n break;\n\n default:\n throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n } // Mini Sector Shift\n\n\n blob.chk('0600', 'Mini Sector Shift: '); // Reserved\n\n blob.chk('000000000000', 'Reserved: ');\n }\n /** Break the file up into sectors */\n\n\n function sectorify(file, ssz) {\n var nsectors = Math.ceil(file.length / ssz) - 1;\n var sectors = [];\n\n for (var i = 1; i < nsectors; ++i) {\n sectors[i - 1] = file.slice(i * ssz, (i + 1) * ssz);\n }\n\n sectors[nsectors - 1] = file.slice(nsectors * ssz);\n return sectors;\n }\n /* [MS-CFB] 2.6.4 Red-Black Tree */\n\n\n function build_full_paths(FI, FP, Paths) {\n var i = 0,\n L = 0,\n R = 0,\n C = 0,\n j = 0,\n pl = Paths.length;\n var dad = [],\n q = [];\n\n for (; i < pl; ++i) {\n dad[i] = q[i] = i;\n FP[i] = Paths[i];\n }\n\n for (; j < q.length; ++j) {\n i = q[j];\n L = FI[i].L;\n R = FI[i].R;\n C = FI[i].C;\n\n if (dad[i] === i) {\n if (L !== -1\n /*NOSTREAM*/\n && dad[L] !== L) dad[i] = dad[L];\n if (R !== -1 && dad[R] !== R) dad[i] = dad[R];\n }\n\n if (C !== -1\n /*NOSTREAM*/\n ) dad[C] = i;\n\n if (L !== -1 && i != dad[i]) {\n dad[L] = dad[i];\n if (q.lastIndexOf(L) < j) q.push(L);\n }\n\n if (R !== -1 && i != dad[i]) {\n dad[R] = dad[i];\n if (q.lastIndexOf(R) < j) q.push(R);\n }\n }\n\n for (i = 1; i < pl; ++i) {\n if (dad[i] === i) {\n if (R !== -1\n /*NOSTREAM*/\n && dad[R] !== R) dad[i] = dad[R];else if (L !== -1 && dad[L] !== L) dad[i] = dad[L];\n }\n }\n\n for (i = 1; i < pl; ++i) {\n if (FI[i].type === 0\n /* unknown */\n ) continue;\n j = i;\n if (j != dad[j]) do {\n j = dad[j];\n FP[i] = FP[j] + \"/\" + FP[i];\n } while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n dad[i] = -1;\n }\n\n FP[0] += \"/\";\n\n for (i = 1; i < pl; ++i) {\n if (FI[i].type !== 2\n /* stream */\n ) FP[i] += \"/\";\n }\n }\n\n function get_mfat_entry(entry, payload, mini) {\n var start = entry.start,\n size = entry.size; //return (payload.slice(start*MSSZ, start*MSSZ + size));\n\n var o = [];\n var idx = start;\n\n while (mini && size > 0 && idx >= 0) {\n o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n size -= MSSZ;\n idx = __readInt32LE(mini, idx * 4);\n }\n\n if (o.length === 0) return new_buf(0);\n return bconcat(o).slice(0, entry.size);\n }\n /** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\n\n\n function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\n var q = ENDOFCHAIN;\n\n if (idx === ENDOFCHAIN) {\n if (cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n } else if (idx !== -1\n /*FREESECT*/\n ) {\n var sector = sectors[idx],\n m = (ssz >>> 2) - 1;\n if (!sector) return;\n\n for (var i = 0; i < m; ++i) {\n if ((q = __readInt32LE(sector, i * 4)) === ENDOFCHAIN) break;\n fat_addrs.push(q);\n }\n\n sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);\n }\n }\n /** Follow the linked list of sectors for a given starting point */\n\n\n function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\n var buf = [],\n buf_chain = [];\n if (!chkd) chkd = [];\n var modulus = ssz - 1,\n j = 0,\n jj = 0;\n\n for (j = start; j >= 0;) {\n chkd[j] = true;\n buf[buf.length] = j;\n buf_chain.push(sectors[j]);\n var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n jj = j * 4 & modulus;\n if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n if (!sectors[addr]) break;\n j = __readInt32LE(sectors[addr], jj);\n }\n\n return {\n nodes: buf,\n data: __toBuffer([buf_chain])\n };\n }\n /** Chase down the sector linked lists */\n\n\n function make_sector_list(sectors, dir_start, fat_addrs, ssz) {\n var sl = sectors.length,\n sector_list = [];\n var chkd = [],\n buf = [],\n buf_chain = [];\n var modulus = ssz - 1,\n i = 0,\n j = 0,\n k = 0,\n jj = 0;\n\n for (i = 0; i < sl; ++i) {\n buf = [];\n k = i + dir_start;\n if (k >= sl) k -= sl;\n if (chkd[k]) continue;\n buf_chain = [];\n var seen = [];\n\n for (j = k; j >= 0;) {\n seen[j] = true;\n chkd[j] = true;\n buf[buf.length] = j;\n buf_chain.push(sectors[j]);\n var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n jj = j * 4 & modulus;\n if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n if (!sectors[addr]) break;\n j = __readInt32LE(sectors[addr], jj);\n if (seen[j]) break;\n }\n\n sector_list[k] = {\n nodes: buf,\n data: __toBuffer([buf_chain])\n };\n }\n\n return sector_list;\n }\n /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n\n function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {\n var minifat_store = 0,\n pl = Paths.length ? 2 : 0;\n var sector = sector_list[dir_start].data;\n var i = 0,\n namelen = 0,\n name;\n\n for (; i < sector.length; i += 128) {\n var blob = sector.slice(i, i + 128);\n prep_blob(blob, 64);\n namelen = blob.read_shift(2);\n name = __utf16le(blob, 0, namelen - pl);\n Paths.push(name);\n var o = {\n name: name,\n type: blob.read_shift(1),\n color: blob.read_shift(1),\n L: blob.read_shift(4, 'i'),\n R: blob.read_shift(4, 'i'),\n C: blob.read_shift(4, 'i'),\n clsid: blob.read_shift(16),\n state: blob.read_shift(4, 'i'),\n start: 0,\n size: 0\n };\n var ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n if (ctime !== 0) o.ct = read_date(blob, blob.l - 8);\n var mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n if (mtime !== 0) o.mt = read_date(blob, blob.l - 8);\n o.start = blob.read_shift(4, 'i');\n o.size = blob.read_shift(4, 'i');\n\n if (o.size < 0 && o.start < 0) {\n o.size = o.type = 0;\n o.start = ENDOFCHAIN;\n o.name = \"\";\n }\n\n if (o.type === 5) {\n /* root */\n minifat_store = o.start;\n if (nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n /*minifat_size = o.size;*/\n } else if (o.size >= 4096\n /* MSCSZ */\n ) {\n o.storage = 'fat';\n if (sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n sector_list[o.start].name = o.name;\n o.content = sector_list[o.start].data.slice(0, o.size);\n } else {\n o.storage = 'minifat';\n if (o.size < 0) o.size = 0;else if (minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini] || {}).data);\n }\n }\n\n if (o.content) prep_blob(o.content, 0);\n files[name] = o;\n FileIndex.push(o);\n }\n }\n\n function read_date(blob, offset) {\n return new Date((__readUInt32LE(blob, offset + 4) / 1e7 * Math.pow(2, 32) + __readUInt32LE(blob, offset) / 1e7 - 11644473600) * 1000);\n }\n\n function read_file(filename, options) {\n get_fs();\n return parse(fs.readFileSync(filename), options);\n }\n\n function read(blob, options) {\n switch (options && options.type || \"base64\") {\n case \"file\":\n return read_file(blob, options);\n\n case \"base64\":\n return parse(s2a(Base64.decode(blob)), options);\n\n case \"binary\":\n return parse(s2a(blob), options);\n }\n\n return parse(blob, options);\n }\n\n function init_cfb(cfb, opts) {\n var o = opts || {},\n root = o.root || \"Root Entry\";\n if (!cfb.FullPaths) cfb.FullPaths = [];\n if (!cfb.FileIndex) cfb.FileIndex = [];\n if (cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\n if (cfb.FullPaths.length === 0) {\n cfb.FullPaths[0] = root + \"/\";\n cfb.FileIndex[0] = {\n name: root,\n type: 5\n };\n }\n\n if (o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n seed_cfb(cfb);\n }\n\n function seed_cfb(cfb) {\n var nm = \"\\x01Sh33tJ5\";\n if (CFB.find(cfb, \"/\" + nm)) return;\n var p = new_buf(4);\n p[0] = 55;\n p[1] = p[3] = 50;\n p[2] = 54;\n cfb.FileIndex.push({\n name: nm,\n type: 2,\n content: p,\n size: 4,\n L: 69,\n R: 69,\n C: 69\n });\n cfb.FullPaths.push(cfb.FullPaths[0] + nm);\n rebuild_cfb(cfb);\n }\n\n function rebuild_cfb(cfb, f) {\n init_cfb(cfb);\n var gc = false,\n s = false;\n\n for (var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n var _file = cfb.FileIndex[i];\n\n switch (_file.type) {\n case 0:\n if (s) gc = true;else {\n cfb.FileIndex.pop();\n cfb.FullPaths.pop();\n }\n break;\n\n case 1:\n case 2:\n case 5:\n s = true;\n if (isNaN(_file.R * _file.L * _file.C)) gc = true;\n if (_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n break;\n\n default:\n gc = true;\n break;\n }\n }\n\n if (!gc && !f) return;\n var now = new Date(1987, 1, 19),\n j = 0;\n var data = [];\n\n for (i = 0; i < cfb.FullPaths.length; ++i) {\n if (cfb.FileIndex[i].type === 0) continue;\n data.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n }\n\n for (i = 0; i < data.length; ++i) {\n var dad = dirname(data[i][0]);\n s = false;\n\n for (j = 0; j < data.length; ++j) {\n if (data[j][0] === dad) s = true;\n }\n\n if (!s) data.push([dad, {\n name: filename(dad).replace(\"/\", \"\"),\n type: 1,\n clsid: HEADER_CLSID,\n ct: now,\n mt: now,\n content: null\n }]);\n }\n\n data.sort(function (x, y) {\n return namecmp(x[0], y[0]);\n });\n cfb.FullPaths = [];\n cfb.FileIndex = [];\n\n for (i = 0; i < data.length; ++i) {\n cfb.FullPaths[i] = data[i][0];\n cfb.FileIndex[i] = data[i][1];\n }\n\n for (i = 0; i < data.length; ++i) {\n var elt = cfb.FileIndex[i];\n var nm = cfb.FullPaths[i];\n elt.name = filename(nm).replace(\"/\", \"\");\n elt.L = elt.R = elt.C = -(elt.color = 1);\n elt.size = elt.content ? elt.content.length : 0;\n elt.start = 0;\n elt.clsid = elt.clsid || HEADER_CLSID;\n\n if (i === 0) {\n elt.C = data.length > 1 ? 1 : -1;\n elt.size = 0;\n elt.type = 5;\n } else if (nm.slice(-1) == \"/\") {\n for (j = i + 1; j < data.length; ++j) {\n if (dirname(cfb.FullPaths[j]) == nm) break;\n }\n\n elt.C = j >= data.length ? -1 : j;\n\n for (j = i + 1; j < data.length; ++j) {\n if (dirname(cfb.FullPaths[j]) == dirname(nm)) break;\n }\n\n elt.R = j >= data.length ? -1 : j;\n elt.type = 1;\n } else {\n if (dirname(cfb.FullPaths[i + 1] || \"\") == dirname(nm)) elt.R = i + 1;\n elt.type = 2;\n }\n }\n }\n\n function _write(cfb, options) {\n var _opts = options || {};\n\n rebuild_cfb(cfb);\n if (_opts.fileType == 'zip') return write_zip(cfb, _opts);\n\n var L = function (cfb) {\n var mini_size = 0,\n fat_size = 0;\n\n for (var i = 0; i < cfb.FileIndex.length; ++i) {\n var file = cfb.FileIndex[i];\n if (!file.content) continue;\n var flen = file.content.length;\n\n if (flen > 0) {\n if (flen < 0x1000) mini_size += flen + 0x3F >> 6;else fat_size += flen + 0x01FF >> 9;\n }\n }\n\n var dir_cnt = cfb.FullPaths.length + 3 >> 2;\n var mini_cnt = mini_size + 7 >> 3;\n var mfat_cnt = mini_size + 0x7F >> 7;\n var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n var fat_cnt = fat_base + 0x7F >> 7;\n var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n\n while (fat_base + fat_cnt + difat_cnt + 0x7F >> 7 > fat_cnt) {\n difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n }\n\n var L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n cfb.FileIndex[0].size = mini_size << 6;\n L[7] = (cfb.FileIndex[0].start = L[0] + L[1] + L[2] + L[3] + L[4] + L[5]) + (L[6] + 7 >> 3);\n return L;\n }(cfb);\n\n var o = new_buf(L[7] << 9);\n var i = 0,\n T = 0;\n {\n for (i = 0; i < 8; ++i) {\n o.write_shift(1, HEADER_SIG[i]);\n }\n\n for (i = 0; i < 8; ++i) {\n o.write_shift(2, 0);\n }\n\n o.write_shift(2, 0x003E);\n o.write_shift(2, 0x0003);\n o.write_shift(2, 0xFFFE);\n o.write_shift(2, 0x0009);\n o.write_shift(2, 0x0006);\n\n for (i = 0; i < 3; ++i) {\n o.write_shift(2, 0);\n }\n\n o.write_shift(4, 0);\n o.write_shift(4, L[2]);\n o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n o.write_shift(4, 0);\n o.write_shift(4, 1 << 12);\n o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1 : ENDOFCHAIN);\n o.write_shift(4, L[3]);\n o.write_shift(-4, L[1] ? L[0] - 1 : ENDOFCHAIN);\n o.write_shift(4, L[1]);\n\n for (i = 0; i < 109; ++i) {\n o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n }\n }\n\n if (L[1]) {\n for (T = 0; T < L[1]; ++T) {\n for (; i < 236 + T * 127; ++i) {\n o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n }\n\n o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n }\n }\n\n var chainit = function chainit(w) {\n for (T += w; i < T - 1; ++i) {\n o.write_shift(-4, i + 1);\n }\n\n if (w) {\n ++i;\n o.write_shift(-4, ENDOFCHAIN);\n }\n };\n\n T = i = 0;\n\n for (T += L[1]; i < T; ++i) {\n o.write_shift(-4, consts.DIFSECT);\n }\n\n for (T += L[2]; i < T; ++i) {\n o.write_shift(-4, consts.FATSECT);\n }\n\n chainit(L[3]);\n chainit(L[4]);\n var j = 0,\n flen = 0;\n var file = cfb.FileIndex[0];\n\n for (; j < cfb.FileIndex.length; ++j) {\n file = cfb.FileIndex[j];\n if (!file.content) continue;\n flen = file.content.length;\n if (flen < 0x1000) continue;\n file.start = T;\n chainit(flen + 0x01FF >> 9);\n }\n\n chainit(L[6] + 7 >> 3);\n\n while (o.l & 0x1FF) {\n o.write_shift(-4, consts.ENDOFCHAIN);\n }\n\n T = i = 0;\n\n for (j = 0; j < cfb.FileIndex.length; ++j) {\n file = cfb.FileIndex[j];\n if (!file.content) continue;\n flen = file.content.length;\n if (!flen || flen >= 0x1000) continue;\n file.start = T;\n chainit(flen + 0x3F >> 6);\n }\n\n while (o.l & 0x1FF) {\n o.write_shift(-4, consts.ENDOFCHAIN);\n }\n\n for (i = 0; i < L[4] << 2; ++i) {\n var nm = cfb.FullPaths[i];\n\n if (!nm || nm.length === 0) {\n for (j = 0; j < 17; ++j) {\n o.write_shift(4, 0);\n }\n\n for (j = 0; j < 3; ++j) {\n o.write_shift(4, -1);\n }\n\n for (j = 0; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n\n continue;\n }\n\n file = cfb.FileIndex[i];\n if (i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\n var _nm = i === 0 && _opts.root || file.name;\n\n flen = 2 * (_nm.length + 1);\n o.write_shift(64, _nm, \"utf16le\");\n o.write_shift(2, flen);\n o.write_shift(1, file.type);\n o.write_shift(1, file.color);\n o.write_shift(-4, file.L);\n o.write_shift(-4, file.R);\n o.write_shift(-4, file.C);\n if (!file.clsid) for (j = 0; j < 4; ++j) {\n o.write_shift(4, 0);\n } else o.write_shift(16, file.clsid, \"hex\");\n o.write_shift(4, file.state || 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, file.start);\n o.write_shift(4, file.size);\n o.write_shift(4, 0);\n }\n\n for (i = 1; i < cfb.FileIndex.length; ++i) {\n file = cfb.FileIndex[i];\n\n if (file.size >= 0x1000) {\n o.l = file.start + 1 << 9;\n\n for (j = 0; j < file.size; ++j) {\n o.write_shift(1, file.content[j]);\n }\n\n for (; j & 0x1FF; ++j) {\n o.write_shift(1, 0);\n }\n }\n }\n\n for (i = 1; i < cfb.FileIndex.length; ++i) {\n file = cfb.FileIndex[i];\n\n if (file.size > 0 && file.size < 0x1000) {\n for (j = 0; j < file.size; ++j) {\n o.write_shift(1, file.content[j]);\n }\n\n for (; j & 0x3F; ++j) {\n o.write_shift(1, 0);\n }\n }\n }\n\n while (o.l < o.length) {\n o.write_shift(1, 0);\n }\n\n return o;\n }\n /* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\n\n\n function find(cfb, path) {\n var UCFullPaths = cfb.FullPaths.map(function (x) {\n return x.toUpperCase();\n });\n var UCPaths = UCFullPaths.map(function (x) {\n var y = x.split(\"/\");\n return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)];\n });\n var k = false;\n\n if (path.charCodeAt(0) === 47\n /* \"/\" */\n ) {\n k = true;\n path = UCFullPaths[0].slice(0, -1) + path;\n } else k = path.indexOf(\"/\") !== -1;\n\n var UCPath = path.toUpperCase();\n var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n if (w !== -1) return cfb.FileIndex[w];\n var m = !UCPath.match(chr1);\n UCPath = UCPath.replace(chr0, '');\n if (m) UCPath = UCPath.replace(chr1, '!');\n\n for (w = 0; w < UCFullPaths.length; ++w) {\n if ((m ? UCFullPaths[w].replace(chr1, '!') : UCFullPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n if ((m ? UCPaths[w].replace(chr1, '!') : UCPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n }\n\n return null;\n }\n /** CFB Constants */\n\n\n var MSSZ = 64;\n /* Mini Sector Size = 1<<6 */\n //var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n\n /* 2.1 Compound File Sector Numbers and Types */\n\n var ENDOFCHAIN = -2;\n /* 2.2 Compound File Header */\n\n var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\n var HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\n var HEADER_CLSID = '00000000000000000000000000000000';\n var consts = {\n /* 2.1 Compund File Sector Numbers and Types */\n MAXREGSECT: -6,\n DIFSECT: -4,\n FATSECT: -3,\n ENDOFCHAIN: ENDOFCHAIN,\n FREESECT: -1,\n\n /* 2.2 Compound File Header */\n HEADER_SIGNATURE: HEADER_SIGNATURE,\n HEADER_MINOR_VERSION: '3e00',\n MAXREGSID: -6,\n NOSTREAM: -1,\n HEADER_CLSID: HEADER_CLSID,\n\n /* 2.6.1 Compound File Directory Entry */\n EntryTypes: ['unknown', 'storage', 'stream', 'lockbytes', 'property', 'root']\n };\n\n function write_file(cfb, filename, options) {\n get_fs();\n\n var o = _write(cfb, options);\n\n fs.writeFileSync(filename, o);\n }\n\n function a2s(o) {\n var out = new Array(o.length);\n\n for (var i = 0; i < o.length; ++i) {\n out[i] = String.fromCharCode(o[i]);\n }\n\n return out.join(\"\");\n }\n\n function write(cfb, options) {\n var o = _write(cfb, options);\n\n switch (options && options.type) {\n case \"file\":\n get_fs();\n fs.writeFileSync(options.filename, o);\n return o;\n\n case \"binary\":\n return a2s(o);\n\n case \"base64\":\n return Base64.encode(a2s(o));\n }\n\n return o;\n }\n /* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\n\n\n var _zlib;\n\n function use_zlib(zlib) {\n try {\n var InflateRaw = zlib.InflateRaw;\n var InflRaw = new InflateRaw();\n\n InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\n if (InflRaw.bytesRead) _zlib = zlib;else throw new Error(\"zlib does not expose bytesRead\");\n } catch (e) {\n console.error(\"cannot use native zlib: \" + (e.message || e));\n }\n }\n\n function _inflateRawSync(payload, usz) {\n if (!_zlib) return _inflate(payload, usz);\n var InflateRaw = _zlib.InflateRaw;\n var InflRaw = new InflateRaw();\n\n var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\n payload.l += InflRaw.bytesRead;\n return out;\n }\n\n function _deflateRawSync(payload) {\n return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n }\n\n var CLEN_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n /* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\n\n var LEN_LN = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258];\n /* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\n\n var DST_LN = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577];\n\n function bit_swap_8(n) {\n var t = (n << 1 | n << 11) & 0x22110 | (n << 5 | n << 15) & 0x88440;\n return (t >> 16 | t >> 8 | t) & 0xFF;\n }\n\n var use_typed_arrays = typeof Uint8Array !== 'undefined';\n var bitswap8 = use_typed_arrays ? new Uint8Array(1 << 8) : [];\n\n for (var q = 0; q < 1 << 8; ++q) {\n bitswap8[q] = bit_swap_8(q);\n }\n\n function bit_swap_n(n, b) {\n var rev = bitswap8[n & 0xFF];\n if (b <= 8) return rev >>> 8 - b;\n rev = rev << 8 | bitswap8[n >> 8 & 0xFF];\n if (b <= 16) return rev >>> 16 - b;\n rev = rev << 8 | bitswap8[n >> 16 & 0xFF];\n return rev >>> 24 - b;\n }\n /* helpers for unaligned bit reads */\n\n\n function read_bits_2(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 6 ? 0 : buf[h + 1] << 8)) >>> w & 0x03;\n }\n\n function read_bits_3(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 5 ? 0 : buf[h + 1] << 8)) >>> w & 0x07;\n }\n\n function read_bits_4(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 4 ? 0 : buf[h + 1] << 8)) >>> w & 0x0F;\n }\n\n function read_bits_5(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 3 ? 0 : buf[h + 1] << 8)) >>> w & 0x1F;\n }\n\n function read_bits_7(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 1 ? 0 : buf[h + 1] << 8)) >>> w & 0x7F;\n }\n /* works up to n = 3 * 8 + 1 = 25 */\n\n\n function read_bits_n(buf, bl, n) {\n var w = bl & 7,\n h = bl >>> 3,\n f = (1 << n) - 1;\n var v = buf[h] >>> w;\n if (n < 8 - w) return v & f;\n v |= buf[h + 1] << 8 - w;\n if (n < 16 - w) return v & f;\n v |= buf[h + 2] << 16 - w;\n if (n < 24 - w) return v & f;\n v |= buf[h + 3] << 24 - w;\n return v & f;\n }\n /* until ArrayBuffer#realloc is a thing, fake a realloc */\n\n\n function realloc(b, sz) {\n var L = b.length,\n M = 2 * L > sz ? 2 * L : sz + 5,\n i = 0;\n if (L >= sz) return b;\n\n if (has_buf) {\n var o = new_unsafe_buf(M); // $FlowIgnore\n\n if (b.copy) b.copy(o);else for (; i < b.length; ++i) {\n o[i] = b[i];\n }\n return o;\n } else if (use_typed_arrays) {\n var a = new Uint8Array(M);\n if (a.set) a.set(b);else for (; i < b.length; ++i) {\n a[i] = b[i];\n }\n return a;\n }\n\n b.length = M;\n return b;\n }\n /* zero-filled arrays for older browsers */\n\n\n function zero_fill_array(n) {\n var o = new Array(n);\n\n for (var i = 0; i < n; ++i) {\n o[i] = 0;\n }\n\n return o;\n }\n\n var _deflate = function () {\n var _deflateRaw = function () {\n return function deflateRaw(data, out) {\n var boff = 0;\n\n while (boff < data.length) {\n var L = Math.min(0xFFFF, data.length - boff);\n var h = boff + L == data.length;\n /* TODO: this is only type 0 stored */\n\n out.write_shift(1, +h);\n out.write_shift(2, L);\n out.write_shift(2, ~L & 0xFFFF);\n\n while (L-- > 0) {\n out[out.l++] = data[boff++];\n }\n }\n\n return out.l;\n };\n }();\n\n return function (data) {\n var buf = new_buf(50 + Math.floor(data.length * 1.1));\n\n var off = _deflateRaw(data, buf);\n\n return buf.slice(0, off);\n };\n }();\n /* modified inflate function also moves original read head */\n\n /* build tree (used for literals and lengths) */\n\n\n function build_tree(clens, cmap, MAX) {\n var maxlen = 1,\n w = 0,\n i = 0,\n j = 0,\n ccode = 0,\n L = clens.length;\n var bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n for (i = 0; i < 32; ++i) {\n bl_count[i] = 0;\n }\n\n for (i = L; i < MAX; ++i) {\n clens[i] = 0;\n }\n\n L = clens.length;\n var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n /* build code tree */\n\n for (i = 0; i < L; ++i) {\n bl_count[w = clens[i]]++;\n if (maxlen < w) maxlen = w;\n ctree[i] = 0;\n }\n\n bl_count[0] = 0;\n\n for (i = 1; i <= maxlen; ++i) {\n bl_count[i + 16] = ccode = ccode + bl_count[i - 1] << 1;\n }\n\n for (i = 0; i < L; ++i) {\n ccode = clens[i];\n if (ccode != 0) ctree[i] = bl_count[ccode + 16]++;\n }\n /* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\n\n var cleni = 0;\n\n for (i = 0; i < L; ++i) {\n cleni = clens[i];\n\n if (cleni != 0) {\n ccode = bit_swap_n(ctree[i], maxlen) >> maxlen - cleni;\n\n for (j = (1 << maxlen + 4 - cleni) - 1; j >= 0; --j) {\n cmap[ccode | j << cleni] = cleni & 15 | i << 4;\n }\n }\n }\n\n return maxlen;\n }\n\n var fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\n var fix_dmap = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n if (!use_typed_arrays) {\n for (var i = 0; i < 512; ++i) {\n fix_lmap[i] = 0;\n }\n\n for (i = 0; i < 32; ++i) {\n fix_dmap[i] = 0;\n }\n }\n\n (function () {\n var dlens = [];\n var i = 0;\n\n for (; i < 32; i++) {\n dlens.push(5);\n }\n\n build_tree(dlens, fix_dmap, 32);\n var clens = [];\n i = 0;\n\n for (; i <= 143; i++) {\n clens.push(8);\n }\n\n for (; i <= 255; i++) {\n clens.push(9);\n }\n\n for (; i <= 279; i++) {\n clens.push(7);\n }\n\n for (; i <= 287; i++) {\n clens.push(8);\n }\n\n build_tree(clens, fix_lmap, 288);\n })();\n\n var dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n var dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n var dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\n var dyn_len_1 = 1,\n dyn_len_2 = 1;\n /* 5.5.3 Expanding Huffman Codes */\n\n function dyn(data, boff) {\n /* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n var _HLIT = read_bits_5(data, boff) + 257;\n\n boff += 5;\n\n var _HDIST = read_bits_5(data, boff) + 1;\n\n boff += 5;\n\n var _HCLEN = read_bits_4(data, boff) + 4;\n\n boff += 4;\n var w = 0;\n /* grab and store code lengths */\n\n var clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n var ctree = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n var maxlen = 1;\n var bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n var next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n var L = clens.length;\n /* 19 */\n\n for (var i = 0; i < _HCLEN; ++i) {\n clens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n if (maxlen < w) maxlen = w;\n bl_count[w]++;\n boff += 3;\n }\n /* build code tree */\n\n\n var ccode = 0;\n bl_count[0] = 0;\n\n for (i = 1; i <= maxlen; ++i) {\n next_code[i] = ccode = ccode + bl_count[i - 1] << 1;\n }\n\n for (i = 0; i < L; ++i) {\n if ((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n }\n /* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\n\n var cleni = 0;\n\n for (i = 0; i < L; ++i) {\n cleni = clens[i];\n\n if (cleni != 0) {\n ccode = bitswap8[ctree[i]] >> 8 - cleni;\n\n for (var j = (1 << 7 - cleni) - 1; j >= 0; --j) {\n dyn_cmap[ccode | j << cleni] = cleni & 7 | i << 3;\n }\n }\n }\n /* read literal and dist codes at once */\n\n\n var hcodes = [];\n maxlen = 1;\n\n for (; hcodes.length < _HLIT + _HDIST;) {\n ccode = dyn_cmap[read_bits_7(data, boff)];\n boff += ccode & 7;\n\n switch (ccode >>>= 3) {\n case 16:\n w = 3 + read_bits_2(data, boff);\n boff += 2;\n ccode = hcodes[hcodes.length - 1];\n\n while (w-- > 0) {\n hcodes.push(ccode);\n }\n\n break;\n\n case 17:\n w = 3 + read_bits_3(data, boff);\n boff += 3;\n\n while (w-- > 0) {\n hcodes.push(0);\n }\n\n break;\n\n case 18:\n w = 11 + read_bits_7(data, boff);\n boff += 7;\n\n while (w-- > 0) {\n hcodes.push(0);\n }\n\n break;\n\n default:\n hcodes.push(ccode);\n if (maxlen < ccode) maxlen = ccode;\n break;\n }\n }\n /* build literal / length trees */\n\n\n var h1 = hcodes.slice(0, _HLIT),\n h2 = hcodes.slice(_HLIT);\n\n for (i = _HLIT; i < 286; ++i) {\n h1[i] = 0;\n }\n\n for (i = _HDIST; i < 30; ++i) {\n h2[i] = 0;\n }\n\n dyn_len_1 = build_tree(h1, dyn_lmap, 286);\n dyn_len_2 = build_tree(h2, dyn_dmap, 30);\n return boff;\n }\n /* return [ data, bytesRead ] */\n\n\n function inflate(data, usz) {\n /* shortcircuit for empty buffer [0x03, 0x00] */\n if (data[0] == 3 && !(data[1] & 0x3)) {\n return [new_raw_buf(usz), 2];\n }\n /* bit offset */\n\n\n var boff = 0;\n /* header includes final bit and type bits */\n\n var header = 0;\n var outbuf = new_unsafe_buf(usz ? usz : 1 << 18);\n var woff = 0;\n var OL = outbuf.length >>> 0;\n var max_len_1 = 0,\n max_len_2 = 0;\n\n while ((header & 1) == 0) {\n header = read_bits_3(data, boff);\n boff += 3;\n\n if (header >>> 1 == 0) {\n /* Stored block */\n if (boff & 7) boff += 8 - (boff & 7);\n /* 2 bytes sz, 2 bytes bit inverse */\n\n var sz = data[boff >>> 3] | data[(boff >>> 3) + 1] << 8;\n boff += 32;\n /* push sz bytes */\n\n if (!usz && OL < woff + sz) {\n outbuf = realloc(outbuf, woff + sz);\n OL = outbuf.length;\n }\n\n if (typeof data.copy === 'function') {\n // $FlowIgnore\n data.copy(outbuf, woff, boff >>> 3, (boff >>> 3) + sz);\n woff += sz;\n boff += 8 * sz;\n } else while (sz-- > 0) {\n outbuf[woff++] = data[boff >>> 3];\n boff += 8;\n }\n\n continue;\n } else if (header >>> 1 == 1) {\n /* Fixed Huffman */\n max_len_1 = 9;\n max_len_2 = 5;\n } else {\n /* Dynamic Huffman */\n boff = dyn(data, boff);\n max_len_1 = dyn_len_1;\n max_len_2 = dyn_len_2;\n }\n\n if (!usz && OL < woff + 32767) {\n outbuf = realloc(outbuf, woff + 32767);\n OL = outbuf.length;\n }\n\n for (;;) {\n // while(true) is apparently out of vogue in modern JS circles\n\n /* ingest code and move read head */\n var bits = read_bits_n(data, boff, max_len_1);\n var code = header >>> 1 == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n boff += code & 15;\n code >>>= 4;\n /* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\n if ((code >>> 8 & 0xFF) === 0) outbuf[woff++] = code;else if (code == 256) break;else {\n code -= 257;\n var len_eb = code < 8 ? 0 : code - 4 >> 2;\n if (len_eb > 5) len_eb = 0;\n var tgt = woff + LEN_LN[code];\n /* length extra bits */\n\n if (len_eb > 0) {\n tgt += read_bits_n(data, boff, len_eb);\n boff += len_eb;\n }\n /* dist code */\n\n\n bits = read_bits_n(data, boff, max_len_2);\n code = header >>> 1 == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n boff += code & 15;\n code >>>= 4;\n var dst_eb = code < 4 ? 0 : code - 2 >> 1;\n var dst = DST_LN[code];\n /* dist extra bits */\n\n if (dst_eb > 0) {\n dst += read_bits_n(data, boff, dst_eb);\n boff += dst_eb;\n }\n /* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\n\n if (!usz && OL < tgt) {\n outbuf = realloc(outbuf, tgt);\n OL = outbuf.length;\n }\n\n while (woff < tgt) {\n outbuf[woff] = outbuf[woff - dst];\n ++woff;\n }\n }\n }\n }\n\n return [usz ? outbuf : outbuf.slice(0, woff), boff + 7 >>> 3];\n }\n\n function _inflate(payload, usz) {\n var data = payload.slice(payload.l || 0);\n var out = inflate(data, usz);\n payload.l += out[1];\n return out[0];\n }\n\n function warn_or_throw(wrn, msg) {\n if (wrn) {\n if (typeof console !== 'undefined') console.error(msg);\n } else throw new Error(msg);\n }\n\n function parse_zip(file, options) {\n var blob = file;\n prep_blob(blob, 0);\n var FileIndex = [],\n FullPaths = [];\n var o = {\n FileIndex: FileIndex,\n FullPaths: FullPaths\n };\n init_cfb(o, {\n root: options.root\n });\n /* find end of central directory, start just after signature */\n\n var i = blob.length - 4;\n\n while ((blob[i] != 0x50 || blob[i + 1] != 0x4b || blob[i + 2] != 0x05 || blob[i + 3] != 0x06) && i >= 0) {\n --i;\n }\n\n blob.l = i + 4;\n /* parse end of central directory */\n\n blob.l += 4;\n var fcnt = blob.read_shift(2);\n blob.l += 6;\n var start_cd = blob.read_shift(4);\n /* parse central directory */\n\n blob.l = start_cd;\n\n for (i = 0; i < fcnt; ++i) {\n /* trust local file header instead of CD entry */\n blob.l += 20;\n var csz = blob.read_shift(4);\n var usz = blob.read_shift(4);\n var namelen = blob.read_shift(2);\n var efsz = blob.read_shift(2);\n var fcsz = blob.read_shift(2);\n blob.l += 8;\n var offset = blob.read_shift(4);\n var EF = parse_extra_field(blob.slice(blob.l + namelen, blob.l + namelen + efsz));\n blob.l += namelen + efsz + fcsz;\n var L = blob.l;\n blob.l = offset + 4;\n parse_local_file(blob, csz, usz, o, EF);\n blob.l = L;\n }\n\n return o;\n }\n /* head starts just after local file header signature */\n\n\n function parse_local_file(blob, csz, usz, o, EF) {\n /* [local file header] */\n blob.l += 2;\n var flags = blob.read_shift(2);\n var meth = blob.read_shift(2);\n var date = parse_dos_date(blob);\n if (flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n var crc32 = blob.read_shift(4);\n\n var _csz = blob.read_shift(4);\n\n var _usz = blob.read_shift(4);\n\n var namelen = blob.read_shift(2);\n var efsz = blob.read_shift(2); // TODO: flags & (1<<11) // UTF8\n\n var name = \"\";\n\n for (var i = 0; i < namelen; ++i) {\n name += String.fromCharCode(blob[blob.l++]);\n }\n\n if (efsz) {\n var ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));\n if ((ef[0x5455] || {}).mt) date = ef[0x5455].mt;\n if (((EF || {})[0x5455] || {}).mt) date = EF[0x5455].mt;\n }\n\n blob.l += efsz;\n /* [encryption header] */\n\n /* [file data] */\n\n var data = blob.slice(blob.l, blob.l + _csz);\n\n switch (meth) {\n case 8:\n data = _inflateRawSync(blob, _usz);\n break;\n\n case 0:\n break;\n\n default:\n throw new Error(\"Unsupported ZIP Compression method \" + meth);\n }\n /* [data descriptor] */\n\n\n var wrn = false;\n\n if (flags & 8) {\n crc32 = blob.read_shift(4);\n\n if (crc32 == 0x08074b50) {\n crc32 = blob.read_shift(4);\n wrn = true;\n }\n\n _csz = blob.read_shift(4);\n _usz = blob.read_shift(4);\n }\n\n if (_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n if (_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\n var _crc32 = CRC32.buf(data, 0);\n\n if (crc32 >> 0 != _crc32 >> 0) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n cfb_add(o, name, data, {\n unsafe: true,\n mt: date\n });\n }\n\n function write_zip(cfb, options) {\n var _opts = options || {};\n\n var out = [],\n cdirs = [];\n var o = new_buf(1);\n var method = _opts.compression ? 8 : 0,\n flags = 0;\n var desc = false;\n if (desc) flags |= 8;\n var i = 0,\n j = 0;\n var start_cd = 0,\n fcnt = 0;\n var root = cfb.FullPaths[0],\n fp = root,\n fi = cfb.FileIndex[0];\n var crcs = [];\n var sz_cd = 0;\n\n for (i = 1; i < cfb.FullPaths.length; ++i) {\n fp = cfb.FullPaths[i].slice(root.length);\n fi = cfb.FileIndex[i];\n if (!fi.size || !fi.content || fp == \"\\x01Sh33tJ5\") continue;\n var start = start_cd;\n /* TODO: CP437 filename */\n\n var namebuf = new_buf(fp.length);\n\n for (j = 0; j < fp.length; ++j) {\n namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n }\n\n namebuf = namebuf.slice(0, namebuf.l);\n crcs[fcnt] = CRC32.buf(fi.content, 0);\n var outbuf = fi.content;\n if (method == 8) outbuf = _deflateRawSync(outbuf);\n /* local file header */\n\n o = new_buf(30);\n o.write_shift(4, 0x04034b50);\n o.write_shift(2, 20);\n o.write_shift(2, flags);\n o.write_shift(2, method);\n /* TODO: last mod file time/date */\n\n if (fi.mt) write_dos_date(o, fi.mt);else o.write_shift(4, 0);\n o.write_shift(-4, flags & 8 ? 0 : crcs[fcnt]);\n o.write_shift(4, flags & 8 ? 0 : outbuf.length);\n o.write_shift(4, flags & 8 ? 0 : fi.content.length);\n o.write_shift(2, namebuf.length);\n o.write_shift(2, 0);\n start_cd += o.length;\n out.push(o);\n start_cd += namebuf.length;\n out.push(namebuf);\n /* TODO: encryption header ? */\n\n start_cd += outbuf.length;\n out.push(outbuf);\n /* data descriptor */\n\n if (flags & 8) {\n o = new_buf(12);\n o.write_shift(-4, crcs[fcnt]);\n o.write_shift(4, outbuf.length);\n o.write_shift(4, fi.content.length);\n start_cd += o.l;\n out.push(o);\n }\n /* central directory */\n\n\n o = new_buf(46);\n o.write_shift(4, 0x02014b50);\n o.write_shift(2, 0);\n o.write_shift(2, 20);\n o.write_shift(2, flags);\n o.write_shift(2, method);\n o.write_shift(4, 0);\n /* TODO: last mod file time/date */\n\n o.write_shift(-4, crcs[fcnt]);\n o.write_shift(4, outbuf.length);\n o.write_shift(4, fi.content.length);\n o.write_shift(2, namebuf.length);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(4, 0);\n o.write_shift(4, start);\n sz_cd += o.l;\n cdirs.push(o);\n sz_cd += namebuf.length;\n cdirs.push(namebuf);\n ++fcnt;\n }\n /* end of central directory */\n\n\n o = new_buf(22);\n o.write_shift(4, 0x06054b50);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, fcnt);\n o.write_shift(2, fcnt);\n o.write_shift(4, sz_cd);\n o.write_shift(4, start_cd);\n o.write_shift(2, 0);\n return bconcat([bconcat(out), bconcat(cdirs), o]);\n }\n\n function cfb_new(opts) {\n var o = {};\n init_cfb(o, opts);\n return o;\n }\n\n function cfb_add(cfb, name, content, opts) {\n var unsafe = opts && opts.unsafe;\n if (!unsafe) init_cfb(cfb);\n var file = !unsafe && CFB.find(cfb, name);\n\n if (!file) {\n var fpath = cfb.FullPaths[0];\n if (name.slice(0, fpath.length) == fpath) fpath = name;else {\n if (fpath.slice(-1) != \"/\") fpath += \"/\";\n fpath = (fpath + name).replace(\"//\", \"/\");\n }\n file = {\n name: filename(name),\n type: 2\n };\n cfb.FileIndex.push(file);\n cfb.FullPaths.push(fpath);\n if (!unsafe) CFB.utils.cfb_gc(cfb);\n }\n\n file.content = content;\n file.size = content ? content.length : 0;\n\n if (opts) {\n if (opts.CLSID) file.clsid = opts.CLSID;\n if (opts.mt) file.mt = opts.mt;\n if (opts.ct) file.ct = opts.ct;\n }\n\n return file;\n }\n\n function cfb_del(cfb, name) {\n init_cfb(cfb);\n var file = CFB.find(cfb, name);\n if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n if (cfb.FileIndex[j] == file) {\n cfb.FileIndex.splice(j, 1);\n cfb.FullPaths.splice(j, 1);\n return true;\n }\n }\n return false;\n }\n\n function cfb_mov(cfb, old_name, new_name) {\n init_cfb(cfb);\n var file = CFB.find(cfb, old_name);\n if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n if (cfb.FileIndex[j] == file) {\n cfb.FileIndex[j].name = filename(new_name);\n cfb.FullPaths[j] = new_name;\n return true;\n }\n }\n return false;\n }\n\n function cfb_gc(cfb) {\n rebuild_cfb(cfb, true);\n }\n\n exports.find = find;\n exports.read = read;\n exports.parse = parse;\n exports.write = write;\n exports.writeFile = write_file;\n exports.utils = {\n cfb_new: cfb_new,\n cfb_add: cfb_add,\n cfb_del: cfb_del,\n cfb_mov: cfb_mov,\n cfb_gc: cfb_gc,\n ReadShift: ReadShift,\n CheckField: CheckField,\n prep_blob: prep_blob,\n bconcat: bconcat,\n use_zlib: use_zlib,\n _deflateRaw: _deflate,\n _inflateRaw: _inflate,\n consts: consts\n };\n return exports;\n }();\n\n if (typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') {\n module.exports = CFB;\n }\n\n var _fs;\n\n if (typeof require !== 'undefined') try {\n _fs = require('fs');\n } catch (e) {}\n /* normalize data for blob ctor */\n\n function blobify(data) {\n if (typeof data === \"string\") return s2ab(data);\n if (Array.isArray(data)) return a2u(data);\n return data;\n }\n /* write or download file */\n\n\n function write_dl(fname, payload, enc) {\n /*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n if (typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n var data = enc == \"utf8\" ? utf8write(payload) : payload;\n if (typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\n if (typeof Blob !== 'undefined') {\n var blob = new Blob([blobify(data)], {\n type: \"application/octet-stream\"\n });\n if (typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n if (typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\n if (typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n var url = URL.createObjectURL(blob);\n\n if (typeof chrome === 'object' && typeof (chrome.downloads || {}).download == \"function\") {\n if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 60000);\n return chrome.downloads.download({\n url: url,\n filename: fname,\n saveAs: true\n });\n }\n\n var a = document.createElement(\"a\");\n\n if (a.download != null) {\n a.download = fname;\n a.href = url;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 60000);\n return url;\n }\n }\n } // $FlowIgnore\n\n\n if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n // extendscript\n // $FlowIgnore\n var out = File(fname);\n out.open(\"w\");\n out.encoding = \"binary\";\n if (Array.isArray(payload)) payload = a2s(payload);\n out.write(payload);\n out.close();\n return payload;\n } catch (e) {\n if (!e.message || !e.message.match(/onstruct/)) throw e;\n }\n throw new Error(\"cannot save file \" + fname);\n }\n /* read binary data from file */\n\n\n function read_binary(path) {\n if (typeof _fs !== 'undefined') return _fs.readFileSync(path); // $FlowIgnore\n\n if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n // extendscript\n // $FlowIgnore\n var infile = File(path);\n infile.open(\"r\");\n infile.encoding = \"binary\";\n var data = infile.read();\n infile.close();\n return data;\n } catch (e) {\n if (!e.message || !e.message.match(/onstruct/)) throw e;\n }\n throw new Error(\"Cannot access file \" + path);\n }\n\n function keys(o) {\n var ks = Object.keys(o),\n o2 = [];\n\n for (var i = 0; i < ks.length; ++i) {\n if (Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n }\n\n return o2;\n }\n\n function evert_key(obj, key) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n if (o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n }\n\n return o;\n }\n\n function evert(obj) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n o[obj[K[i]]] = K[i];\n }\n\n return o;\n }\n\n function evert_num(obj) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n o[obj[K[i]]] = parseInt(K[i], 10);\n }\n\n return o;\n }\n\n function evert_arr(obj) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n if (o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n o[obj[K[i]]].push(K[i]);\n }\n\n return o;\n }\n\n var basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\n\n function datenum(v, date1904) {\n var epoch = v.getTime();\n if (date1904) epoch -= 1462 * 24 * 60 * 60 * 1000;\n var dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\n return (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n }\n\n var refdate = new Date();\n var dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\n var refoffset = refdate.getTimezoneOffset();\n\n function numdate(v) {\n var out = new Date();\n out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\n if (out.getTimezoneOffset() !== refoffset) {\n out.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n }\n\n return out;\n }\n /* ISO 8601 Duration */\n\n\n function parse_isodur(s) {\n var sec = 0,\n mt = 0,\n time = false;\n var m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n if (!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\n for (var i = 1; i != m.length; ++i) {\n if (!m[i]) continue;\n mt = 1;\n if (i > 3) time = true;\n\n switch (m[i].slice(m[i].length - 1)) {\n case 'Y':\n throw new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length - 1));\n\n case 'D':\n mt *= 24;\n\n /* falls through */\n\n case 'H':\n mt *= 60;\n\n /* falls through */\n\n case 'M':\n if (!time) throw new Error(\"Unsupported ISO Duration Field: M\");else mt *= 60;\n\n /* falls through */\n\n case 'S':\n break;\n }\n\n sec += mt * parseInt(m[i], 10);\n }\n\n return sec;\n }\n\n var good_pd_date = new Date('2017-02-19T19:06:09.000Z');\n if (isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17');\n var good_pd = good_pd_date.getFullYear() == 2017;\n /* parses a date as a local date */\n\n function parseDate(str, fixdate) {\n var d = new Date(str);\n\n if (good_pd) {\n if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n return d;\n }\n\n if (str instanceof Date) return str;\n\n if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n var s = d.getFullYear();\n if (str.indexOf(\"\" + s) > -1) return d;\n d.setFullYear(d.getFullYear() + 100);\n return d;\n }\n\n var n = str.match(/\\d+/g) || [\"2017\", \"2\", \"19\", \"0\", \"0\", \"0\"];\n var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);\n if (str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n return out;\n }\n\n function cc2str(arr) {\n var o = \"\";\n\n for (var i = 0; i != arr.length; ++i) {\n o += String.fromCharCode(arr[i]);\n }\n\n return o;\n }\n\n function dup(o) {\n if (typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n if (typeof o != 'object' || o == null) return o;\n if (o instanceof Date) return new Date(o.getTime());\n var out = {};\n\n for (var k in o) {\n if (Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n }\n\n return out;\n }\n\n function fill(c, l) {\n var o = \"\";\n\n while (o.length < l) {\n o += c;\n }\n\n return o;\n }\n /* TODO: stress test */\n\n\n function fuzzynum(s) {\n var v = Number(s);\n if (isFinite(v)) return v;\n if (!isNaN(v)) return NaN;\n if (!/\\d/.test(s)) return v;\n var wt = 1;\n var ss = s.replace(/([\\d]),([\\d])/g, \"$1$2\").replace(/[$]/g, \"\").replace(/[%]/g, function () {\n wt *= 100;\n return \"\";\n });\n if (!isNaN(v = Number(ss))) return v / wt;\n ss = ss.replace(/[(](.*)[)]/, function ($$, $1) {\n wt = -wt;\n return $1;\n });\n if (!isNaN(v = Number(ss))) return v / wt;\n return v;\n }\n\n function fuzzydate(s) {\n var o = new Date(s),\n n = new Date(NaN);\n var y = o.getYear(),\n m = o.getMonth(),\n d = o.getDate();\n if (isNaN(d)) return n;\n if (y < 0 || y > 8099) return n;\n if ((m > 0 || d > 1) && y != 101) return o;\n if (s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) return o;\n if (s.match(/[^-0-9:,\\/\\\\]/)) return n;\n return o;\n }\n\n var safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\n function split_regex(str, re, def) {\n if (safe_split_regex || typeof re == \"string\") return str.split(re);\n var p = str.split(re),\n o = [p[0]];\n\n for (var i = 1; i < p.length; ++i) {\n o.push(def);\n o.push(p[i]);\n }\n\n return o;\n }\n\n function getdatastr(data) {\n if (!data) return null;\n if (data.data) return debom(data.data);\n if (data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n if (data.asBinary) return debom(data.asBinary());\n if (data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(), 0)));\n if (data.content && data.type) return debom(cc2str(data.content));\n return null;\n }\n\n function getdatabin(data) {\n if (!data) return null;\n if (data.data) return char_codes(data.data);\n if (data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\n if (data._data && data._data.getContent) {\n var o = data._data.getContent();\n\n if (typeof o == \"string\") return char_codes(o);\n return Array.prototype.slice.call(o);\n }\n\n if (data.content && data.type) return data.content;\n return null;\n }\n\n function getdata(data) {\n return data && data.name.slice(-4) === \".bin\" ? getdatabin(data) : getdatastr(data);\n }\n /* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n\n /* OASIS does not comment on filename case sensitivity */\n\n\n function safegetzipfile(zip, file) {\n var k = zip.FullPaths || keys(zip.files);\n var f = file.toLowerCase().replace(/[\\/]/g, '\\\\'),\n g = f.replace(/\\\\/g, '\\/');\n\n for (var i = 0; i < k.length; ++i) {\n var n = k[i].replace(/^Root Entry[\\/]/, \"\").toLowerCase();\n if (f == n || g == n) return zip.files ? zip.files[k[i]] : zip.FileIndex[i];\n }\n\n return null;\n }\n\n function getzipfile(zip, file) {\n var o = safegetzipfile(zip, file);\n if (o == null) throw new Error(\"Cannot find file \" + file + \" in zip\");\n return o;\n }\n\n function getzipdata(zip, file, safe) {\n if (!safe) return getdata(getzipfile(zip, file));\n if (!file) return null;\n\n try {\n return getzipdata(zip, file);\n } catch (e) {\n return null;\n }\n }\n\n function getzipstr(zip, file, safe) {\n if (!safe) return getdatastr(getzipfile(zip, file));\n if (!file) return null;\n\n try {\n return getzipstr(zip, file);\n } catch (e) {\n return null;\n }\n }\n\n function zipentries(zip) {\n var k = zip.FullPaths || keys(zip.files),\n o = [];\n\n for (var i = 0; i < k.length; ++i) {\n if (k[i].slice(-1) != '/') o.push(k[i]);\n }\n\n return o.sort();\n }\n\n function zip_add_file(zip, path, content) {\n if (zip.FullPaths) CFB.utils.cfb_add(zip, path, content);else zip.file(path, content);\n }\n\n var jszip;\n /*global JSZipSync:true */\n\n if (typeof JSZipSync !== 'undefined') jszip = JSZipSync;\n\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n if (typeof jszip === 'undefined') jszip = require('./jszip.js');\n }\n }\n\n function zip_new() {\n if (!jszip) return CFB.utils.cfb_new();\n return new jszip();\n }\n\n function zip_read(d, o) {\n var zip;\n if (jszip) switch (o.type) {\n case \"base64\":\n zip = new jszip(d, {\n base64: true\n });\n break;\n\n case \"binary\":\n case \"array\":\n zip = new jszip(d, {\n base64: false\n });\n break;\n\n case \"buffer\":\n zip = new jszip(d);\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n } else switch (o.type) {\n case \"base64\":\n zip = CFB.read(d, {\n type: \"base64\"\n });\n break;\n\n case \"binary\":\n zip = CFB.read(d, {\n type: \"binary\"\n });\n break;\n\n case \"buffer\":\n case \"array\":\n zip = CFB.read(d, {\n type: \"buffer\"\n });\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n return zip;\n }\n\n function resolve_path(path, base) {\n if (path.charAt(0) == \"/\") return path.slice(1);\n var result = base.split('/');\n if (base.slice(-1) != \"/\") result.pop(); // folder path\n\n var target = path.split('/');\n\n while (target.length !== 0) {\n var step = target.shift();\n if (step === '..') result.pop();else if (step !== '.') result.push(step);\n }\n\n return result.join('/');\n }\n\n var XML_HEADER = '\\r\\n';\n var attregexg = /([^\"\\s?>\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\n var tagregex = /<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg;\n if (!XML_HEADER.match(tagregex)) tagregex = /<[^>]*>/g;\n var nsregex = /<\\w*:/,\n nsregex2 = /<(\\/?)\\w+:/;\n\n function parsexmltag(tag, skip_root, skip_LC) {\n var z = {};\n var eq = 0,\n c = 0;\n\n for (; eq !== tag.length; ++eq) {\n if ((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n }\n\n if (!skip_root) z[0] = tag.slice(0, eq);\n if (eq === tag.length) return z;\n var m = tag.match(attregexg),\n j = 0,\n v = \"\",\n i = 0,\n q = \"\",\n cc = \"\",\n quot = 1;\n if (m) for (i = 0; i != m.length; ++i) {\n cc = m[i];\n\n for (c = 0; c != cc.length; ++c) {\n if (cc.charCodeAt(c) === 61) break;\n }\n\n q = cc.slice(0, c).trim();\n\n while (cc.charCodeAt(c + 1) == 32) {\n ++c;\n }\n\n quot = (eq = cc.charCodeAt(c + 1)) == 34 || eq == 39 ? 1 : 0;\n v = cc.slice(c + 1 + quot, cc.length - quot);\n\n for (j = 0; j != q.length; ++j) {\n if (q.charCodeAt(j) === 58) break;\n }\n\n if (j === q.length) {\n if (q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\n z[q] = v;\n if (!skip_LC) z[q.toLowerCase()] = v;\n } else {\n var k = (j === 5 && q.slice(0, 5) === \"xmlns\" ? \"xmlns\" : \"\") + q.slice(j + 1);\n if (z[k] && q.slice(j - 3, j) == \"ext\") continue; // from ods\n\n z[k] = v;\n if (!skip_LC) z[k.toLowerCase()] = v;\n }\n }\n return z;\n }\n\n function strip_ns(x) {\n return x.replace(nsregex2, \"<$1\");\n }\n\n var encodings = {\n '"': '\"',\n ''': \"'\",\n '>': '>',\n '<': '<',\n '&': '&'\n };\n var rencoding = evert(encodings); //var rencstr = \"&<>'\\\"\".split(\"\");\n // TODO: CP remap (need to read file version to determine OS)\n\n var unescapexml = function () {\n /* 22.4.2.4 bstr (Basic String) */\n var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig,\n coderegex = /_x([\\da-fA-F]{4})_/ig;\n return function unescapexml(text) {\n var s = text + '',\n i = s.indexOf(\" -1 ? 16 : 10)) || $$;\n }).replace(coderegex, function (m, c) {\n return String.fromCharCode(parseInt(c, 16));\n });\n var j = s.indexOf(\"]]>\");\n return unescapexml(s.slice(0, i)) + s.slice(i + 9, j) + unescapexml(s.slice(j + 3));\n };\n }();\n\n var decregex = /[&<>'\"]/g,\n charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\n\n function escapexml(text) {\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(charegex, function (s) {\n return \"_x\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \"_\";\n });\n }\n\n function escapexmltag(text) {\n return escapexml(text).replace(/ /g, \"_x0020_\");\n }\n\n var htmlcharegex = /[\\u0000-\\u001f]/g;\n\n function escapehtml(text) {\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(/\\n/g, \"
\").replace(htmlcharegex, function (s) {\n return \"&#x\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \";\";\n });\n }\n\n function escapexlml(text) {\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(htmlcharegex, function (s) {\n return \"&#x\" + s.charCodeAt(0).toString(16).toUpperCase() + \";\";\n });\n }\n /* TODO: handle codepages */\n\n\n var xlml_fixstr = function () {\n var entregex = /&#(\\d+);/g;\n\n function entrepl($$, $1) {\n return String.fromCharCode(parseInt($1, 10));\n }\n\n return function xlml_fixstr(str) {\n return str.replace(entregex, entrepl);\n };\n }();\n\n var xlml_unfixstr = function () {\n return function xlml_unfixstr(str) {\n return str.replace(/(\\r\\n|[\\r\\n])/g, \"\\ \");\n };\n }();\n\n function parsexmlbool(value) {\n switch (value) {\n case 1:\n case true:\n case '1':\n case 'true':\n case 'TRUE':\n return true;\n\n /* case '0': case 'false': case 'FALSE':*/\n\n default:\n return false;\n }\n }\n\n var utf8read = function utf8reada(orig) {\n var out = \"\",\n i = 0,\n c = 0,\n d = 0,\n e = 0,\n f = 0,\n w = 0;\n\n while (i < orig.length) {\n c = orig.charCodeAt(i++);\n\n if (c < 128) {\n out += String.fromCharCode(c);\n continue;\n }\n\n d = orig.charCodeAt(i++);\n\n if (c > 191 && c < 224) {\n f = (c & 31) << 6;\n f |= d & 63;\n out += String.fromCharCode(f);\n continue;\n }\n\n e = orig.charCodeAt(i++);\n\n if (c < 240) {\n out += String.fromCharCode((c & 15) << 12 | (d & 63) << 6 | e & 63);\n continue;\n }\n\n f = orig.charCodeAt(i++);\n w = ((c & 7) << 18 | (d & 63) << 12 | (e & 63) << 6 | f & 63) - 65536;\n out += String.fromCharCode(0xD800 + (w >>> 10 & 1023));\n out += String.fromCharCode(0xDC00 + (w & 1023));\n }\n\n return out;\n };\n\n var utf8write = function utf8write(orig) {\n var out = [],\n i = 0,\n c = 0,\n d = 0;\n\n while (i < orig.length) {\n c = orig.charCodeAt(i++);\n\n switch (true) {\n case c < 128:\n out.push(String.fromCharCode(c));\n break;\n\n case c < 2048:\n out.push(String.fromCharCode(192 + (c >> 6)));\n out.push(String.fromCharCode(128 + (c & 63)));\n break;\n\n case c >= 55296 && c < 57344:\n c -= 55296;\n d = orig.charCodeAt(i++) - 56320 + (c << 10);\n out.push(String.fromCharCode(240 + (d >> 18 & 7)));\n out.push(String.fromCharCode(144 + (d >> 12 & 63)));\n out.push(String.fromCharCode(128 + (d >> 6 & 63)));\n out.push(String.fromCharCode(128 + (d & 63)));\n break;\n\n default:\n out.push(String.fromCharCode(224 + (c >> 12)));\n out.push(String.fromCharCode(128 + (c >> 6 & 63)));\n out.push(String.fromCharCode(128 + (c & 63)));\n }\n }\n\n return out.join(\"\");\n };\n\n if (has_buf) {\n var utf8readb = function utf8readb(data) {\n var out = Buffer.alloc(2 * data.length),\n w,\n i,\n j = 1,\n k = 0,\n ww = 0,\n c;\n\n for (i = 0; i < data.length; i += j) {\n j = 1;\n if ((c = data.charCodeAt(i)) < 128) w = c;else if (c < 224) {\n w = (c & 31) * 64 + (data.charCodeAt(i + 1) & 63);\n j = 2;\n } else if (c < 240) {\n w = (c & 15) * 4096 + (data.charCodeAt(i + 1) & 63) * 64 + (data.charCodeAt(i + 2) & 63);\n j = 3;\n } else {\n j = 4;\n w = (c & 7) * 262144 + (data.charCodeAt(i + 1) & 63) * 4096 + (data.charCodeAt(i + 2) & 63) * 64 + (data.charCodeAt(i + 3) & 63);\n w -= 65536;\n ww = 0xD800 + (w >>> 10 & 1023);\n w = 0xDC00 + (w & 1023);\n }\n\n if (ww !== 0) {\n out[k++] = ww & 255;\n out[k++] = ww >>> 8;\n ww = 0;\n }\n\n out[k++] = w % 256;\n out[k++] = w >>> 8;\n }\n\n return out.slice(0, k).toString('ucs2');\n };\n\n var corpus = \"foo bar baz\\xE2\\x98\\x83\\xF0\\x9F\\x8D\\xA3\";\n if (utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;\n\n var utf8readc = function utf8readc(data) {\n return Buffer_from(data, 'binary').toString('utf8');\n };\n\n if (utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;\n\n utf8write = function utf8write(data) {\n return Buffer_from(data, 'utf8').toString(\"binary\");\n };\n } // matches ... extracts content\n\n\n var matchtag = function () {\n var mtcache = {};\n return function matchtag(f, g) {\n var t = f + \"|\" + (g || \"\");\n if (mtcache[t]) return mtcache[t];\n return mtcache[t] = new RegExp('<(?:\\\\w+:)?' + f + '(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)', g || \"\");\n };\n }();\n\n var htmldecode = function () {\n var entities = [['nbsp', ' '], ['middot', '·'], ['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']].map(function (x) {\n return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]];\n });\n return function htmldecode(str) {\n var o = str // Remove new lines and spaces from start of content\n .replace(/^[\\t\\n\\r ]+/, \"\") // Remove new lines and spaces from end of content\n .replace(/[\\t\\n\\r ]+$/, \"\") // Added line which removes any white space characters after and before html tags\n .replace(/>\\s+/g, \">\").replace(/\\s+ tags with new lines\n .replace(/<\\s*[bB][rR]\\s*\\/?>/g, \"\\n\") // Strip HTML elements\n .replace(/<[^>]*>/g, \"\");\n\n for (var i = 0; i < entities.length; ++i) {\n o = o.replace(entities[i][0], entities[i][1]);\n }\n\n return o;\n };\n }();\n\n var vtregex = function () {\n var vt_cache = {};\n return function vt_regex(bt) {\n if (vt_cache[bt] !== undefined) return vt_cache[bt];\n return vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)\", 'g');\n };\n }();\n\n var vtvregex = /<\\/?(?:vt:)?variant>/g,\n vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)' + g + '';\n }\n\n function wxt_helper(h) {\n return keys(h).map(function (k) {\n return \" \" + k + '=\"' + h[k] + '\"';\n }).join(\"\");\n }\n\n function writextag(f, g, h) {\n return '<' + f + (h != null ? wxt_helper(h) : \"\") + (g != null ? (g.match(wtregex) ? ' xml:space=\"preserve\"' : \"\") + '>' + g + '';\n }\n\n function write_w3cdtf(d, t) {\n try {\n return d.toISOString().replace(/\\.\\d*/, \"\");\n } catch (e) {\n if (t) throw e;\n }\n\n return \"\";\n }\n\n function write_vt(s, xlsx) {\n switch (typeof s) {\n case 'string':\n var o = writextag('vt:lpwstr', escapexml(s));\n if (xlsx) o = o.replace(/"/g, \"_x0022_\");\n return o;\n\n case 'number':\n return writextag((s | 0) == s ? 'vt:i4' : 'vt:r8', escapexml(String(s)));\n\n case 'boolean':\n return writextag('vt:bool', s ? 'true' : 'false');\n }\n\n if (s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n throw new Error(\"Unable to serialize \" + s);\n }\n\n var XMLNS = {\n 'dc': 'http://purl.org/dc/elements/1.1/',\n 'dcterms': 'http://purl.org/dc/terms/',\n 'dcmitype': 'http://purl.org/dc/dcmitype/',\n 'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n 'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n 'xsd': 'http://www.w3.org/2001/XMLSchema'\n };\n XMLNS.main = ['http://schemas.openxmlformats.org/spreadsheetml/2006/main', 'http://purl.oclc.org/ooxml/spreadsheetml/main', 'http://schemas.microsoft.com/office/excel/2006/main', 'http://schemas.microsoft.com/office/excel/2006/2'];\n var XLMLNS = {\n 'o': 'urn:schemas-microsoft-com:office:office',\n 'x': 'urn:schemas-microsoft-com:office:excel',\n 'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n 'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n 'mv': 'http://macVmlSchemaUri',\n 'v': 'urn:schemas-microsoft-com:vml',\n 'html': 'http://www.w3.org/TR/REC-html40'\n };\n\n function read_double_le(b, idx) {\n var s = 1 - 2 * (b[idx + 7] >>> 7);\n var e = ((b[idx + 7] & 0x7f) << 4) + (b[idx + 6] >>> 4 & 0x0f);\n var m = b[idx + 6] & 0x0f;\n\n for (var i = 5; i >= 0; --i) {\n m = m * 256 + b[idx + i];\n }\n\n if (e == 0x7ff) return m == 0 ? s * Infinity : NaN;\n if (e == 0) e = -1022;else {\n e -= 1023;\n m += Math.pow(2, 52);\n }\n return s * Math.pow(2, e - 52) * m;\n }\n\n function write_double_le(b, v, idx) {\n var bs = (v < 0 || 1 / v == -Infinity ? 1 : 0) << 7,\n e = 0,\n m = 0;\n var av = bs ? -v : v;\n\n if (!isFinite(av)) {\n e = 0x7ff;\n m = isNaN(v) ? 0x6969 : 0;\n } else if (av == 0) e = m = 0;else {\n e = Math.floor(Math.log(av) / Math.LN2);\n m = av * Math.pow(2, 52 - e);\n\n if (e <= -1023 && (!isFinite(m) || m < Math.pow(2, 52))) {\n e = -1022;\n } else {\n m -= Math.pow(2, 52);\n e += 1023;\n }\n }\n\n for (var i = 0; i <= 5; ++i, m /= 256) {\n b[idx + i] = m & 0xff;\n }\n\n b[idx + 6] = (e & 0x0f) << 4 | m & 0xf;\n b[idx + 7] = e >> 4 | bs;\n }\n\n var __toBuffer = function __toBuffer(bufs) {\n var x = [],\n w = 10240;\n\n for (var i = 0; i < bufs[0].length; ++i) {\n if (bufs[0][i]) for (var j = 0, L = bufs[0][i].length; j < L; j += w) {\n x.push.apply(x, bufs[0][i].slice(j, j + w));\n }\n }\n\n return x;\n };\n\n var ___toBuffer = __toBuffer;\n\n var __utf16le = function __utf16le(b, s, e) {\n var ss = [];\n\n for (var i = s; i < e; i += 2) {\n ss.push(String.fromCharCode(__readUInt16LE(b, i)));\n }\n\n return ss.join(\"\").replace(chr0, '');\n };\n\n var ___utf16le = __utf16le;\n\n var __hexlify = function __hexlify(b, s, l) {\n var ss = [];\n\n for (var i = s; i < s + l; ++i) {\n ss.push((\"0\" + b[i].toString(16)).slice(-2));\n }\n\n return ss.join(\"\");\n };\n\n var ___hexlify = __hexlify;\n\n var __utf8 = function __utf8(b, s, e) {\n var ss = [];\n\n for (var i = s; i < e; i++) {\n ss.push(String.fromCharCode(__readUInt8(b, i)));\n }\n\n return ss.join(\"\");\n };\n\n var ___utf8 = __utf8;\n\n var __lpstr = function __lpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n };\n\n var ___lpstr = __lpstr;\n\n var __cpstr = function __cpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n };\n\n var ___cpstr = __cpstr;\n\n var __lpwstr = function __lpwstr(b, i) {\n var len = 2 * __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n };\n\n var ___lpwstr = __lpwstr;\n\n var __lpp4, ___lpp4;\n\n __lpp4 = ___lpp4 = function lpp4_(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf16le(b, i + 4, i + 4 + len) : \"\";\n };\n\n var __8lpp4 = function __8lpp4(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len) : \"\";\n };\n\n var ___8lpp4 = __8lpp4;\n\n var __double, ___double;\n\n __double = ___double = function ___double(b, idx) {\n return read_double_le(b, idx);\n };\n\n var is_buf = function is_buf_a(a) {\n return Array.isArray(a);\n };\n\n if (has_buf) {\n __utf16le = function __utf16le(b, s, e) {\n if (!Buffer.isBuffer(b)) return ___utf16le(b, s, e);\n return b.toString('utf16le', s, e).replace(chr0, '')\n /*.replace(chr1,'!')*/\n ;\n };\n\n __hexlify = function __hexlify(b, s, l) {\n return Buffer.isBuffer(b) ? b.toString('hex', s, s + l) : ___hexlify(b, s, l);\n };\n\n __lpstr = function lpstr_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___lpstr(b, i);\n var len = b.readUInt32LE(i);\n return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n };\n\n __cpstr = function cpstr_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___cpstr(b, i);\n var len = b.readUInt32LE(i);\n return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n };\n\n __lpwstr = function lpwstr_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___lpwstr(b, i);\n var len = 2 * b.readUInt32LE(i);\n return b.toString('utf16le', i + 4, i + 4 + len - 1);\n };\n\n __lpp4 = function lpp4_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___lpp4(b, i);\n var len = b.readUInt32LE(i);\n return b.toString('utf16le', i + 4, i + 4 + len);\n };\n\n __8lpp4 = function lpp4_8b(b, i) {\n if (!Buffer.isBuffer(b)) return ___8lpp4(b, i);\n var len = b.readUInt32LE(i);\n return b.toString('utf8', i + 4, i + 4 + len);\n };\n\n __utf8 = function utf8_b(b, s, e) {\n return Buffer.isBuffer(b) ? b.toString('utf8', s, e) : ___utf8(b, s, e);\n };\n\n __toBuffer = function __toBuffer(bufs) {\n return bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0]) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);\n };\n\n bconcat = function bconcat(bufs) {\n return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs);\n };\n\n __double = function double_(b, i) {\n if (Buffer.isBuffer(b)) return b.readDoubleLE(i);\n return ___double(b, i);\n };\n\n is_buf = function is_buf_b(a) {\n return Buffer.isBuffer(a) || Array.isArray(a);\n };\n }\n /* from js-xls */\n\n\n if (typeof cptable !== 'undefined') {\n __utf16le = function __utf16le(b, s, e) {\n return cptable.utils.decode(1200, b.slice(s, e)).replace(chr0, '');\n };\n\n __utf8 = function __utf8(b, s, e) {\n return cptable.utils.decode(65001, b.slice(s, e));\n };\n\n __lpstr = function __lpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(current_ansi, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __cpstr = function __cpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __lpwstr = function __lpwstr(b, i) {\n var len = 2 * __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __lpp4 = function __lpp4(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len)) : \"\";\n };\n\n __8lpp4 = function __8lpp4(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(65001, b.slice(i + 4, i + 4 + len)) : \"\";\n };\n }\n\n var __readUInt8 = function __readUInt8(b, idx) {\n return b[idx];\n };\n\n var __readUInt16LE = function __readUInt16LE(b, idx) {\n return b[idx + 1] * (1 << 8) + b[idx];\n };\n\n var __readInt16LE = function __readInt16LE(b, idx) {\n var u = b[idx + 1] * (1 << 8) + b[idx];\n return u < 0x8000 ? u : (0xffff - u + 1) * -1;\n };\n\n var __readUInt32LE = function __readUInt32LE(b, idx) {\n return b[idx + 3] * (1 << 24) + (b[idx + 2] << 16) + (b[idx + 1] << 8) + b[idx];\n };\n\n var __readInt32LE = function __readInt32LE(b, idx) {\n return b[idx + 3] << 24 | b[idx + 2] << 16 | b[idx + 1] << 8 | b[idx];\n };\n\n var __readInt32BE = function __readInt32BE(b, idx) {\n return b[idx] << 24 | b[idx + 1] << 16 | b[idx + 2] << 8 | b[idx + 3];\n };\n\n function ReadShift(size, t) {\n var o = \"\",\n oI,\n oR,\n oo = [],\n w,\n vv,\n i,\n loc;\n\n switch (t) {\n case 'dbcs':\n loc = this.l;\n if (has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l + 2 * size).toString(\"utf16le\");else for (i = 0; i < size; ++i) {\n o += String.fromCharCode(__readUInt16LE(this, loc));\n loc += 2;\n }\n size *= 2;\n break;\n\n case 'utf8':\n o = __utf8(this, this.l, this.l + size);\n break;\n\n case 'utf16le':\n size *= 2;\n o = __utf16le(this, this.l, this.l + size);\n break;\n\n case 'wstr':\n if (typeof cptable !== 'undefined') o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + 2 * size));else return ReadShift.call(this, size, 'dbcs');\n size = 2 * size;\n break;\n\n /* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\n case 'lpstr-ansi':\n o = __lpstr(this, this.l);\n size = 4 + __readUInt32LE(this, this.l);\n break;\n\n case 'lpstr-cp':\n o = __cpstr(this, this.l);\n size = 4 + __readUInt32LE(this, this.l);\n break;\n\n /* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\n case 'lpwstr':\n o = __lpwstr(this, this.l);\n size = 4 + 2 * __readUInt32LE(this, this.l);\n break;\n\n /* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\n case 'lpp4':\n size = 4 + __readUInt32LE(this, this.l);\n o = __lpp4(this, this.l);\n if (size & 0x02) size += 2;\n break;\n\n /* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\n case '8lpp4':\n size = 4 + __readUInt32LE(this, this.l);\n o = __8lpp4(this, this.l);\n if (size & 0x03) size += 4 - (size & 0x03);\n break;\n\n case 'cstr':\n size = 0;\n o = \"\";\n\n while ((w = __readUInt8(this, this.l + size++)) !== 0) {\n oo.push(_getchar(w));\n }\n\n o = oo.join(\"\");\n break;\n\n case '_wstr':\n size = 0;\n o = \"\";\n\n while ((w = __readUInt16LE(this, this.l + size)) !== 0) {\n oo.push(_getchar(w));\n size += 2;\n }\n\n size += 2;\n o = oo.join(\"\");\n break;\n\n /* sbcs and dbcs support continue records in the SST way TODO codepages */\n\n case 'dbcs-cont':\n o = \"\";\n loc = this.l;\n\n for (i = 0; i < size; ++i) {\n if (this.lens && this.lens.indexOf(loc) !== -1) {\n w = __readUInt8(this, loc);\n this.l = loc + 1;\n vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n return oo.join(\"\") + vv;\n }\n\n oo.push(_getchar(__readUInt16LE(this, loc)));\n loc += 2;\n }\n\n o = oo.join(\"\");\n size *= 2;\n break;\n\n case 'cpstr':\n if (typeof cptable !== 'undefined') {\n o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n break;\n }\n\n /* falls through */\n\n case 'sbcs-cont':\n o = \"\";\n loc = this.l;\n\n for (i = 0; i != size; ++i) {\n if (this.lens && this.lens.indexOf(loc) !== -1) {\n w = __readUInt8(this, loc);\n this.l = loc + 1;\n vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n return oo.join(\"\") + vv;\n }\n\n oo.push(_getchar(__readUInt8(this, loc)));\n loc += 1;\n }\n\n o = oo.join(\"\");\n break;\n\n default:\n switch (size) {\n case 1:\n oI = __readUInt8(this, this.l);\n this.l++;\n return oI;\n\n case 2:\n oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l);\n this.l += 2;\n return oI;\n\n case 4:\n case -4:\n if (t === 'i' || (this[this.l + 3] & 0x80) === 0) {\n oI = (size > 0 ? __readInt32LE : __readInt32BE)(this, this.l);\n this.l += 4;\n return oI;\n } else {\n oR = __readUInt32LE(this, this.l);\n this.l += 4;\n }\n\n return oR;\n\n case 8:\n case -8:\n if (t === 'f') {\n if (size == 8) oR = __double(this, this.l);else oR = __double([this[this.l + 7], this[this.l + 6], this[this.l + 5], this[this.l + 4], this[this.l + 3], this[this.l + 2], this[this.l + 1], this[this.l + 0]], 0);\n this.l += 8;\n return oR;\n } else size = 8;\n\n /* falls through */\n\n case 16:\n o = __hexlify(this, this.l, size);\n break;\n }\n\n }\n\n this.l += size;\n return o;\n }\n\n var __writeUInt32LE = function __writeUInt32LE(b, val, idx) {\n b[idx] = val & 0xFF;\n b[idx + 1] = val >>> 8 & 0xFF;\n b[idx + 2] = val >>> 16 & 0xFF;\n b[idx + 3] = val >>> 24 & 0xFF;\n };\n\n var __writeInt32LE = function __writeInt32LE(b, val, idx) {\n b[idx] = val & 0xFF;\n b[idx + 1] = val >> 8 & 0xFF;\n b[idx + 2] = val >> 16 & 0xFF;\n b[idx + 3] = val >> 24 & 0xFF;\n };\n\n var __writeUInt16LE = function __writeUInt16LE(b, val, idx) {\n b[idx] = val & 0xFF;\n b[idx + 1] = val >>> 8 & 0xFF;\n };\n\n function WriteShift(t, val, f) {\n var size = 0,\n i = 0;\n\n if (f === 'dbcs') {\n for (i = 0; i != val.length; ++i) {\n __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n }\n\n size = 2 * val.length;\n } else if (f === 'sbcs') {\n if (typeof cptable !== 'undefined' && current_ansi == 874) {\n /* TODO: use tables directly, don't encode */\n for (i = 0; i != val.length; ++i) {\n var cppayload = cptable.utils.encode(current_ansi, val.charAt(i));\n this[this.l + i] = cppayload[0];\n }\n } else {\n val = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\n for (i = 0; i != val.length; ++i) {\n this[this.l + i] = val.charCodeAt(i) & 0xFF;\n }\n }\n\n size = val.length;\n } else if (f === 'hex') {\n for (; i < t; ++i) {\n this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;\n }\n\n return this;\n } else if (f === 'utf16le') {\n var end = Math.min(this.l + t, this.length);\n\n for (i = 0; i < Math.min(val.length, t); ++i) {\n var cc = val.charCodeAt(i);\n this[this.l++] = cc & 0xff;\n this[this.l++] = cc >> 8;\n }\n\n while (this.l < end) {\n this[this.l++] = 0;\n }\n\n return this;\n } else switch (t) {\n case 1:\n size = 1;\n this[this.l] = val & 0xFF;\n break;\n\n case 2:\n size = 2;\n this[this.l] = val & 0xFF;\n val >>>= 8;\n this[this.l + 1] = val & 0xFF;\n break;\n\n case 3:\n size = 3;\n this[this.l] = val & 0xFF;\n val >>>= 8;\n this[this.l + 1] = val & 0xFF;\n val >>>= 8;\n this[this.l + 2] = val & 0xFF;\n break;\n\n case 4:\n size = 4;\n\n __writeUInt32LE(this, val, this.l);\n\n break;\n\n case 8:\n size = 8;\n\n if (f === 'f') {\n write_double_le(this, val, this.l);\n break;\n }\n\n /* falls through */\n\n case 16:\n break;\n\n case -4:\n size = 4;\n\n __writeInt32LE(this, val, this.l);\n\n break;\n }\n\n this.l += size;\n return this;\n }\n\n function CheckField(hexstr, fld) {\n var m = __hexlify(this, this.l, hexstr.length >> 1);\n\n if (m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n this.l += hexstr.length >> 1;\n }\n\n function prep_blob(blob, pos) {\n blob.l = pos;\n blob.read_shift = ReadShift;\n blob.chk = CheckField;\n blob.write_shift = WriteShift;\n }\n\n function parsenoop(blob, length) {\n blob.l += length;\n }\n\n function new_buf(sz) {\n var o = new_raw_buf(sz);\n prep_blob(o, 0);\n return o;\n }\n /* [MS-XLSB] 2.1.4 Record */\n\n\n function recordhopper(data, cb, opts) {\n if (!data) return;\n var tmpbyte, cntbyte, length;\n prep_blob(data, data.l || 0);\n var L = data.length,\n RT = 0,\n tgt = 0;\n\n while (data.l < L) {\n RT = data.read_shift(1);\n if (RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F) << 7);\n var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n tmpbyte = data.read_shift(1);\n length = tmpbyte & 0x7F;\n\n for (cntbyte = 1; cntbyte < 4 && tmpbyte & 0x80; ++cntbyte) {\n length += ((tmpbyte = data.read_shift(1)) & 0x7F) << 7 * cntbyte;\n }\n\n tgt = data.l + length;\n var d = (R.f || parsenoop)(data, length, opts);\n data.l = tgt;\n if (cb(d, R.n, RT)) return;\n }\n }\n /* control buffer usage for fixed-length buffers */\n\n\n function buf_array() {\n var bufs = [],\n blksz = has_buf ? 256 : 2048;\n\n var newblk = function ba_newblk(sz) {\n var o = new_buf(sz);\n prep_blob(o, 0);\n return o;\n };\n\n var curbuf = newblk(blksz);\n\n var endbuf = function ba_endbuf() {\n if (!curbuf) return;\n\n if (curbuf.length > curbuf.l) {\n curbuf = curbuf.slice(0, curbuf.l);\n curbuf.l = curbuf.length;\n }\n\n if (curbuf.length > 0) bufs.push(curbuf);\n curbuf = null;\n };\n\n var next = function ba_next(sz) {\n if (curbuf && sz < curbuf.length - curbuf.l) return curbuf;\n endbuf();\n return curbuf = newblk(Math.max(sz + 1, blksz));\n };\n\n var end = function ba_end() {\n endbuf();\n return __toBuffer([bufs]);\n };\n\n var push = function ba_push(buf) {\n endbuf();\n curbuf = buf;\n if (curbuf.l == null) curbuf.l = curbuf.length;\n next(blksz);\n };\n\n return {\n next: next,\n push: push,\n end: end,\n _bufs: bufs\n };\n }\n\n function write_record(ba, type, payload, length) {\n var t = +XLSBRE[type],\n l;\n if (isNaN(t)) return; // TODO: throw something here?\n\n if (!length) length = XLSBRecordEnum[t].p || (payload || []).length || 0;\n l = 1 + (t >= 0x80 ? 1 : 0) + 1\n /* + length*/\n ;\n if (length >= 0x80) ++l;\n if (length >= 0x4000) ++l;\n if (length >= 0x200000) ++l;\n var o = ba.next(l);\n if (t <= 0x7F) o.write_shift(1, t);else {\n o.write_shift(1, (t & 0x7F) + 0x80);\n o.write_shift(1, t >> 7);\n }\n\n for (var i = 0; i != 4; ++i) {\n if (length >= 0x80) {\n o.write_shift(1, (length & 0x7F) + 0x80);\n length >>= 7;\n } else {\n o.write_shift(1, length);\n break;\n }\n }\n\n if (length > 0 && is_buf(payload)) ba.push(payload);\n }\n /* XLS ranges enforced */\n\n\n function shift_cell_xls(cell, tgt, opts) {\n var out = dup(cell);\n\n if (tgt.s) {\n if (out.cRel) out.c += tgt.s.c;\n if (out.rRel) out.r += tgt.s.r;\n } else {\n if (out.cRel) out.c += tgt.c;\n if (out.rRel) out.r += tgt.r;\n }\n\n if (!opts || opts.biff < 12) {\n while (out.c >= 0x100) {\n out.c -= 0x100;\n }\n\n while (out.r >= 0x10000) {\n out.r -= 0x10000;\n }\n }\n\n return out;\n }\n\n function shift_range_xls(cell, range, opts) {\n var out = dup(cell);\n out.s = shift_cell_xls(out.s, range.s, opts);\n out.e = shift_cell_xls(out.e, range.s, opts);\n return out;\n }\n\n function encode_cell_xls(c, biff) {\n if (c.cRel && c.c < 0) {\n c = dup(c);\n\n while (c.c < 0) {\n c.c += biff > 8 ? 0x4000 : 0x100;\n }\n }\n\n if (c.rRel && c.r < 0) {\n c = dup(c);\n\n while (c.r < 0) {\n c.r += biff > 8 ? 0x100000 : biff > 5 ? 0x10000 : 0x4000;\n }\n }\n\n var s = encode_cell(c);\n if (!c.cRel && c.cRel != null) s = fix_col(s);\n if (!c.rRel && c.rRel != null) s = fix_row(s);\n return s;\n }\n\n function encode_range_xls(r, opts) {\n if (r.s.r == 0 && !r.s.rRel) {\n if (r.e.r == (opts.biff >= 12 ? 0xFFFFF : opts.biff >= 8 ? 0x10000 : 0x4000) && !r.e.rRel) {\n return (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n }\n }\n\n if (r.s.c == 0 && !r.s.cRel) {\n if (r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n return (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n }\n }\n\n return encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n }\n\n var OFFCRYPTO = {};\n\n var make_offcrypto = function make_offcrypto(O, _crypto) {\n var crypto;\n if (typeof _crypto !== 'undefined') crypto = _crypto;else if (typeof require !== 'undefined') {\n try {\n crypto = require('crypto');\n } catch (e) {\n crypto = null;\n }\n }\n\n O.rc4 = function (key, data) {\n var S = new Array(256);\n var c = 0,\n i = 0,\n j = 0,\n t = 0;\n\n for (i = 0; i != 256; ++i) {\n S[i] = i;\n }\n\n for (i = 0; i != 256; ++i) {\n j = j + S[i] + key[i % key.length].charCodeAt(0) & 255;\n t = S[i];\n S[i] = S[j];\n S[j] = t;\n } // $FlowIgnore\n\n\n i = j = 0;\n var out = new_raw_buf(data.length);\n\n for (c = 0; c != data.length; ++c) {\n i = i + 1 & 255;\n j = (j + S[i]) % 256;\n t = S[i];\n S[i] = S[j];\n S[j] = t;\n out[c] = data[c] ^ S[S[i] + S[j] & 255];\n }\n\n return out;\n };\n\n O.md5 = function (hex) {\n if (!crypto) throw new Error(\"Unsupported crypto\");\n return crypto.createHash('md5').update(hex).digest('hex');\n };\n };\n /*global crypto:true */\n\n\n make_offcrypto(OFFCRYPTO, typeof crypto !== \"undefined\" ? crypto : undefined);\n\n function decode_row(rowstr) {\n return parseInt(unfix_row(rowstr), 10) - 1;\n }\n\n function encode_row(row) {\n return \"\" + (row + 1);\n }\n\n function fix_row(cstr) {\n return cstr.replace(/([A-Z]|^)(\\d+)$/, \"$1$$$2\");\n }\n\n function unfix_row(cstr) {\n return cstr.replace(/\\$(\\d+)$/, \"$1\");\n }\n\n function decode_col(colstr) {\n var c = unfix_col(colstr),\n d = 0,\n i = 0;\n\n for (; i !== c.length; ++i) {\n d = 26 * d + c.charCodeAt(i) - 64;\n }\n\n return d - 1;\n }\n\n function encode_col(col) {\n if (col < 0) throw new Error(\"invalid column \" + col);\n var s = \"\";\n\n for (++col; col; col = Math.floor((col - 1) / 26)) {\n s = String.fromCharCode((col - 1) % 26 + 65) + s;\n }\n\n return s;\n }\n\n function fix_col(cstr) {\n return cstr.replace(/^([A-Z])/, \"$$$1\");\n }\n\n function unfix_col(cstr) {\n return cstr.replace(/^\\$([A-Z])/, \"$1\");\n }\n\n function split_cell(cstr) {\n return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/, \"$1,$2\").split(\",\");\n } //function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\n\n\n function decode_cell(cstr) {\n var R = 0,\n C = 0;\n\n for (var i = 0; i < cstr.length; ++i) {\n var cc = cstr.charCodeAt(i);\n if (cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);else if (cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n }\n\n return {\n c: C - 1,\n r: R - 1\n };\n } //function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }\n\n\n function encode_cell(cell) {\n var col = cell.c + 1;\n var s = \"\";\n\n for (; col; col = (col - 1) / 26 | 0) {\n s = String.fromCharCode((col - 1) % 26 + 65) + s;\n }\n\n return s + (cell.r + 1);\n }\n\n function decode_range(range) {\n var idx = range.indexOf(\":\");\n if (idx == -1) return {\n s: decode_cell(range),\n e: decode_cell(range)\n };\n return {\n s: decode_cell(range.slice(0, idx)),\n e: decode_cell(range.slice(idx + 1))\n };\n }\n\n function encode_range(cs, ce) {\n if (typeof ce === 'undefined' || typeof ce === 'number') {\n return encode_range(cs.s, cs.e);\n }\n\n if (typeof cs !== 'string') cs = encode_cell(cs);\n if (typeof ce !== 'string') ce = encode_cell(ce);\n return cs == ce ? cs : cs + \":\" + ce;\n }\n\n function safe_decode_range(range) {\n var o = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n var idx = 0,\n i = 0,\n cc = 0;\n var len = range.length;\n\n for (idx = 0; i < len; ++i) {\n if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n o.s.c = --idx;\n\n for (idx = 0; i < len; ++i) {\n if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n idx = 10 * idx + cc;\n }\n\n o.s.r = --idx;\n\n if (i === len || range.charCodeAt(++i) === 58) {\n o.e.c = o.s.c;\n o.e.r = o.s.r;\n return o;\n }\n\n for (idx = 0; i != len; ++i) {\n if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n o.e.c = --idx;\n\n for (idx = 0; i != len; ++i) {\n if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n idx = 10 * idx + cc;\n }\n\n o.e.r = --idx;\n return o;\n }\n\n function safe_format_cell(cell, v) {\n var q = cell.t == 'd' && v instanceof Date;\n if (cell.z != null) try {\n return cell.w = SSF.format(cell.z, q ? datenum(v) : v);\n } catch (e) {}\n\n try {\n return cell.w = SSF.format((cell.XF || {}).numFmtId || (q ? 14 : 0), q ? datenum(v) : v);\n } catch (e) {\n return '' + v;\n }\n }\n\n function format_cell(cell, v, o) {\n if (cell == null || cell.t == null || cell.t == 'z') return \"\";\n if (cell.w !== undefined) return cell.w;\n if (cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n if (cell.t == \"e\") return BErr[cell.v] || cell.v;\n if (v == undefined) return safe_format_cell(cell, cell.v);\n return safe_format_cell(cell, v);\n }\n\n function sheet_to_workbook(sheet, opts) {\n var n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n var sheets = {};\n sheets[n] = sheet;\n return {\n SheetNames: [n],\n Sheets: sheets\n };\n }\n\n function sheet_add_aoa(_ws, data, opts) {\n var o = opts || {};\n var dense = _ws ? Array.isArray(_ws) : o.dense;\n if (DENSE != null && dense == null) dense = DENSE;\n var ws = _ws || (dense ? [] : {});\n var _R = 0,\n _C = 0;\n\n if (ws && o.origin != null) {\n if (typeof o.origin == 'number') _R = o.origin;else {\n var _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n _R = _origin.r;\n _C = _origin.c;\n }\n if (!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n }\n\n var range = {\n s: {\n c: 10000000,\n r: 10000000\n },\n e: {\n c: 0,\n r: 0\n }\n };\n\n if (ws['!ref']) {\n var _range = safe_decode_range(ws['!ref']);\n\n range.s.c = _range.s.c;\n range.s.r = _range.s.r;\n range.e.c = Math.max(range.e.c, _range.e.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n if (_R == -1) range.e.r = _R = _range.e.r + 1;\n }\n\n for (var R = 0; R != data.length; ++R) {\n if (!data[R]) continue;\n if (!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\n for (var C = 0; C != data[R].length; ++C) {\n if (typeof data[R][C] === 'undefined') continue;\n var cell = {\n v: data[R][C]\n };\n\n var __R = _R + R,\n __C = _C + C;\n\n if (range.s.r > __R) range.s.r = __R;\n if (range.s.c > __C) range.s.c = __C;\n if (range.e.r < __R) range.e.r = __R;\n if (range.e.c < __C) range.e.c = __C;\n if (data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];else {\n if (Array.isArray(cell.v)) {\n cell.f = data[R][C][1];\n cell.v = cell.v[0];\n }\n\n if (cell.v === null) {\n if (cell.f) cell.t = 'n';else if (o.nullError) {\n cell.t = 'e';\n cell.v = 0;\n } else if (!o.sheetStubs) continue;else cell.t = 'z';\n } else if (typeof cell.v === 'number') cell.t = 'n';else if (typeof cell.v === 'boolean') cell.t = 'b';else if (cell.v instanceof Date) {\n cell.z = o.dateNF || SSF._table[14];\n\n if (o.cellDates) {\n cell.t = 'd';\n cell.w = SSF.format(cell.z, datenum(cell.v));\n } else {\n cell.t = 'n';\n cell.v = datenum(cell.v);\n cell.w = SSF.format(cell.z, cell.v);\n }\n } else cell.t = 's';\n }\n\n if (dense) {\n if (!ws[__R]) ws[__R] = [];\n if (ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n ws[__R][__C] = cell;\n } else {\n var cell_ref = encode_cell({\n c: __C,\n r: __R\n });\n if (ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n ws[cell_ref] = cell;\n }\n }\n }\n\n if (range.s.c < 10000000) ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function aoa_to_sheet(data, opts) {\n return sheet_add_aoa(null, data, opts);\n }\n\n function write_UInt32LE(x, o) {\n if (!o) o = new_buf(4);\n o.write_shift(4, x);\n return o;\n }\n /* [MS-XLSB] 2.5.168 */\n\n\n function parse_XLWideString(data) {\n var cchCharacters = data.read_shift(4);\n return cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n }\n\n function write_XLWideString(data, o) {\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(4 + 2 * data.length);\n }\n\n o.write_shift(4, data.length);\n if (data.length > 0) o.write_shift(0, data, 'dbcs');\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.5.91 */\n //function parse_LPWideString(data) {\n //\tvar cchCharacters = data.read_shift(2);\n //\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n //}\n\n /* [MS-XLSB] 2.5.143 */\n\n\n function parse_StrRun(data) {\n return {\n ich: data.read_shift(2),\n ifnt: data.read_shift(2)\n };\n }\n\n function write_StrRun(run, o) {\n if (!o) o = new_buf(4);\n o.write_shift(2, run.ich || 0);\n o.write_shift(2, run.ifnt || 0);\n return o;\n }\n /* [MS-XLSB] 2.5.121 */\n\n\n function parse_RichStr(data, length) {\n var start = data.l;\n var flags = data.read_shift(1);\n var str = parse_XLWideString(data);\n var rgsStrRun = [];\n var z = {\n t: str,\n h: str\n };\n\n if ((flags & 1) !== 0) {\n /* fRichStr */\n\n /* TODO: formatted string */\n var dwSizeStrRun = data.read_shift(4);\n\n for (var i = 0; i != dwSizeStrRun; ++i) {\n rgsStrRun.push(parse_StrRun(data));\n }\n\n z.r = rgsStrRun;\n } else z.r = [{\n ich: 0,\n ifnt: 0\n }]; //if((flags & 2) !== 0) { /* fExtStr */\n //\t/* TODO: phonetic string */\n //}\n\n\n data.l = start + length;\n return z;\n }\n\n function write_RichStr(str, o) {\n /* TODO: formatted string */\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(15 + 4 * str.t.length);\n }\n\n o.write_shift(1, 0);\n write_XLWideString(str.t, o);\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\n\n\n var parse_BrtCommentText = parse_RichStr;\n\n function write_BrtCommentText(str, o) {\n /* TODO: formatted string */\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(23 + 4 * str.t.length);\n }\n\n o.write_shift(1, 1);\n write_XLWideString(str.t, o);\n o.write_shift(4, 1);\n write_StrRun({\n ich: 0,\n ifnt: 0\n }, o);\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.5.9 */\n\n\n function parse_XLSBCell(data) {\n var col = data.read_shift(4);\n var iStyleRef = data.read_shift(2);\n iStyleRef += data.read_shift(1) << 16;\n data.l++; //var fPhShow = data.read_shift(1);\n\n return {\n c: col,\n iStyleRef: iStyleRef\n };\n }\n\n function write_XLSBCell(cell, o) {\n if (o == null) o = new_buf(8);\n o.write_shift(-4, cell.c);\n o.write_shift(3, cell.iStyleRef || cell.s);\n o.write_shift(1, 0);\n /* fPhShow */\n\n return o;\n }\n /* Short XLSB Cell does not include column */\n\n\n function parse_XLSBShortCell(data) {\n var iStyleRef = data.read_shift(2);\n iStyleRef += data.read_shift(1) << 16;\n data.l++; //var fPhShow = data.read_shift(1);\n\n return {\n c: -1,\n iStyleRef: iStyleRef\n };\n }\n\n function write_XLSBShortCell(cell, o) {\n if (o == null) o = new_buf(4);\n o.write_shift(3, cell.iStyleRef || cell.s);\n o.write_shift(1, 0);\n /* fPhShow */\n\n return o;\n }\n /* [MS-XLSB] 2.5.21 */\n\n\n var parse_XLSBCodeName = parse_XLWideString;\n var write_XLSBCodeName = write_XLWideString;\n /* [MS-XLSB] 2.5.166 */\n\n function parse_XLNullableWideString(data) {\n var cchCharacters = data.read_shift(4);\n return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n }\n\n function write_XLNullableWideString(data, o) {\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(127);\n }\n\n o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n if (data.length > 0) o.write_shift(0, data, 'dbcs');\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.5.165 */\n\n\n var parse_XLNameWideString = parse_XLWideString; //var write_XLNameWideString = write_XLWideString;\n\n /* [MS-XLSB] 2.5.114 */\n\n var parse_RelID = parse_XLNullableWideString;\n var write_RelID = write_XLNullableWideString;\n /* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\n\n function parse_RkNumber(data) {\n var b = data.slice(data.l, data.l + 4);\n var fX100 = b[0] & 1,\n fInt = b[0] & 2;\n data.l += 4;\n b[0] &= 0xFC; // b[0] &= ~3;\n\n var RK = fInt === 0 ? __double([0, 0, 0, 0, b[0], b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n return fX100 ? RK / 100 : RK;\n }\n\n function write_RkNumber(data, o) {\n if (o == null) o = new_buf(4);\n var fX100 = 0,\n fInt = 0,\n d100 = data * 100;\n\n if (data == (data | 0) && data >= -(1 << 29) && data < 1 << 29) {\n fInt = 1;\n } else if (d100 == (d100 | 0) && d100 >= -(1 << 29) && d100 < 1 << 29) {\n fInt = 1;\n fX100 = 1;\n }\n\n if (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));else throw new Error(\"unsupported RkNumber \" + data); // TODO\n }\n /* [MS-XLSB] 2.5.117 RfX */\n\n\n function parse_RfX(data) {\n var cell = {\n s: {},\n e: {}\n };\n cell.s.r = data.read_shift(4);\n cell.e.r = data.read_shift(4);\n cell.s.c = data.read_shift(4);\n cell.e.c = data.read_shift(4);\n return cell;\n }\n\n function write_RfX(r, o) {\n if (!o) o = new_buf(16);\n o.write_shift(4, r.s.r);\n o.write_shift(4, r.e.r);\n o.write_shift(4, r.s.c);\n o.write_shift(4, r.e.c);\n return o;\n }\n /* [MS-XLSB] 2.5.153 UncheckedRfX */\n\n\n var parse_UncheckedRfX = parse_RfX;\n var write_UncheckedRfX = write_RfX;\n /* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n //function parse_UncheckedSqRfX(data) {\n //\tvar cnt = data.read_shift(4);\n //\tvar out = [];\n //\tfor(var i = 0; i < cnt; ++i) {\n //\t\tvar rng = parse_UncheckedRfX(data);\n //\t\tout.push(encode_range(rng));\n //\t}\n //\treturn out.join(\",\");\n //}\n //function write_UncheckedSqRfX(sqrfx) {\n //\tvar parts = sqrfx.split(/\\s*,\\s*/);\n //\tvar o = new_buf(4); o.write_shift(4, parts.length);\n //\tvar out = [o];\n //\tparts.forEach(function(rng) {\n //\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n //\t});\n //\treturn bconcat(out);\n //}\n\n /* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n\n /* TODO: error checking, NaN and Infinity values are not valid Xnum */\n\n function parse_Xnum(data) {\n if (data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n return data.read_shift(8, 'f');\n }\n\n function write_Xnum(data, o) {\n return (o || new_buf(8)).write_shift(8, data, 'f');\n }\n /* [MS-XLSB] 2.4.324 BrtColor */\n\n\n function parse_BrtColor(data) {\n var out = {};\n var d = data.read_shift(1); //var fValidRGB = d & 1;\n\n var xColorType = d >>> 1;\n var index = data.read_shift(1);\n var nTS = data.read_shift(2, 'i');\n var bR = data.read_shift(1);\n var bG = data.read_shift(1);\n var bB = data.read_shift(1);\n data.l++; //var bAlpha = data.read_shift(1);\n\n switch (xColorType) {\n case 0:\n out.auto = 1;\n break;\n\n case 1:\n out.index = index;\n var icv = XLSIcv[index];\n /* automatic pseudo index 81 */\n\n if (icv) out.rgb = rgb2Hex(icv);\n break;\n\n case 2:\n /* if(!fValidRGB) throw new Error(\"invalid\"); */\n out.rgb = rgb2Hex([bR, bG, bB]);\n break;\n\n case 3:\n out.theme = index;\n break;\n }\n\n if (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n return out;\n }\n\n function write_BrtColor(color, o) {\n if (!o) o = new_buf(8);\n\n if (!color || color.auto) {\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n }\n\n if (color.index != null) {\n o.write_shift(1, 0x02);\n o.write_shift(1, color.index);\n } else if (color.theme != null) {\n o.write_shift(1, 0x06);\n o.write_shift(1, color.theme);\n } else {\n o.write_shift(1, 0x05);\n o.write_shift(1, 0);\n }\n\n var nTS = color.tint || 0;\n if (nTS > 0) nTS *= 32767;else if (nTS < 0) nTS *= 32768;\n o.write_shift(2, nTS);\n\n if (!color.rgb || color.theme != null) {\n o.write_shift(2, 0);\n o.write_shift(1, 0);\n o.write_shift(1, 0);\n } else {\n var rgb = color.rgb || 'FFFFFF';\n if (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n o.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n o.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n o.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n o.write_shift(1, 0xFF);\n }\n\n return o;\n }\n /* [MS-XLSB] 2.5.52 */\n\n\n function parse_FontFlags(data) {\n var d = data.read_shift(1);\n data.l++;\n var out = {\n fBold: d & 0x01,\n fItalic: d & 0x02,\n fUnderline: d & 0x04,\n fStrikeout: d & 0x08,\n fOutline: d & 0x10,\n fShadow: d & 0x20,\n fCondense: d & 0x40,\n fExtend: d & 0x80\n };\n return out;\n }\n\n function write_FontFlags(font, o) {\n if (!o) o = new_buf(2);\n var grbit = (font.italic ? 0x02 : 0) | (font.strike ? 0x08 : 0) | (font.outline ? 0x10 : 0) | (font.shadow ? 0x20 : 0) | (font.condense ? 0x40 : 0) | (font.extend ? 0x80 : 0);\n o.write_shift(1, grbit);\n o.write_shift(1, 0);\n return o;\n }\n /* [MS-OLEDS] 2.3.1 and 2.3.2 */\n\n\n function parse_ClipboardFormatOrString(o, w) {\n // $FlowIgnore\n var ClipFmt = {\n 2: \"BITMAP\",\n 3: \"METAFILEPICT\",\n 8: \"DIB\",\n 14: \"ENHMETAFILE\"\n };\n var m = o.read_shift(4);\n\n switch (m) {\n case 0x00000000:\n return \"\";\n\n case 0xffffffff:\n case 0xfffffffe:\n return ClipFmt[o.read_shift(4)] || \"\";\n }\n\n if (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n o.l -= 4;\n return o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n }\n\n function parse_ClipboardFormatOrAnsiString(o) {\n return parse_ClipboardFormatOrString(o, 1);\n }\n\n function parse_ClipboardFormatOrUnicodeString(o) {\n return parse_ClipboardFormatOrString(o, 2);\n }\n /* [MS-OLEPS] 2.2 PropertyType */\n //var VT_EMPTY = 0x0000;\n //var VT_NULL = 0x0001;\n\n\n var VT_I2 = 0x0002;\n var VT_I4 = 0x0003; //var VT_R4 = 0x0004;\n //var VT_R8 = 0x0005;\n //var VT_CY = 0x0006;\n //var VT_DATE = 0x0007;\n //var VT_BSTR = 0x0008;\n //var VT_ERROR = 0x000A;\n\n var VT_BOOL = 0x000B;\n var VT_VARIANT = 0x000C; //var VT_DECIMAL = 0x000E;\n //var VT_I1 = 0x0010;\n //var VT_UI1 = 0x0011;\n //var VT_UI2 = 0x0012;\n\n var VT_UI4 = 0x0013; //var VT_I8 = 0x0014;\n //var VT_UI8 = 0x0015;\n //var VT_INT = 0x0016;\n //var VT_UINT = 0x0017;\n\n var VT_LPSTR = 0x001E; //var VT_LPWSTR = 0x001F;\n\n var VT_FILETIME = 0x0040;\n var VT_BLOB = 0x0041; //var VT_STREAM = 0x0042;\n //var VT_STORAGE = 0x0043;\n //var VT_STREAMED_Object = 0x0044;\n //var VT_STORED_Object = 0x0045;\n //var VT_BLOB_Object = 0x0046;\n\n var VT_CF = 0x0047; //var VT_CLSID = 0x0048;\n //var VT_VERSIONED_STREAM = 0x0049;\n\n var VT_VECTOR = 0x1000; //var VT_ARRAY = 0x2000;\n\n var VT_STRING = 0x0050; // 2.3.3.1.11 VtString\n\n var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\n\n var VT_CUSTOM = [VT_STRING, VT_USTR];\n /* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\n\n var DocSummaryPIDDSI = {\n 0x01: {\n n: 'CodePage',\n t: VT_I2\n },\n 0x02: {\n n: 'Category',\n t: VT_STRING\n },\n 0x03: {\n n: 'PresentationFormat',\n t: VT_STRING\n },\n 0x04: {\n n: 'ByteCount',\n t: VT_I4\n },\n 0x05: {\n n: 'LineCount',\n t: VT_I4\n },\n 0x06: {\n n: 'ParagraphCount',\n t: VT_I4\n },\n 0x07: {\n n: 'SlideCount',\n t: VT_I4\n },\n 0x08: {\n n: 'NoteCount',\n t: VT_I4\n },\n 0x09: {\n n: 'HiddenCount',\n t: VT_I4\n },\n 0x0a: {\n n: 'MultimediaClipCount',\n t: VT_I4\n },\n 0x0b: {\n n: 'ScaleCrop',\n t: VT_BOOL\n },\n 0x0c: {\n n: 'HeadingPairs',\n t: VT_VECTOR | VT_VARIANT\n },\n 0x0d: {\n n: 'TitlesOfParts',\n t: VT_VECTOR | VT_LPSTR\n },\n 0x0e: {\n n: 'Manager',\n t: VT_STRING\n },\n 0x0f: {\n n: 'Company',\n t: VT_STRING\n },\n 0x10: {\n n: 'LinksUpToDate',\n t: VT_BOOL\n },\n 0x11: {\n n: 'CharacterCount',\n t: VT_I4\n },\n 0x13: {\n n: 'SharedDoc',\n t: VT_BOOL\n },\n 0x16: {\n n: 'HyperlinksChanged',\n t: VT_BOOL\n },\n 0x17: {\n n: 'AppVersion',\n t: VT_I4,\n p: 'version'\n },\n 0x18: {\n n: 'DigSig',\n t: VT_BLOB\n },\n 0x1A: {\n n: 'ContentType',\n t: VT_STRING\n },\n 0x1B: {\n n: 'ContentStatus',\n t: VT_STRING\n },\n 0x1C: {\n n: 'Language',\n t: VT_STRING\n },\n 0x1D: {\n n: 'Version',\n t: VT_STRING\n },\n 0xFF: {}\n };\n /* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\n\n var SummaryPIDSI = {\n 0x01: {\n n: 'CodePage',\n t: VT_I2\n },\n 0x02: {\n n: 'Title',\n t: VT_STRING\n },\n 0x03: {\n n: 'Subject',\n t: VT_STRING\n },\n 0x04: {\n n: 'Author',\n t: VT_STRING\n },\n 0x05: {\n n: 'Keywords',\n t: VT_STRING\n },\n 0x06: {\n n: 'Comments',\n t: VT_STRING\n },\n 0x07: {\n n: 'Template',\n t: VT_STRING\n },\n 0x08: {\n n: 'LastAuthor',\n t: VT_STRING\n },\n 0x09: {\n n: 'RevNumber',\n t: VT_STRING\n },\n 0x0A: {\n n: 'EditTime',\n t: VT_FILETIME\n },\n 0x0B: {\n n: 'LastPrinted',\n t: VT_FILETIME\n },\n 0x0C: {\n n: 'CreatedDate',\n t: VT_FILETIME\n },\n 0x0D: {\n n: 'ModifiedDate',\n t: VT_FILETIME\n },\n 0x0E: {\n n: 'PageCount',\n t: VT_I4\n },\n 0x0F: {\n n: 'WordCount',\n t: VT_I4\n },\n 0x10: {\n n: 'CharCount',\n t: VT_I4\n },\n 0x11: {\n n: 'Thumbnail',\n t: VT_CF\n },\n 0x12: {\n n: 'Application',\n t: VT_STRING\n },\n 0x13: {\n n: 'DocSecurity',\n t: VT_I4\n },\n 0xFF: {}\n };\n /* [MS-OLEPS] 2.18 */\n\n var SpecialProperties = {\n 0x80000000: {\n n: 'Locale',\n t: VT_UI4\n },\n 0x80000003: {\n n: 'Behavior',\n t: VT_UI4\n },\n 0x72627262: {}\n };\n\n (function () {\n for (var y in SpecialProperties) {\n if (Object.prototype.hasOwnProperty.call(SpecialProperties, y)) DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];\n }\n })();\n\n var DocSummaryRE = evert_key(DocSummaryPIDDSI, \"n\");\n var SummaryRE = evert_key(SummaryPIDSI, \"n\");\n /* [MS-XLS] 2.4.63 Country/Region codes */\n\n var CountryEnum = {\n 0x0001: \"US\",\n // United States\n 0x0002: \"CA\",\n // Canada\n 0x0003: \"\",\n // Latin America (except Brazil)\n 0x0007: \"RU\",\n // Russia\n 0x0014: \"EG\",\n // Egypt\n 0x001E: \"GR\",\n // Greece\n 0x001F: \"NL\",\n // Netherlands\n 0x0020: \"BE\",\n // Belgium\n 0x0021: \"FR\",\n // France\n 0x0022: \"ES\",\n // Spain\n 0x0024: \"HU\",\n // Hungary\n 0x0027: \"IT\",\n // Italy\n 0x0029: \"CH\",\n // Switzerland\n 0x002B: \"AT\",\n // Austria\n 0x002C: \"GB\",\n // United Kingdom\n 0x002D: \"DK\",\n // Denmark\n 0x002E: \"SE\",\n // Sweden\n 0x002F: \"NO\",\n // Norway\n 0x0030: \"PL\",\n // Poland\n 0x0031: \"DE\",\n // Germany\n 0x0034: \"MX\",\n // Mexico\n 0x0037: \"BR\",\n // Brazil\n 0x003d: \"AU\",\n // Australia\n 0x0040: \"NZ\",\n // New Zealand\n 0x0042: \"TH\",\n // Thailand\n 0x0051: \"JP\",\n // Japan\n 0x0052: \"KR\",\n // Korea\n 0x0054: \"VN\",\n // Viet Nam\n 0x0056: \"CN\",\n // China\n 0x005A: \"TR\",\n // Turkey\n 0x0069: \"JS\",\n // Ramastan\n 0x00D5: \"DZ\",\n // Algeria\n 0x00D8: \"MA\",\n // Morocco\n 0x00DA: \"LY\",\n // Libya\n 0x015F: \"PT\",\n // Portugal\n 0x0162: \"IS\",\n // Iceland\n 0x0166: \"FI\",\n // Finland\n 0x01A4: \"CZ\",\n // Czech Republic\n 0x0376: \"TW\",\n // Taiwan\n 0x03C1: \"LB\",\n // Lebanon\n 0x03C2: \"JO\",\n // Jordan\n 0x03C3: \"SY\",\n // Syria\n 0x03C4: \"IQ\",\n // Iraq\n 0x03C5: \"KW\",\n // Kuwait\n 0x03C6: \"SA\",\n // Saudi Arabia\n 0x03CB: \"AE\",\n // United Arab Emirates\n 0x03CC: \"IL\",\n // Israel\n 0x03CE: \"QA\",\n // Qatar\n 0x03D5: \"IR\",\n // Iran\n 0xFFFF: \"US\" // United States\n\n };\n /* [MS-XLS] 2.5.127 */\n\n var XLSFillPattern = [null, 'solid', 'mediumGray', 'darkGray', 'lightGray', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'gray125', 'gray0625'];\n\n function rgbify(arr) {\n return arr.map(function (x) {\n return [x >> 16 & 255, x >> 8 & 255, x & 255];\n });\n }\n /* [MS-XLS] 2.5.161 */\n\n /* [MS-XLSB] 2.5.75 Icv */\n\n\n var _XLSIcv = rgbify([\n /* Color Constants */\n 0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF,\n /* Overridable Defaults */\n 0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0x800000, 0x008000, 0x000080, 0x808000, 0x800080, 0x008080, 0xC0C0C0, 0x808080, 0x9999FF, 0x993366, 0xFFFFCC, 0xCCFFFF, 0x660066, 0xFF8080, 0x0066CC, 0xCCCCFF, 0x000080, 0xFF00FF, 0xFFFF00, 0x00FFFF, 0x800080, 0x800000, 0x008080, 0x0000FF, 0x00CCFF, 0xCCFFFF, 0xCCFFCC, 0xFFFF99, 0x99CCFF, 0xFF99CC, 0xCC99FF, 0xFFCC99, 0x3366FF, 0x33CCCC, 0x99CC00, 0xFFCC00, 0xFF9900, 0xFF6600, 0x666699, 0x969696, 0x003366, 0x339966, 0x003300, 0x333300, 0x993300, 0x993366, 0x333399, 0x333333,\n /* Other entries to appease BIFF8/12 */\n 0xFFFFFF,\n /* 0x40 icvForeground ?? */\n 0x000000,\n /* 0x41 icvBackground ?? */\n 0x000000,\n /* 0x42 icvFrame ?? */\n 0x000000,\n /* 0x43 icv3D ?? */\n 0x000000,\n /* 0x44 icv3DText ?? */\n 0x000000,\n /* 0x45 icv3DHilite ?? */\n 0x000000,\n /* 0x46 icv3DShadow ?? */\n 0x000000,\n /* 0x47 icvHilite ?? */\n 0x000000,\n /* 0x48 icvCtlText ?? */\n 0x000000,\n /* 0x49 icvCtlScrl ?? */\n 0x000000,\n /* 0x4A icvCtlInv ?? */\n 0x000000,\n /* 0x4B icvCtlBody ?? */\n 0x000000,\n /* 0x4C icvCtlFrame ?? */\n 0x000000,\n /* 0x4D icvCtlFore ?? */\n 0x000000,\n /* 0x4E icvCtlBack ?? */\n 0x000000,\n /* 0x4F icvCtlNeutral */\n 0x000000,\n /* 0x50 icvInfoBk ?? */\n 0x000000\n /* 0x51 icvInfoText ?? */\n ]);\n\n var XLSIcv = dup(_XLSIcv);\n /* [MS-XLSB] 2.5.97.2 */\n\n var BErr = {\n 0x00: \"#NULL!\",\n 0x07: \"#DIV/0!\",\n 0x0F: \"#VALUE!\",\n 0x17: \"#REF!\",\n 0x1D: \"#NAME?\",\n 0x24: \"#NUM!\",\n 0x2A: \"#N/A\",\n 0x2B: \"#GETTING_DATA\",\n 0xFF: \"#WTF?\"\n };\n var RBErr = evert_num(BErr);\n /* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n\n /* 12.3 Part Summary */\n\n /* 14.2 Part Summary */\n\n /* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\n\n var ct2type\n /*{[string]:string}*/\n = {\n /* Workbook */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\n /* Worksheet */\n \"application/vnd.ms-excel.binIndexWs\": \"TODO\",\n\n /* Binary Index */\n\n /* Macrosheet */\n \"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n \"application/vnd.ms-excel.binIndexMs\": \"TODO\",\n\n /* Binary Index */\n\n /* File Properties */\n \"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n /* Custom Data Properties */\n \"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n /* PivotTable */\n \"application/vnd.ms-excel.pivotTable\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n /* Chart Objects */\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n /* Chart Colors */\n \"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n /* Chart Style */\n \"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n /* Chart Advanced */\n \"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n /* Calculation Chain */\n \"application/vnd.ms-excel.calcChain\": \"calcchains\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n /* Printer Settings */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n /* ActiveX */\n \"application/vnd.ms-office.activeX\": \"TODO\",\n \"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n /* Custom Toolbars */\n \"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n /* External Data Connections */\n \"application/vnd.ms-excel.connections\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n /* External Links */\n \"application/vnd.ms-excel.externalLink\": \"links\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n /* Metadata */\n \"application/vnd.ms-excel.sheetMetadata\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"TODO\",\n\n /* PivotCache */\n \"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n \"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n /* Query Table */\n \"application/vnd.ms-excel.queryTable\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n /* Shared Workbook */\n \"application/vnd.ms-excel.userNames\": \"TODO\",\n \"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n \"application/vnd.ms-excel.revisionLog\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n /* Single Cell Table */\n \"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n /* Slicer */\n \"application/vnd.ms-excel.slicer\": \"TODO\",\n \"application/vnd.ms-excel.slicerCache\": \"TODO\",\n \"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n \"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n /* Sort Map */\n \"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n /* Table */\n \"application/vnd.ms-excel.table\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n /* Themes */\n \"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n /* Theme Override */\n \"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n /* Timeline */\n \"application/vnd.ms-excel.Timeline+xml\": \"TODO\",\n\n /* verify */\n \"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\",\n\n /* verify */\n\n /* VBA */\n \"application/vnd.ms-office.vbaProject\": \"vba\",\n \"application/vnd.ms-office.vbaProjectSignature\": \"vba\",\n\n /* Volatile Dependencies */\n \"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n /* Control Properties */\n \"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n /* Data Model */\n \"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n /* Survey */\n \"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n /* Drawing */\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n /* VML */\n \"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n \"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n \"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n /* Image */\n \"image/png\": \"TODO\",\n \"sheet\": \"js\"\n };\n\n var CT_LIST = function () {\n var o = {\n workbooks: {\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n xlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n xlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n xlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n xltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n },\n strs: {\n /* Shared Strings */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n xlsb: \"application/vnd.ms-excel.sharedStrings\"\n },\n comments: {\n /* Comments */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n xlsb: \"application/vnd.ms-excel.comments\"\n },\n sheets: {\n /* Worksheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n xlsb: \"application/vnd.ms-excel.worksheet\"\n },\n charts: {\n /* Chartsheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n xlsb: \"application/vnd.ms-excel.chartsheet\"\n },\n dialogs: {\n /* Dialogsheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n xlsb: \"application/vnd.ms-excel.dialogsheet\"\n },\n macros: {\n /* Macrosheet (Excel 4.0 Macros) */\n xlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n xlsb: \"application/vnd.ms-excel.macrosheet\"\n },\n styles: {\n /* Styles */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n xlsb: \"application/vnd.ms-excel.styles\"\n }\n };\n keys(o).forEach(function (k) {\n [\"xlsm\", \"xlam\"].forEach(function (v) {\n if (!o[k][v]) o[k][v] = o[k].xlsx;\n });\n });\n keys(o).forEach(function (k) {\n keys(o[k]).forEach(function (v) {\n ct2type[o[k][v]] = k;\n });\n });\n return o;\n }();\n\n var type2ct\n /*{[string]:Array}*/\n = evert_arr(ct2type);\n XMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';\n\n function new_ct() {\n return {\n workbooks: [],\n sheets: [],\n charts: [],\n dialogs: [],\n macros: [],\n rels: [],\n strs: [],\n comments: [],\n links: [],\n coreprops: [],\n extprops: [],\n custprops: [],\n themes: [],\n styles: [],\n calcchains: [],\n vba: [],\n drawings: [],\n TODO: [],\n xmlns: \"\"\n };\n }\n\n function parse_ct(data) {\n var ct = new_ct();\n if (!data || !data.match) return ct;\n var ctext = {};\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0].replace(nsregex, \"<\")) {\n case ' 0 ? ct.calcchains[0] : \"\";\n ct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n ct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n ct.defaults = ctext;\n delete ct.calcchains;\n return ct;\n }\n\n var CTYPE_XML_ROOT = writextag('Types', null, {\n 'xmlns': XMLNS.CT,\n 'xmlns:xsd': XMLNS.xsd,\n 'xmlns:xsi': XMLNS.xsi\n });\n var CTYPE_DEFAULTS = [['xml', 'application/xml'], ['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'], ['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'], ['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n /* from test files */\n ['bmp', 'image/bmp'], ['png', 'image/png'], ['gif', 'image/gif'], ['emf', 'image/x-emf'], ['wmf', 'image/x-wmf'], ['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'], ['tif', 'image/tiff'], ['tiff', 'image/tiff'], ['pdf', 'application/pdf'], ['rels', type2ct.rels[0]]].map(function (x) {\n return writextag('Default', null, {\n 'Extension': x[0],\n 'ContentType': x[1]\n });\n });\n\n function write_ct(ct, opts) {\n var o = [],\n v;\n o[o.length] = XML_HEADER;\n o[o.length] = CTYPE_XML_ROOT;\n o = o.concat(CTYPE_DEFAULTS);\n /* only write first instance */\n\n var f1 = function f1(w) {\n if (ct[w] && ct[w].length > 0) {\n v = ct[w][0];\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n });\n }\n };\n /* book type-specific */\n\n\n var f2 = function f2(w) {\n (ct[w] || []).forEach(function (v) {\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n });\n });\n };\n /* standard type */\n\n\n var f3 = function f3(t) {\n (ct[t] || []).forEach(function (v) {\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': type2ct[t][0]\n });\n });\n };\n\n f1('workbooks');\n f2('sheets');\n f2('charts');\n f3('themes');\n ['strs', 'styles'].forEach(f1);\n ['coreprops', 'extprops', 'custprops'].forEach(f3);\n f3('vba');\n f3('comments');\n f3('drawings');\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* 9.3 Relationships */\n\n\n var RELS = {\n WB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n SHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n HLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n VML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n XPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n XMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n XLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n CXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n CXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n VBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n };\n /* 9.3.3 Representing Relationships */\n\n function get_rels_path(file) {\n var n = file.lastIndexOf(\"/\");\n return file.slice(0, n + 1) + '_rels/' + file.slice(n + 1) + \".rels\";\n }\n\n function parse_rels(data, currentFilePath) {\n var rels = {\n \"!id\": {}\n };\n if (!data) return rels;\n\n if (currentFilePath.charAt(0) !== '/') {\n currentFilePath = '/' + currentFilePath;\n }\n\n var hash = {};\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n /* 9.3.2.2 OPC_Relationships */\n\n if (y[0] === ' 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n\n var RELS_EXTERN = [RELS.HLINK, RELS.XPATH, RELS.XMISS];\n\n function add_rels(rels, rId, f, type, relobj, targetmode) {\n if (!relobj) relobj = {};\n if (!rels['!id']) rels['!id'] = {};\n if (rId < 0) for (rId = 1; rels['!id']['rId' + rId]; ++rId) {\n /* empty */\n }\n relobj.Id = 'rId' + rId;\n relobj.Type = type;\n relobj.Target = f;\n if (targetmode) relobj.TargetMode = targetmode;else if (RELS_EXTERN.indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n if (rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n rels['!id'][relobj.Id] = relobj;\n rels[('/' + relobj.Target).replace(\"//\", \"/\")] = relobj;\n return rId;\n }\n /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n\n /* Part 3 Section 4 Manifest File */\n\n\n var CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\n\n function parse_manifest(d, opts) {\n var str = xlml_normalize(d);\n var Rn;\n var FEtag;\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3]) {\n case 'manifest':\n break;\n // 4.2 \n\n case 'file-entry':\n // 4.3 \n FEtag = parsexmltag(Rn[0], false);\n if (FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n break;\n\n case 'encryption-data': // 4.4 \n\n case 'algorithm': // 4.5 \n\n case 'start-key-generation': // 4.6 \n\n case 'key-derivation':\n // 4.7 \n throw new Error(\"Unsupported ODS Encryption\");\n\n default:\n if (opts && opts.WTF) throw Rn;\n }\n }\n }\n\n function write_manifest(manifest) {\n var o = [XML_HEADER];\n o.push('\\n');\n o.push(' \\n');\n\n for (var i = 0; i < manifest.length; ++i) {\n o.push(' \\n');\n }\n\n o.push('');\n return o.join(\"\");\n }\n /* Part 3 Section 6 Metadata Manifest File */\n\n\n function write_rdf_type(file, res, tag) {\n return [' \\n', ' \\n', ' \\n'].join(\"\");\n }\n\n function write_rdf_has(base, file) {\n return [' \\n', ' \\n', ' \\n'].join(\"\");\n }\n\n function write_rdf(rdf) {\n var o = [XML_HEADER];\n o.push('\\n');\n\n for (var i = 0; i != rdf.length; ++i) {\n o.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n o.push(write_rdf_has(\"\", rdf[i][0]));\n }\n\n o.push(write_rdf_type(\"\", \"Document\", \"pkg\"));\n o.push('');\n return o.join(\"\");\n }\n /* TODO: pull properties */\n\n\n var write_meta_ods = function () {\n var payload = 'Sheet' + 'JS ' + XLSX.version + '';\n return function wmo() {\n return payload;\n };\n }();\n /* ECMA-376 Part II 11.1 Core Properties Part */\n\n /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\n var CORE_PROPS = [[\"cp:category\", \"Category\"], [\"cp:contentStatus\", \"ContentStatus\"], [\"cp:keywords\", \"Keywords\"], [\"cp:lastModifiedBy\", \"LastAuthor\"], [\"cp:lastPrinted\", \"LastPrinted\"], [\"cp:revision\", \"RevNumber\"], [\"cp:version\", \"Version\"], [\"dc:creator\", \"Author\"], [\"dc:description\", \"Comments\"], [\"dc:identifier\", \"Identifier\"], [\"dc:language\", \"Language\"], [\"dc:subject\", \"Subject\"], [\"dc:title\", \"Title\"], [\"dcterms:created\", \"CreatedDate\", 'date'], [\"dcterms:modified\", \"ModifiedDate\", 'date']];\n XMLNS.CORE_PROPS = \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\";\n RELS.CORE_PROPS = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n\n var CORE_PROPS_REGEX = function () {\n var r = new Array(CORE_PROPS.length);\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i];\n var g = \"(?:\" + f[0].slice(0, f[0].indexOf(\":\")) + \":)\" + f[0].slice(f[0].indexOf(\":\") + 1);\n r[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n }\n\n return r;\n }();\n\n function parse_core_props(data) {\n var p = {};\n data = utf8read(data);\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i],\n cur = data.match(CORE_PROPS_REGEX[i]);\n if (cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n if (f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n }\n\n return p;\n }\n\n var CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {\n //'xmlns': XMLNS.CORE_PROPS,\n 'xmlns:cp': XMLNS.CORE_PROPS,\n 'xmlns:dc': XMLNS.dc,\n 'xmlns:dcterms': XMLNS.dcterms,\n 'xmlns:dcmitype': XMLNS.dcmitype,\n 'xmlns:xsi': XMLNS.xsi\n });\n\n function cp_doit(f, g, h, o, p) {\n if (p[f] != null || g == null || g === \"\") return;\n p[f] = g;\n g = escapexml(g);\n o[o.length] = h ? writextag(f, g, h) : writetag(f, g);\n }\n\n function write_core_props(cp, _opts) {\n var opts = _opts || {};\n var o = [XML_HEADER, CORE_PROPS_XML_ROOT],\n p = {};\n if (!cp && !opts.Props) return o.join(\"\");\n\n if (cp) {\n if (cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\n \"xsi:type\": \"dcterms:W3CDTF\"\n }, o, p);\n if (cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\n \"xsi:type\": \"dcterms:W3CDTF\"\n }, o, p);\n }\n\n for (var i = 0; i != CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i];\n var v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n if (v === true) v = \"1\";else if (v === false) v = \"0\";else if (typeof v == \"number\") v = String(v);\n if (v != null) cp_doit(f[0], v, null, o, p);\n }\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* 15.2.12.3 Extended File Properties Part */\n\n /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\n var EXT_PROPS = [[\"Application\", \"Application\", \"string\"], [\"AppVersion\", \"AppVersion\", \"string\"], [\"Company\", \"Company\", \"string\"], [\"DocSecurity\", \"DocSecurity\", \"string\"], [\"Manager\", \"Manager\", \"string\"], [\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"], [\"SharedDoc\", \"SharedDoc\", \"bool\"], [\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"], [\"ScaleCrop\", \"ScaleCrop\", \"bool\"], [\"HeadingPairs\", \"HeadingPairs\", \"raw\"], [\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]];\n XMLNS.EXT_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\";\n RELS.EXT_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n var PseudoPropsPairs = [\"Worksheets\", \"SheetNames\", \"NamedRanges\", \"DefinedNames\", \"Chartsheets\", \"ChartNames\"];\n\n function load_props_pairs(HP, TOP, props, opts) {\n var v = [];\n if (typeof HP == \"string\") v = parseVector(HP, opts);else for (var j = 0; j < HP.length; ++j) {\n v = v.concat(HP[j].map(function (hp) {\n return {\n v: hp\n };\n }));\n }\n var parts = typeof TOP == \"string\" ? parseVector(TOP, opts).map(function (x) {\n return x.v;\n }) : TOP;\n var idx = 0,\n len = 0;\n if (parts.length > 0) for (var i = 0; i !== v.length; i += 2) {\n len = +v[i + 1].v;\n\n switch (v[i].v) {\n case \"Worksheets\":\n case \"工作表\":\n case \"Листы\":\n case \"أوراق العمل\":\n case \"ワークシート\":\n case \"גליונות עבודה\":\n case \"Arbeitsblätter\":\n case \"Çalışma Sayfaları\":\n case \"Feuilles de calcul\":\n case \"Fogli di lavoro\":\n case \"Folhas de cálculo\":\n case \"Planilhas\":\n case \"Regneark\":\n case \"Hojas de cálculo\":\n case \"Werkbladen\":\n props.Worksheets = len;\n props.SheetNames = parts.slice(idx, idx + len);\n break;\n\n case \"Named Ranges\":\n case \"Rangos con nombre\":\n case \"名前付き一覧\":\n case \"Benannte Bereiche\":\n case \"Navngivne områder\":\n props.NamedRanges = len;\n props.DefinedNames = parts.slice(idx, idx + len);\n break;\n\n case \"Charts\":\n case \"Diagramme\":\n props.Chartsheets = len;\n props.ChartNames = parts.slice(idx, idx + len);\n break;\n }\n\n idx += len;\n }\n }\n\n function parse_ext_props(data, p, opts) {\n var q = {};\n if (!p) p = {};\n data = utf8read(data);\n EXT_PROPS.forEach(function (f) {\n var xml = (data.match(matchtag(f[0])) || [])[1];\n\n switch (f[2]) {\n case \"string\":\n if (xml) p[f[1]] = unescapexml(xml);\n break;\n\n case \"bool\":\n p[f[1]] = xml === \"true\";\n break;\n\n case \"raw\":\n var cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n if (cur && cur.length > 0) q[f[1]] = cur[1];\n break;\n }\n });\n if (q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n return p;\n }\n\n var EXT_PROPS_XML_ROOT = writextag('Properties', null, {\n 'xmlns': XMLNS.EXT_PROPS,\n 'xmlns:vt': XMLNS.vt\n });\n\n function write_ext_props(cp) {\n var o = [],\n W = writextag;\n if (!cp) cp = {};\n cp.Application = \"SheetJS\";\n o[o.length] = XML_HEADER;\n o[o.length] = EXT_PROPS_XML_ROOT;\n EXT_PROPS.forEach(function (f) {\n if (cp[f[1]] === undefined) return;\n var v;\n\n switch (f[2]) {\n case 'string':\n v = escapexml(String(cp[f[1]]));\n break;\n\n case 'bool':\n v = cp[f[1]] ? 'true' : 'false';\n break;\n }\n\n if (v !== undefined) o[o.length] = W(f[0], v);\n });\n /* TODO: HeadingPairs, TitlesOfParts */\n\n o[o.length] = W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets') + W('vt:variant', W('vt:i4', String(cp.Worksheets))), {\n size: 2,\n baseType: \"variant\"\n }));\n o[o.length] = W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function (s) {\n return \"\" + escapexml(s) + \"\";\n }).join(\"\"), {\n size: cp.Worksheets,\n baseType: \"lpstr\"\n }));\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* 15.2.12.2 Custom File Properties Part */\n\n\n XMLNS.CUST_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\";\n RELS.CUST_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n var custregex = /<[^>]+>[^<]*/g;\n\n function parse_cust_props(data, opts) {\n var p = {},\n name = \"\";\n var m = data.match(custregex);\n if (m) for (var i = 0; i != m.length; ++i) {\n var x = m[i],\n y = parsexmltag(x);\n\n switch (y[0]) {\n case '':\n name = null;\n break;\n\n default:\n if (x.indexOf('');\n var type = toks[0].slice(4),\n text = toks[1];\n /* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\n switch (type) {\n case 'lpstr':\n case 'bstr':\n case 'lpwstr':\n p[name] = unescapexml(text);\n break;\n\n case 'bool':\n p[name] = parsexmlbool(text);\n break;\n\n case 'i1':\n case 'i2':\n case 'i4':\n case 'i8':\n case 'int':\n case 'uint':\n p[name] = parseInt(text, 10);\n break;\n\n case 'r4':\n case 'r8':\n case 'decimal':\n p[name] = parseFloat(text);\n break;\n\n case 'filetime':\n case 'date':\n p[name] = parseDate(text);\n break;\n\n case 'cy':\n case 'error':\n p[name] = unescapexml(text);\n break;\n\n default:\n if (type.slice(-1) == '/') break;\n if (opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n }\n } else if (x.slice(0, 2) === \" 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* Common Name -> XLML Name */\n\n\n var XLMLDocPropsMap = {\n Title: 'Title',\n Subject: 'Subject',\n Author: 'Author',\n Keywords: 'Keywords',\n Comments: 'Description',\n LastAuthor: 'LastAuthor',\n RevNumber: 'Revision',\n Application: 'AppName',\n\n /* TotalTime: 'TotalTime', */\n LastPrinted: 'LastPrinted',\n CreatedDate: 'Created',\n ModifiedDate: 'LastSaved',\n\n /* Pages */\n\n /* Words */\n\n /* Characters */\n Category: 'Category',\n\n /* PresentationFormat */\n Manager: 'Manager',\n Company: 'Company',\n\n /* Guid */\n\n /* HyperlinkBase */\n\n /* Bytes */\n\n /* Lines */\n\n /* Paragraphs */\n\n /* CharactersWithSpaces */\n AppVersion: 'Version',\n ContentStatus: 'ContentStatus',\n\n /* NOTE: missing from schema */\n Identifier: 'Identifier',\n\n /* NOTE: missing from schema */\n Language: 'Language'\n /* NOTE: missing from schema */\n\n };\n var evert_XLMLDPM = evert(XLMLDocPropsMap);\n\n function xlml_set_prop(Props, tag, val) {\n tag = evert_XLMLDPM[tag] || tag;\n Props[tag] = val;\n }\n\n function xlml_write_docprops(Props, opts) {\n var o = [];\n keys(XLMLDocPropsMap).map(function (m) {\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n if (CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n }\n\n for (i = 0; i < EXT_PROPS.length; ++i) {\n if (EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n }\n\n throw m;\n }).forEach(function (p) {\n if (Props[p[1]] == null) return;\n var m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\n switch (p[2]) {\n case 'date':\n m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"Z\");\n break;\n }\n\n if (typeof m == 'number') m = String(m);else if (m === true || m === false) {\n m = m ? \"1\" : \"0\";\n } else if (m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"\");\n o.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n });\n return writextag('DocumentProperties', o.join(\"\"), {\n xmlns: XLMLNS.o\n });\n }\n\n function xlml_write_custprops(Props, Custprops) {\n var BLACKLIST = [\"Worksheets\", \"SheetNames\"];\n var T = 'CustomDocumentProperties';\n var o = [];\n if (Props) keys(Props).forEach(function (k) {\n if (!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n if (k == CORE_PROPS[i][1]) return;\n }\n\n for (i = 0; i < EXT_PROPS.length; ++i) {\n if (k == EXT_PROPS[i][1]) return;\n }\n\n for (i = 0; i < BLACKLIST.length; ++i) {\n if (k == BLACKLIST[i]) return;\n }\n\n var m = Props[k];\n var t = \"string\";\n\n if (typeof m == 'number') {\n t = \"float\";\n m = String(m);\n } else if (m === true || m === false) {\n t = \"boolean\";\n m = m ? \"1\" : \"0\";\n } else m = String(m);\n\n o.push(writextag(escapexmltag(k), m, {\n \"dt:dt\": t\n }));\n });\n if (Custprops) keys(Custprops).forEach(function (k) {\n if (!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n if (Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n var m = Custprops[k];\n var t = \"string\";\n\n if (typeof m == 'number') {\n t = \"float\";\n m = String(m);\n } else if (m === true || m === false) {\n t = \"boolean\";\n m = m ? \"1\" : \"0\";\n } else if (m instanceof Date) {\n t = \"dateTime.tz\";\n m = m.toISOString();\n } else m = String(m);\n\n o.push(writextag(escapexmltag(k), m, {\n \"dt:dt\": t\n }));\n });\n return '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n }\n /* [MS-DTYP] 2.3.3 FILETIME */\n\n /* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n\n /* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\n\n\n function parse_FILETIME(blob) {\n var dwLowDateTime = blob.read_shift(4),\n dwHighDateTime = blob.read_shift(4);\n return new Date((dwHighDateTime / 1e7 * Math.pow(2, 32) + dwLowDateTime / 1e7 - 11644473600) * 1000).toISOString().replace(/\\.000/, \"\");\n }\n\n function write_FILETIME(time) {\n var date = typeof time == \"string\" ? new Date(Date.parse(time)) : time;\n var t = date.getTime() / 1000 + 11644473600;\n var l = t % Math.pow(2, 32),\n h = (t - l) / Math.pow(2, 32);\n l *= 1e7;\n h *= 1e7;\n var w = l / Math.pow(2, 32) | 0;\n\n if (w > 0) {\n l = l % Math.pow(2, 32);\n h += w;\n }\n\n var o = new_buf(8);\n o.write_shift(4, l);\n o.write_shift(4, h);\n return o;\n }\n /* [MS-OSHARED] 2.3.3.1.4 Lpstr */\n\n\n function parse_lpstr(blob, type, pad) {\n var start = blob.l;\n var str = blob.read_shift(0, 'lpstr-cp');\n if (pad) while (blob.l - start & 3) {\n ++blob.l;\n }\n return str;\n }\n /* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\n\n\n function parse_lpwstr(blob, type, pad) {\n var str = blob.read_shift(0, 'lpwstr');\n if (pad) blob.l += 4 - (str.length + 1 & 3) & 3;\n return str;\n }\n /* [MS-OSHARED] 2.3.3.1.11 VtString */\n\n /* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\n\n\n function parse_VtStringBase(blob, stringType, pad) {\n if (stringType === 0x1F\n /*VT_LPWSTR*/\n ) return parse_lpwstr(blob);\n return parse_lpstr(blob, stringType, pad);\n }\n\n function parse_VtString(blob, t, pad) {\n return parse_VtStringBase(blob, t, pad === false ? 0 : 4);\n }\n\n function parse_VtUnalignedString(blob, t) {\n if (!t) throw new Error(\"VtUnalignedString must have positive length\");\n return parse_VtStringBase(blob, t, 0);\n }\n /* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\n\n\n function parse_VtVecLpwstrValue(blob) {\n var length = blob.read_shift(4);\n var ret = [];\n\n for (var i = 0; i != length; ++i) {\n var start = blob.l;\n ret[i] = blob.read_shift(0, 'lpwstr').replace(chr0, '');\n if (blob.l - start & 0x02) blob.l += 2;\n }\n\n return ret;\n }\n /* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\n\n\n function parse_VtVecUnalignedLpstrValue(blob) {\n var length = blob.read_shift(4);\n var ret = [];\n\n for (var i = 0; i != length; ++i) {\n ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0, '');\n }\n\n return ret;\n }\n /* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\n\n\n function parse_VtHeadingPair(blob) {\n var start = blob.l;\n var headingString = parse_TypedPropertyValue(blob, VT_USTR);\n if (blob[blob.l] == 0x00 && blob[blob.l + 1] == 0x00 && blob.l - start & 0x02) blob.l += 2;\n var headerParts = parse_TypedPropertyValue(blob, VT_I4);\n return [headingString, headerParts];\n }\n /* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\n\n\n function parse_VtVecHeadingPairValue(blob) {\n var cElements = blob.read_shift(4);\n var out = [];\n\n for (var i = 0; i < cElements / 2; ++i) {\n out.push(parse_VtHeadingPair(blob));\n }\n\n return out;\n }\n /* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\n\n\n function parse_dictionary(blob, CodePage) {\n var cnt = blob.read_shift(4);\n var dict = {};\n\n for (var j = 0; j != cnt; ++j) {\n var pid = blob.read_shift(4);\n var len = blob.read_shift(4);\n dict[pid] = blob.read_shift(len, CodePage === 0x4B0 ? 'utf16le' : 'utf8').replace(chr0, '').replace(chr1, '!');\n if (CodePage === 0x4B0 && len % 2) blob.l += 2;\n }\n\n if (blob.l & 3) blob.l = blob.l >> 2 + 1 << 2;\n return dict;\n }\n /* [MS-OLEPS] 2.9 BLOB */\n\n\n function parse_BLOB(blob) {\n var size = blob.read_shift(4);\n var bytes = blob.slice(blob.l, blob.l + size);\n blob.l += size;\n if ((size & 3) > 0) blob.l += 4 - (size & 3) & 3;\n return bytes;\n }\n /* [MS-OLEPS] 2.11 ClipboardData */\n\n\n function parse_ClipboardData(blob) {\n // TODO\n var o = {};\n o.Size = blob.read_shift(4); //o.Format = blob.read_shift(4);\n\n blob.l += o.Size + 3 - (o.Size - 1) % 4;\n return o;\n }\n /* [MS-OLEPS] 2.15 TypedPropertyValue */\n\n\n function parse_TypedPropertyValue(blob, type, _opts) {\n var t = blob.read_shift(2),\n ret,\n opts = _opts || {};\n blob.l += 2;\n if (type !== VT_VARIANT) if (t !== type && VT_CUSTOM.indexOf(type) === -1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\n switch (type === VT_VARIANT ? t : type) {\n case 0x02\n /*VT_I2*/\n :\n ret = blob.read_shift(2, 'i');\n if (!opts.raw) blob.l += 2;\n return ret;\n\n case 0x03\n /*VT_I4*/\n :\n ret = blob.read_shift(4, 'i');\n return ret;\n\n case 0x0B\n /*VT_BOOL*/\n :\n return blob.read_shift(4) !== 0x0;\n\n case 0x13\n /*VT_UI4*/\n :\n ret = blob.read_shift(4);\n return ret;\n\n case 0x1E\n /*VT_LPSTR*/\n :\n return parse_lpstr(blob, t, 4).replace(chr0, '');\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n return parse_lpwstr(blob);\n\n case 0x40\n /*VT_FILETIME*/\n :\n return parse_FILETIME(blob);\n\n case 0x41\n /*VT_BLOB*/\n :\n return parse_BLOB(blob);\n\n case 0x47\n /*VT_CF*/\n :\n return parse_ClipboardData(blob);\n\n case 0x50\n /*VT_STRING*/\n :\n return parse_VtString(blob, t, !opts.raw).replace(chr0, '');\n\n case 0x51\n /*VT_USTR*/\n :\n return parse_VtUnalignedString(blob, t\n /*, 4*/\n ).replace(chr0, '');\n\n case 0x100C\n /*VT_VECTOR|VT_VARIANT*/\n :\n return parse_VtVecHeadingPairValue(blob);\n\n case 0x101E\n /*VT_VECTOR|VT_LPSTR*/\n :\n case 0x101F\n /*VT_VECTOR|VT_LPWSTR*/\n :\n return t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\n default:\n throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n }\n }\n\n function write_TypedPropertyValue(type, value) {\n var o = new_buf(4),\n p = new_buf(4);\n o.write_shift(4, type == 0x50 ? 0x1F : type);\n\n switch (type) {\n case 0x03\n /*VT_I4*/\n :\n p.write_shift(-4, value);\n break;\n\n case 0x05\n /*VT_I4*/\n :\n p = new_buf(8);\n p.write_shift(8, value, 'f');\n break;\n\n case 0x0B\n /*VT_BOOL*/\n :\n p.write_shift(4, value ? 0x01 : 0x00);\n break;\n\n case 0x40\n /*VT_FILETIME*/\n :\n p = write_FILETIME(value);\n break;\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n case 0x50\n /*VT_STRING*/\n :\n p = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n p.write_shift(4, value.length + 1);\n p.write_shift(0, value, \"dbcs\");\n\n while (p.l != p.length) {\n p.write_shift(1, 0);\n }\n\n break;\n\n default:\n throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n }\n\n return bconcat([o, p]);\n }\n /* [MS-OLEPS] 2.20 PropertySet */\n\n\n function parse_PropertySet(blob, PIDSI) {\n var start_addr = blob.l;\n var size = blob.read_shift(4);\n var NumProps = blob.read_shift(4);\n var Props = [],\n i = 0;\n var CodePage = 0;\n var Dictionary = -1,\n DictObj = {};\n\n for (i = 0; i != NumProps; ++i) {\n var PropID = blob.read_shift(4);\n var Offset = blob.read_shift(4);\n Props[i] = [PropID, Offset + start_addr];\n }\n\n Props.sort(function (x, y) {\n return x[1] - y[1];\n });\n var PropH = {};\n\n for (i = 0; i != NumProps; ++i) {\n if (blob.l !== Props[i][1]) {\n var fail = true;\n if (i > 0 && PIDSI) switch (PIDSI[Props[i - 1][0]].t) {\n case 0x02\n /*VT_I2*/\n :\n if (blob.l + 2 === Props[i][1]) {\n blob.l += 2;\n fail = false;\n }\n\n break;\n\n case 0x50\n /*VT_STRING*/\n :\n if (blob.l <= Props[i][1]) {\n blob.l = Props[i][1];\n fail = false;\n }\n\n break;\n\n case 0x100C\n /*VT_VECTOR|VT_VARIANT*/\n :\n if (blob.l <= Props[i][1]) {\n blob.l = Props[i][1];\n fail = false;\n }\n\n break;\n }\n\n if ((!PIDSI || i == 0) && blob.l <= Props[i][1]) {\n fail = false;\n blob.l = Props[i][1];\n }\n\n if (fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n }\n\n if (PIDSI) {\n var piddsi = PIDSI[Props[i][0]];\n PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {\n raw: true\n });\n if (piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n if (piddsi.n == \"CodePage\") switch (PropH[piddsi.n]) {\n case 0:\n PropH[piddsi.n] = 1252;\n\n /* falls through */\n\n case 874:\n case 932:\n case 936:\n case 949:\n case 950:\n case 1250:\n case 1251:\n case 1253:\n case 1254:\n case 1255:\n case 1256:\n case 1257:\n case 1258:\n case 10000:\n case 1200:\n case 1201:\n case 1252:\n case 65000:\n case -536:\n case 65001:\n case -535:\n set_cp(CodePage = PropH[piddsi.n] >>> 0 & 0xFFFF);\n break;\n\n default:\n throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n }\n } else {\n if (Props[i][0] === 0x1) {\n CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2);\n set_cp(CodePage);\n\n if (Dictionary !== -1) {\n var oldpos = blob.l;\n blob.l = Props[Dictionary][1];\n DictObj = parse_dictionary(blob, CodePage);\n blob.l = oldpos;\n }\n } else if (Props[i][0] === 0) {\n if (CodePage === 0) {\n Dictionary = i;\n blob.l = Props[i + 1][1];\n continue;\n }\n\n DictObj = parse_dictionary(blob, CodePage);\n } else {\n var name = DictObj[Props[i][0]];\n var val;\n /* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\n switch (blob[blob.l]) {\n case 0x41\n /*VT_BLOB*/\n :\n blob.l += 4;\n val = parse_BLOB(blob);\n break;\n\n case 0x1E\n /*VT_LPSTR*/\n :\n blob.l += 4;\n val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n break;\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n blob.l += 4;\n val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n break;\n\n case 0x03\n /*VT_I4*/\n :\n blob.l += 4;\n val = blob.read_shift(4, 'i');\n break;\n\n case 0x13\n /*VT_UI4*/\n :\n blob.l += 4;\n val = blob.read_shift(4);\n break;\n\n case 0x05\n /*VT_R8*/\n :\n blob.l += 4;\n val = blob.read_shift(8, 'f');\n break;\n\n case 0x0B\n /*VT_BOOL*/\n :\n blob.l += 4;\n val = parsebool(blob, 4);\n break;\n\n case 0x40\n /*VT_FILETIME*/\n :\n blob.l += 4;\n val = parseDate(parse_FILETIME(blob));\n break;\n\n default:\n throw new Error(\"unparsed value: \" + blob[blob.l]);\n }\n\n PropH[name] = val;\n }\n }\n }\n\n blob.l = start_addr + size;\n /* step ahead to skip padding */\n\n return PropH;\n }\n\n var XLSPSSkip = [\"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\"].concat(PseudoPropsPairs);\n\n function guess_property_type(val) {\n switch (typeof val) {\n case \"boolean\":\n return 0x0B;\n\n case \"number\":\n return (val | 0) == val ? 0x03 : 0x05;\n\n case \"string\":\n return 0x1F;\n\n case \"object\":\n if (val instanceof Date) return 0x40;\n break;\n }\n\n return -1;\n }\n\n function write_PropertySet(entries, RE, PIDSI) {\n var hdr = new_buf(8),\n piao = [],\n prop = [];\n var sz = 8,\n i = 0;\n var pr = new_buf(8),\n pio = new_buf(8);\n pr.write_shift(4, 0x0002);\n pr.write_shift(4, 0x04B0);\n pio.write_shift(4, 0x0001);\n prop.push(pr);\n piao.push(pio);\n sz += 8 + pr.length;\n\n if (!RE) {\n pio = new_buf(8);\n pio.write_shift(4, 0);\n piao.unshift(pio);\n var bufs = [new_buf(4)];\n bufs[0].write_shift(4, entries.length);\n\n for (i = 0; i < entries.length; ++i) {\n var value = entries[i][0];\n pr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n pr.write_shift(4, i + 2);\n pr.write_shift(4, value.length + 1);\n pr.write_shift(0, value, \"dbcs\");\n\n while (pr.l != pr.length) {\n pr.write_shift(1, 0);\n }\n\n bufs.push(pr);\n }\n\n pr = bconcat(bufs);\n prop.unshift(pr);\n sz += 8 + pr.length;\n }\n\n for (i = 0; i < entries.length; ++i) {\n if (RE && !RE[entries[i][0]]) continue;\n if (XLSPSSkip.indexOf(entries[i][0]) > -1) continue;\n if (entries[i][1] == null) continue;\n var val = entries[i][1],\n idx = 0;\n\n if (RE) {\n idx = +RE[entries[i][0]];\n var pinfo = PIDSI[idx];\n\n if (pinfo.p == \"version\" && typeof val == \"string\") {\n var arr = val.split(\".\");\n val = (+arr[0] << 16) + (+arr[1] || 0);\n }\n\n pr = write_TypedPropertyValue(pinfo.t, val);\n } else {\n var T = guess_property_type(val);\n\n if (T == -1) {\n T = 0x1F;\n val = String(val);\n }\n\n pr = write_TypedPropertyValue(T, val);\n }\n\n prop.push(pr);\n pio = new_buf(8);\n pio.write_shift(4, !RE ? 2 + i : idx);\n piao.push(pio);\n sz += 8 + pr.length;\n }\n\n var w = 8 * (prop.length + 1);\n\n for (i = 0; i < prop.length; ++i) {\n piao[i].write_shift(4, w);\n w += prop[i].length;\n }\n\n hdr.write_shift(4, sz);\n hdr.write_shift(4, prop.length);\n return bconcat([hdr].concat(piao).concat(prop));\n }\n /* [MS-OLEPS] 2.21 PropertySetStream */\n\n\n function parse_PropertySetStream(file, PIDSI, clsid) {\n var blob = file.content;\n if (!blob) return {};\n prep_blob(blob, 0);\n var NumSets,\n FMTID0,\n FMTID1,\n Offset0,\n Offset1 = 0;\n blob.chk('feff', 'Byte Order: ');\n /*var vers = */\n\n blob.read_shift(2); // TODO: check version\n\n var SystemIdentifier = blob.read_shift(4);\n var CLSID = blob.read_shift(16);\n if (CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n NumSets = blob.read_shift(4);\n if (NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n FMTID0 = blob.read_shift(16);\n Offset0 = blob.read_shift(4);\n if (NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);else if (NumSets === 2) {\n FMTID1 = blob.read_shift(16);\n Offset1 = blob.read_shift(4);\n }\n var PSet0 = parse_PropertySet(blob, PIDSI);\n var rval = {\n SystemIdentifier: SystemIdentifier\n };\n\n for (var y in PSet0) {\n rval[y] = PSet0[y];\n } //rval.blob = blob;\n\n\n rval.FMTID = FMTID0; //rval.PSet0 = PSet0;\n\n if (NumSets === 1) return rval;\n if (Offset1 - blob.l == 2) blob.l += 2;\n if (blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n var PSet1;\n\n try {\n PSet1 = parse_PropertySet(blob, null);\n } catch (e) {\n /* empty */\n }\n\n for (y in PSet1) {\n rval[y] = PSet1[y];\n }\n\n rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\n return rval;\n }\n\n function write_PropertySetStream(entries, clsid, RE, PIDSI, entries2, clsid2) {\n var hdr = new_buf(entries2 ? 68 : 48);\n var bufs = [hdr];\n hdr.write_shift(2, 0xFFFE);\n hdr.write_shift(2, 0x0000);\n /* TODO: type 1 props */\n\n hdr.write_shift(4, 0x32363237);\n hdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n hdr.write_shift(4, entries2 ? 2 : 1);\n hdr.write_shift(16, clsid, \"hex\");\n hdr.write_shift(4, entries2 ? 68 : 48);\n var ps0 = write_PropertySet(entries, RE, PIDSI);\n bufs.push(ps0);\n\n if (entries2) {\n var ps1 = write_PropertySet(entries2, null, null);\n hdr.write_shift(16, clsid2, \"hex\");\n hdr.write_shift(4, 68 + ps0.length);\n bufs.push(ps1);\n }\n\n return bconcat(bufs);\n }\n\n function parsenoop2(blob, length) {\n blob.read_shift(length);\n return null;\n }\n\n function writezeroes(n, o) {\n if (!o) o = new_buf(n);\n\n for (var j = 0; j < n; ++j) {\n o.write_shift(1, 0);\n }\n\n return o;\n }\n\n function parslurp(blob, length, cb) {\n var arr = [],\n target = blob.l + length;\n\n while (blob.l < target) {\n arr.push(cb(blob, target - blob.l));\n }\n\n if (target !== blob.l) throw new Error(\"Slurp error\");\n return arr;\n }\n\n function parsebool(blob, length) {\n return blob.read_shift(length) === 0x1;\n }\n\n function writebool(v, o) {\n if (!o) o = new_buf(2);\n o.write_shift(2, +!!v);\n return o;\n }\n\n function parseuint16(blob) {\n return blob.read_shift(2, 'u');\n }\n\n function writeuint16(v, o) {\n if (!o) o = new_buf(2);\n o.write_shift(2, v);\n return o;\n }\n\n function parseuint16a(blob, length) {\n return parslurp(blob, length, parseuint16);\n }\n /* --- 2.5 Structures --- */\n\n /* [MS-XLS] 2.5.10 Bes (boolean or error) */\n\n\n function parse_Bes(blob) {\n var v = blob.read_shift(1),\n t = blob.read_shift(1);\n return t === 0x01 ? v : v === 0x01;\n }\n\n function write_Bes(v, t, o) {\n if (!o) o = new_buf(2);\n o.write_shift(1, t == 'e' ? +v : +!!v);\n o.write_shift(1, t == 'e' ? 1 : 0);\n return o;\n }\n /* [MS-XLS] 2.5.240 ShortXLUnicodeString */\n\n\n function parse_ShortXLUnicodeString(blob, length, opts) {\n var cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);\n var encoding = 'sbcs-cont';\n var cp = current_codepage;\n if (opts && opts.biff >= 8) current_codepage = 1200;\n\n if (!opts || opts.biff == 8) {\n var fHighByte = blob.read_shift(1);\n\n if (fHighByte) {\n encoding = 'dbcs-cont';\n }\n } else if (opts.biff == 12) {\n encoding = 'wstr';\n }\n\n if (opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n var o = cch ? blob.read_shift(cch, encoding) : \"\";\n current_codepage = cp;\n return o;\n }\n /* 2.5.293 XLUnicodeRichExtendedString */\n\n\n function parse_XLUnicodeRichExtendedString(blob) {\n var cp = current_codepage;\n current_codepage = 1200;\n var cch = blob.read_shift(2),\n flags = blob.read_shift(1);\n var\n /*fHighByte = flags & 0x1,*/\n fExtSt = flags & 0x4,\n fRichSt = flags & 0x8;\n var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\n var cRun = 0,\n cbExtRst;\n var z = {};\n if (fRichSt) cRun = blob.read_shift(2);\n if (fExtSt) cbExtRst = blob.read_shift(4);\n var encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n var msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n if (fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\n if (fExtSt) blob.l += cbExtRst; //TODO: parse this\n\n z.t = msg;\n\n if (!fRichSt) {\n z.raw = \"\" + z.t + \"\";\n z.r = z.t;\n }\n\n current_codepage = cp;\n return z;\n }\n\n function write_XLUnicodeRichExtendedString(xlstr) {\n var str = xlstr.t || \"\",\n nfmts = 1;\n var hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n hdr.write_shift(2, str.length);\n hdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n if (nfmts > 1) hdr.write_shift(2, nfmts);\n var otext = new_buf(2 * str.length);\n otext.write_shift(2 * str.length, str, 'utf16le');\n var out = [hdr, otext];\n return bconcat(out);\n }\n /* 2.5.296 XLUnicodeStringNoCch */\n\n\n function parse_XLUnicodeStringNoCch(blob, cch, opts) {\n var retval;\n\n if (opts) {\n if (opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n if (opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n }\n\n var fHighByte = blob.read_shift(1);\n\n if (fHighByte === 0) {\n retval = blob.read_shift(cch, 'sbcs-cont');\n } else {\n retval = blob.read_shift(cch, 'dbcs-cont');\n }\n\n return retval;\n }\n /* 2.5.294 XLUnicodeString */\n\n\n function parse_XLUnicodeString(blob, length, opts) {\n var cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return parse_XLUnicodeStringNoCch(blob, cch, opts);\n }\n /* BIFF5 override */\n\n\n function parse_XLUnicodeString2(blob, length, opts) {\n if (opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n var cch = blob.read_shift(1);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return blob.read_shift(cch, opts.biff <= 4 || !blob.lens ? 'cpstr' : 'sbcs-cont');\n }\n /* TODO: BIFF5 and lower, codepage awareness */\n\n\n function write_XLUnicodeString(str, opts, o) {\n if (!o) o = new_buf(3 + 2 * str.length);\n o.write_shift(2, str.length);\n o.write_shift(1, 1);\n o.write_shift(31, str, 'utf16le');\n return o;\n }\n /* [MS-XLS] 2.5.61 ControlInfo */\n\n\n function parse_ControlInfo(blob) {\n var flags = blob.read_shift(1);\n blob.l++;\n var accel = blob.read_shift(2);\n blob.l += 2;\n return [flags, accel];\n }\n /* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\n\n\n function parse_URLMoniker(blob) {\n var len = blob.read_shift(4),\n start = blob.l;\n var extra = false;\n\n if (len > 24) {\n /* look ahead */\n blob.l += len - 24;\n if (blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n blob.l = start;\n }\n\n var url = blob.read_shift((extra ? len - 24 : len) >> 1, 'utf16le').replace(chr0, \"\");\n if (extra) blob.l += 24;\n return url;\n }\n /* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\n\n\n function parse_FileMoniker(blob) {\n var cAnti = blob.read_shift(2);\n var preamble = \"\";\n\n while (cAnti-- > 0) {\n preamble += \"../\";\n }\n\n var ansiPath = blob.read_shift(0, 'lpstr-ansi');\n blob.l += 2; //var endServer = blob.read_shift(2);\n\n if (blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n var sz = blob.read_shift(4);\n if (sz === 0) return preamble + ansiPath.replace(/\\\\/g, \"/\");\n var bytes = blob.read_shift(4);\n if (blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n var unicodePath = blob.read_shift(bytes >> 1, 'utf16le').replace(chr0, \"\");\n return preamble + unicodePath;\n }\n /* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\n\n\n function parse_HyperlinkMoniker(blob, length) {\n var clsid = blob.read_shift(16);\n length -= 16;\n\n switch (clsid) {\n case \"e0c9ea79f9bace118c8200aa004ba90b\":\n return parse_URLMoniker(blob, length);\n\n case \"0303000000000000c000000000000046\":\n return parse_FileMoniker(blob, length);\n\n default:\n throw new Error(\"Unsupported Moniker \" + clsid);\n }\n }\n /* [MS-OSHARED] 2.3.7.9 HyperlinkString */\n\n\n function parse_HyperlinkString(blob) {\n var len = blob.read_shift(4);\n var o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n return o;\n }\n\n function write_HyperlinkString(str, o) {\n if (!o) o = new_buf(6 + str.length * 2);\n o.write_shift(4, 1 + str.length);\n\n for (var i = 0; i < str.length; ++i) {\n o.write_shift(2, str.charCodeAt(i));\n }\n\n o.write_shift(2, 0);\n return o;\n }\n /* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\n\n\n function parse_Hyperlink(blob, length) {\n var end = blob.l + length;\n var sVer = blob.read_shift(4);\n if (sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n var flags = blob.read_shift(2);\n blob.l += 2;\n var displayName,\n targetFrameName,\n moniker,\n oleMoniker,\n Loc = \"\",\n guid,\n fileTime;\n if (flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n if (flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n if ((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n if ((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n if (flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n if (flags & 0x0020) guid = blob.read_shift(16);\n if (flags & 0x0040) fileTime = parse_FILETIME(blob\n /*, 8*/\n );\n blob.l = end;\n var target = targetFrameName || moniker || oleMoniker || \"\";\n if (target && Loc) target += \"#\" + Loc;\n if (!target) target = \"#\" + Loc;\n if (flags & 0x0002 && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n var out = {\n Target: target\n };\n if (guid) out.guid = guid;\n if (fileTime) out.time = fileTime;\n if (displayName) out.Tooltip = displayName;\n return out;\n }\n\n function write_Hyperlink(hl) {\n var out = new_buf(512),\n i = 0;\n var Target = hl.Target;\n if (Target.slice(0, 7) == \"file://\") Target = Target.slice(7);\n var hashidx = Target.indexOf(\"#\");\n var F = hashidx > -1 ? 0x1f : 0x17;\n\n switch (Target.charAt(0)) {\n case \"#\":\n F = 0x1c;\n break;\n\n case \".\":\n F &= ~2;\n break;\n }\n\n out.write_shift(4, 2);\n out.write_shift(4, F);\n var data = [8, 6815827, 6619237, 4849780, 83];\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(4, data[i]);\n }\n\n if (F == 0x1C) {\n Target = Target.slice(1);\n write_HyperlinkString(Target, out);\n } else if (F & 0x02) {\n data = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(1, parseInt(data[i], 16));\n }\n\n var Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n out.write_shift(4, 2 * (Pretarget.length + 1));\n\n for (i = 0; i < Pretarget.length; ++i) {\n out.write_shift(2, Pretarget.charCodeAt(i));\n }\n\n out.write_shift(2, 0);\n if (F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx + 1) : \"\", out);\n } else {\n data = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(1, parseInt(data[i], 16));\n }\n\n var P = 0;\n\n while (Target.slice(P * 3, P * 3 + 3) == \"../\" || Target.slice(P * 3, P * 3 + 3) == \"..\\\\\") {\n ++P;\n }\n\n out.write_shift(2, P);\n out.write_shift(4, Target.length - 3 * P + 1);\n\n for (i = 0; i < Target.length - 3 * P; ++i) {\n out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n }\n\n out.write_shift(1, 0);\n out.write_shift(2, 0xFFFF);\n out.write_shift(2, 0xDEAD);\n\n for (i = 0; i < 6; ++i) {\n out.write_shift(4, 0);\n }\n }\n\n return out.slice(0, out.l);\n }\n /* 2.5.178 LongRGBA */\n\n\n function parse_LongRGBA(blob) {\n var r = blob.read_shift(1),\n g = blob.read_shift(1),\n b = blob.read_shift(1),\n a = blob.read_shift(1);\n return [r, g, b, a];\n }\n /* 2.5.177 LongRGB */\n\n\n function parse_LongRGB(blob, length) {\n var x = parse_LongRGBA(blob, length);\n x[3] = 0;\n return x;\n }\n /* [MS-XLS] 2.5.19 */\n\n\n function parse_XLSCell(blob) {\n var rw = blob.read_shift(2); // 0-indexed\n\n var col = blob.read_shift(2);\n var ixfe = blob.read_shift(2);\n return {\n r: rw,\n c: col,\n ixfe: ixfe\n };\n }\n\n function write_XLSCell(R, C, ixfe, o) {\n if (!o) o = new_buf(6);\n o.write_shift(2, R);\n o.write_shift(2, C);\n o.write_shift(2, ixfe || 0);\n return o;\n }\n /* [MS-XLS] 2.5.134 */\n\n\n function parse_frtHeader(blob) {\n var rt = blob.read_shift(2);\n var flags = blob.read_shift(2); // TODO: parse these flags\n\n blob.l += 8;\n return {\n type: rt,\n flags: flags\n };\n }\n\n function parse_OptXLUnicodeString(blob, length, opts) {\n return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts);\n }\n /* [MS-XLS] 2.5.344 */\n\n\n function parse_XTI(blob, length, opts) {\n var w = opts.biff > 8 ? 4 : 2;\n var iSupBook = blob.read_shift(w),\n itabFirst = blob.read_shift(w, 'i'),\n itabLast = blob.read_shift(w, 'i');\n return [iSupBook, itabFirst, itabLast];\n }\n /* [MS-XLS] 2.5.218 */\n\n\n function parse_RkRec(blob) {\n var ixfe = blob.read_shift(2);\n var RK = parse_RkNumber(blob);\n return [ixfe, RK];\n }\n /* [MS-XLS] 2.5.1 */\n\n\n function parse_AddinUdf(blob, length, opts) {\n blob.l += 4;\n length -= 4;\n var l = blob.l + length;\n var udfName = parse_ShortXLUnicodeString(blob, length, opts);\n var cb = blob.read_shift(2);\n l -= blob.l;\n if (cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n blob.l += cb;\n return udfName;\n }\n /* [MS-XLS] 2.5.209 TODO: Check sizes */\n\n\n function parse_Ref8U(blob) {\n var rwFirst = blob.read_shift(2);\n var rwLast = blob.read_shift(2);\n var colFirst = blob.read_shift(2);\n var colLast = blob.read_shift(2);\n return {\n s: {\n c: colFirst,\n r: rwFirst\n },\n e: {\n c: colLast,\n r: rwLast\n }\n };\n }\n\n function write_Ref8U(r, o) {\n if (!o) o = new_buf(8);\n o.write_shift(2, r.s.r);\n o.write_shift(2, r.e.r);\n o.write_shift(2, r.s.c);\n o.write_shift(2, r.e.c);\n return o;\n }\n /* [MS-XLS] 2.5.211 */\n\n\n function parse_RefU(blob) {\n var rwFirst = blob.read_shift(2);\n var rwLast = blob.read_shift(2);\n var colFirst = blob.read_shift(1);\n var colLast = blob.read_shift(1);\n return {\n s: {\n c: colFirst,\n r: rwFirst\n },\n e: {\n c: colLast,\n r: rwLast\n }\n };\n }\n /* [MS-XLS] 2.5.207 */\n\n\n var parse_Ref = parse_RefU;\n /* [MS-XLS] 2.5.143 */\n\n function parse_FtCmo(blob) {\n blob.l += 4;\n var ot = blob.read_shift(2);\n var id = blob.read_shift(2);\n var flags = blob.read_shift(2);\n blob.l += 12;\n return [id, ot, flags];\n }\n /* [MS-XLS] 2.5.149 */\n\n\n function parse_FtNts(blob) {\n var out = {};\n blob.l += 4;\n blob.l += 16; // GUID TODO\n\n out.fSharedNote = blob.read_shift(2);\n blob.l += 4;\n return out;\n }\n /* [MS-XLS] 2.5.142 */\n\n\n function parse_FtCf(blob) {\n var out = {};\n blob.l += 4;\n blob.cf = blob.read_shift(2);\n return out;\n }\n /* [MS-XLS] 2.5.140 - 2.5.154 and friends */\n\n\n function parse_FtSkip(blob) {\n blob.l += 2;\n blob.l += blob.read_shift(2);\n }\n\n var FtTab = {\n 0x00: parse_FtSkip,\n\n /* FtEnd */\n 0x04: parse_FtSkip,\n\n /* FtMacro */\n 0x05: parse_FtSkip,\n\n /* FtButton */\n 0x06: parse_FtSkip,\n\n /* FtGmo */\n 0x07: parse_FtCf,\n\n /* FtCf */\n 0x08: parse_FtSkip,\n\n /* FtPioGrbit */\n 0x09: parse_FtSkip,\n\n /* FtPictFmla */\n 0x0A: parse_FtSkip,\n\n /* FtCbls */\n 0x0B: parse_FtSkip,\n\n /* FtRbo */\n 0x0C: parse_FtSkip,\n\n /* FtSbs */\n 0x0D: parse_FtNts,\n\n /* FtNts */\n 0x0E: parse_FtSkip,\n\n /* FtSbsFmla */\n 0x0F: parse_FtSkip,\n\n /* FtGboData */\n 0x10: parse_FtSkip,\n\n /* FtEdoData */\n 0x11: parse_FtSkip,\n\n /* FtRboData */\n 0x12: parse_FtSkip,\n\n /* FtCblsData */\n 0x13: parse_FtSkip,\n\n /* FtLbsData */\n 0x14: parse_FtSkip,\n\n /* FtCblsFmla */\n 0x15: parse_FtCmo\n };\n\n function parse_FtArray(blob, length) {\n var tgt = blob.l + length;\n var fts = [];\n\n while (blob.l < tgt) {\n var ft = blob.read_shift(2);\n blob.l -= 2;\n\n try {\n fts.push(FtTab[ft](blob, tgt - blob.l));\n } catch (e) {\n blob.l = tgt;\n return fts;\n }\n }\n\n if (blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\n return fts;\n }\n /* --- 2.4 Records --- */\n\n /* [MS-XLS] 2.4.21 */\n\n\n function parse_BOF(blob, length) {\n var o = {\n BIFFVer: 0,\n dt: 0\n };\n o.BIFFVer = blob.read_shift(2);\n length -= 2;\n\n if (length >= 2) {\n o.dt = blob.read_shift(2);\n blob.l -= 2;\n }\n\n switch (o.BIFFVer) {\n case 0x0600:\n /* BIFF8 */\n\n case 0x0500:\n /* BIFF5 */\n\n case 0x0400:\n /* BIFF4 */\n\n case 0x0300:\n /* BIFF3 */\n\n case 0x0200:\n /* BIFF2 */\n\n case 0x0002:\n case 0x0007:\n /* BIFF2 */\n break;\n\n default:\n if (length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n }\n\n blob.read_shift(length);\n return o;\n }\n\n function write_BOF(wb, t, o) {\n var h = 0x0600,\n w = 16;\n\n switch (o.bookType) {\n case 'biff8':\n break;\n\n case 'biff5':\n h = 0x0500;\n w = 8;\n break;\n\n case 'biff4':\n h = 0x0004;\n w = 6;\n break;\n\n case 'biff3':\n h = 0x0003;\n w = 6;\n break;\n\n case 'biff2':\n h = 0x0002;\n w = 4;\n break;\n\n case 'xla':\n break;\n\n default:\n throw new Error(\"unsupported BIFF version\");\n }\n\n var out = new_buf(w);\n out.write_shift(2, h);\n out.write_shift(2, t);\n if (w > 4) out.write_shift(2, 0x7262);\n if (w > 6) out.write_shift(2, 0x07CD);\n\n if (w > 8) {\n out.write_shift(2, 0xC009);\n out.write_shift(2, 0x0001);\n out.write_shift(2, 0x0706);\n out.write_shift(2, 0x0000);\n }\n\n return out;\n }\n /* [MS-XLS] 2.4.146 */\n\n\n function parse_InterfaceHdr(blob, length) {\n if (length === 0) return 0x04b0;\n\n if (blob.read_shift(2) !== 0x04b0) {\n /* empty */\n }\n\n return 0x04b0;\n }\n /* [MS-XLS] 2.4.349 */\n\n\n function parse_WriteAccess(blob, length, opts) {\n if (opts.enc) {\n blob.l += length;\n return \"\";\n }\n\n var l = blob.l; // TODO: make sure XLUnicodeString doesnt overrun\n\n var UserName = parse_XLUnicodeString2(blob, 0, opts);\n blob.read_shift(length + l - blob.l);\n return UserName;\n }\n\n function write_WriteAccess(s, opts) {\n var b8 = !opts || opts.biff == 8;\n var o = new_buf(b8 ? 112 : 54);\n o.write_shift(opts.biff == 8 ? 2 : 1, 7);\n if (b8) o.write_shift(1, 0);\n o.write_shift(4, 0x33336853);\n o.write_shift(4, 0x00534A74 | (b8 ? 0 : 0x20000000));\n\n while (o.l < o.length) {\n o.write_shift(1, b8 ? 0 : 32);\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.351 */\n\n\n function parse_WsBool(blob, length, opts) {\n var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n return {\n fDialog: flags & 0x10,\n fBelow: flags & 0x40,\n fRight: flags & 0x80\n };\n }\n /* [MS-XLS] 2.4.28 */\n\n\n function parse_BoundSheet8(blob, length, opts) {\n var pos = blob.read_shift(4);\n var hidden = blob.read_shift(1) & 0x03;\n var dt = blob.read_shift(1);\n\n switch (dt) {\n case 0:\n dt = 'Worksheet';\n break;\n\n case 1:\n dt = 'Macrosheet';\n break;\n\n case 2:\n dt = 'Chartsheet';\n break;\n\n case 6:\n dt = 'VBAModule';\n break;\n }\n\n var name = parse_ShortXLUnicodeString(blob, 0, opts);\n if (name.length === 0) name = \"Sheet1\";\n return {\n pos: pos,\n hs: hidden,\n dt: dt,\n name: name\n };\n }\n\n function write_BoundSheet8(data, opts) {\n var w = !opts || opts.biff >= 8 ? 2 : 1;\n var o = new_buf(8 + w * data.name.length);\n o.write_shift(4, data.pos);\n o.write_shift(1, data.hs || 0);\n o.write_shift(1, data.dt);\n o.write_shift(1, data.name.length);\n if (opts.biff >= 8) o.write_shift(1, 1);\n o.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n var out = o.slice(0, o.l);\n out.l = o.l;\n return out;\n }\n /* [MS-XLS] 2.4.265 TODO */\n\n\n function parse_SST(blob, length) {\n var end = blob.l + length;\n var cnt = blob.read_shift(4);\n var ucnt = blob.read_shift(4);\n var strs = [];\n\n for (var i = 0; i != ucnt && blob.l < end; ++i) {\n strs.push(parse_XLUnicodeRichExtendedString(blob));\n }\n\n strs.Count = cnt;\n strs.Unique = ucnt;\n return strs;\n }\n\n function write_SST(sst, opts) {\n var header = new_buf(8);\n header.write_shift(4, sst.Count);\n header.write_shift(4, sst.Unique);\n var strs = [];\n\n for (var j = 0; j < sst.length; ++j) {\n strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n }\n\n var o = bconcat([header].concat(strs));\n o.parts = [header.length].concat(strs.map(function (str) {\n return str.length;\n }));\n return o;\n }\n /* [MS-XLS] 2.4.107 */\n\n\n function parse_ExtSST(blob, length) {\n var extsst = {};\n extsst.dsst = blob.read_shift(2);\n blob.l += length - 2;\n return extsst;\n }\n /* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\n\n\n function parse_Row(blob) {\n var z = {};\n z.r = blob.read_shift(2);\n z.c = blob.read_shift(2);\n z.cnt = blob.read_shift(2) - z.c;\n var miyRw = blob.read_shift(2);\n blob.l += 4; // reserved(2), unused(2)\n\n var flags = blob.read_shift(1); // various flags\n\n blob.l += 3; // reserved(8), ixfe(12), flags(4)\n\n if (flags & 0x07) z.level = flags & 0x07; // collapsed: flags & 0x10\n\n if (flags & 0x20) z.hidden = true;\n if (flags & 0x40) z.hpt = miyRw / 20;\n return z;\n }\n /* [MS-XLS] 2.4.125 */\n\n\n function parse_ForceFullCalculation(blob) {\n var header = parse_frtHeader(blob);\n if (header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n var fullcalc = blob.read_shift(4);\n return fullcalc !== 0x0;\n }\n /* [MS-XLS] 2.4.215 rt */\n\n\n function parse_RecalcId(blob) {\n blob.read_shift(2);\n return blob.read_shift(4);\n }\n /* [MS-XLS] 2.4.87 */\n\n\n function parse_DefaultRowHeight(blob, length, opts) {\n var f = 0;\n\n if (!(opts && opts.biff == 2)) {\n f = blob.read_shift(2);\n }\n\n var miyRw = blob.read_shift(2);\n\n if (opts && opts.biff == 2) {\n f = 1 - (miyRw >> 15);\n miyRw &= 0x7fff;\n }\n\n var fl = {\n Unsynced: f & 1,\n DyZero: (f & 2) >> 1,\n ExAsc: (f & 4) >> 2,\n ExDsc: (f & 8) >> 3\n };\n return [fl, miyRw];\n }\n /* [MS-XLS] 2.4.345 TODO */\n\n\n function parse_Window1(blob) {\n var xWn = blob.read_shift(2),\n yWn = blob.read_shift(2),\n dxWn = blob.read_shift(2),\n dyWn = blob.read_shift(2);\n var flags = blob.read_shift(2),\n iTabCur = blob.read_shift(2),\n iTabFirst = blob.read_shift(2);\n var ctabSel = blob.read_shift(2),\n wTabRatio = blob.read_shift(2);\n return {\n Pos: [xWn, yWn],\n Dim: [dxWn, dyWn],\n Flags: flags,\n CurTab: iTabCur,\n FirstTab: iTabFirst,\n Selected: ctabSel,\n TabRatio: wTabRatio\n };\n }\n\n function write_Window1() {\n var o = new_buf(18);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0x7260);\n o.write_shift(2, 0x44c0);\n o.write_shift(2, 0x38);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 1);\n o.write_shift(2, 0x01f4);\n return o;\n }\n /* [MS-XLS] 2.4.346 TODO */\n\n\n function parse_Window2(blob, length, opts) {\n if (opts && opts.biff >= 2 && opts.biff < 5) return {};\n var f = blob.read_shift(2);\n return {\n RTL: f & 0x40\n };\n }\n\n function write_Window2(view) {\n var o = new_buf(18),\n f = 0x6b6;\n if (view && view.RTL) f |= 0x40;\n o.write_shift(2, f);\n o.write_shift(4, 0);\n o.write_shift(4, 64);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n }\n /* [MS-XLS] 2.4.189 TODO */\n\n\n function parse_Pane() {}\n /* [MS-XLS] 2.4.122 TODO */\n\n\n function parse_Font(blob, length, opts) {\n var o = {\n dyHeight: blob.read_shift(2),\n fl: blob.read_shift(2)\n };\n\n switch (opts && opts.biff || 8) {\n case 2:\n break;\n\n case 3:\n case 4:\n blob.l += 2;\n break;\n\n default:\n blob.l += 10;\n break;\n }\n\n o.name = parse_ShortXLUnicodeString(blob, 0, opts);\n return o;\n }\n\n function write_Font(data, opts) {\n var name = data.name || \"Arial\";\n var b5 = opts && opts.biff == 5,\n w = b5 ? 15 + name.length : 16 + 2 * name.length;\n var o = new_buf(w);\n o.write_shift(2, (data.sz || 12) * 20);\n o.write_shift(4, 0);\n o.write_shift(2, 400);\n o.write_shift(4, 0);\n o.write_shift(2, 0);\n o.write_shift(1, name.length);\n if (!b5) o.write_shift(1, 1);\n o.write_shift((b5 ? 1 : 2) * name.length, name, b5 ? \"sbcs\" : \"utf16le\");\n return o;\n }\n /* [MS-XLS] 2.4.149 */\n\n\n function parse_LabelSst(blob) {\n var cell = parse_XLSCell(blob);\n cell.isst = blob.read_shift(4);\n return cell;\n }\n\n function write_LabelSst(R, C, v, os) {\n var o = new_buf(10);\n write_XLSCell(R, C, os, o);\n o.write_shift(4, v);\n return o;\n }\n /* [MS-XLS] 2.4.148 */\n\n\n function parse_Label(blob, length, opts) {\n if (opts.biffguess && opts.biff == 2) opts.biff = 5;\n var target = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2) blob.l++;\n var str = parse_XLUnicodeString(blob, target - blob.l, opts);\n cell.val = str;\n return cell;\n }\n\n function write_Label(R, C, v, os, opts) {\n var b8 = !opts || opts.biff == 8;\n var o = new_buf(6 + 2 + +b8 + (1 + b8) * v.length);\n write_XLSCell(R, C, os, o);\n o.write_shift(2, v.length);\n if (b8) o.write_shift(1, 1);\n o.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n return o;\n }\n /* [MS-XLS] 2.4.126 Number Formats */\n\n\n function parse_Format(blob, length, opts) {\n var numFmtId = blob.read_shift(2);\n var fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n return [numFmtId, fmtstr];\n }\n\n function write_Format(i, f, opts, o) {\n var b5 = opts && opts.biff == 5;\n if (!o) o = new_buf(b5 ? 3 + f.length : 5 + 2 * f.length);\n o.write_shift(2, i);\n o.write_shift(b5 ? 1 : 2, f.length);\n if (!b5) o.write_shift(1, 1);\n o.write_shift((b5 ? 1 : 2) * f.length, f, b5 ? 'sbcs' : 'utf16le');\n var out = o.length > o.l ? o.slice(0, o.l) : o;\n if (out.l == null) out.l = out.length;\n return out;\n }\n\n var parse_BIFF2Format = parse_XLUnicodeString2;\n /* [MS-XLS] 2.4.90 */\n\n function parse_Dimensions(blob, length, opts) {\n var end = blob.l + length;\n var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n var r = blob.read_shift(w),\n R = blob.read_shift(w);\n var c = blob.read_shift(2),\n C = blob.read_shift(2);\n blob.l = end;\n return {\n s: {\n r: r,\n c: c\n },\n e: {\n r: R,\n c: C\n }\n };\n }\n\n function write_Dimensions(range, opts) {\n var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n var o = new_buf(2 * w + 6);\n o.write_shift(w, range.s.r);\n o.write_shift(w, range.e.r + 1);\n o.write_shift(2, range.s.c);\n o.write_shift(2, range.e.c + 1);\n o.write_shift(2, 0);\n return o;\n }\n /* [MS-XLS] 2.4.220 */\n\n\n function parse_RK(blob) {\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var rkrec = parse_RkRec(blob);\n return {\n r: rw,\n c: col,\n ixfe: rkrec[0],\n rknum: rkrec[1]\n };\n }\n /* [MS-XLS] 2.4.175 */\n\n\n function parse_MulRk(blob, length) {\n var target = blob.l + length - 2;\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var rkrecs = [];\n\n while (blob.l < target) {\n rkrecs.push(parse_RkRec(blob));\n }\n\n if (blob.l !== target) throw new Error(\"MulRK read error\");\n var lastcol = blob.read_shift(2);\n if (rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n return {\n r: rw,\n c: col,\n C: lastcol,\n rkrec: rkrecs\n };\n }\n /* [MS-XLS] 2.4.174 */\n\n\n function parse_MulBlank(blob, length) {\n var target = blob.l + length - 2;\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var ixfes = [];\n\n while (blob.l < target) {\n ixfes.push(blob.read_shift(2));\n }\n\n if (blob.l !== target) throw new Error(\"MulBlank read error\");\n var lastcol = blob.read_shift(2);\n if (ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n return {\n r: rw,\n c: col,\n C: lastcol,\n ixfe: ixfes\n };\n }\n /* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\n\n\n function parse_CellStyleXF(blob, length, style, opts) {\n var o = {};\n var a = blob.read_shift(4),\n b = blob.read_shift(4);\n var c = blob.read_shift(4),\n d = blob.read_shift(2);\n o.patternType = XLSFillPattern[c >> 26];\n if (!opts.cellStyles) return o;\n o.alc = a & 0x07;\n o.fWrap = a >> 3 & 0x01;\n o.alcV = a >> 4 & 0x07;\n o.fJustLast = a >> 7 & 0x01;\n o.trot = a >> 8 & 0xFF;\n o.cIndent = a >> 16 & 0x0F;\n o.fShrinkToFit = a >> 20 & 0x01;\n o.iReadOrder = a >> 22 & 0x02;\n o.fAtrNum = a >> 26 & 0x01;\n o.fAtrFnt = a >> 27 & 0x01;\n o.fAtrAlc = a >> 28 & 0x01;\n o.fAtrBdr = a >> 29 & 0x01;\n o.fAtrPat = a >> 30 & 0x01;\n o.fAtrProt = a >> 31 & 0x01;\n o.dgLeft = b & 0x0F;\n o.dgRight = b >> 4 & 0x0F;\n o.dgTop = b >> 8 & 0x0F;\n o.dgBottom = b >> 12 & 0x0F;\n o.icvLeft = b >> 16 & 0x7F;\n o.icvRight = b >> 23 & 0x7F;\n o.grbitDiag = b >> 30 & 0x03;\n o.icvTop = c & 0x7F;\n o.icvBottom = c >> 7 & 0x7F;\n o.icvDiag = c >> 14 & 0x7F;\n o.dgDiag = c >> 21 & 0x0F;\n o.icvFore = d & 0x7F;\n o.icvBack = d >> 7 & 0x7F;\n o.fsxButton = d >> 14 & 0x01;\n return o;\n } //function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n //function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n /* [MS-XLS] 2.4.353 TODO: actually do this right */\n\n\n function parse_XF(blob, length, opts) {\n var o = {};\n o.ifnt = blob.read_shift(2);\n o.numFmtId = blob.read_shift(2);\n o.flags = blob.read_shift(2);\n o.fStyle = o.flags >> 2 & 0x01;\n length -= 6;\n o.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n return o;\n }\n\n function write_XF(data, ixfeP, opts, o) {\n var b5 = opts && opts.biff == 5;\n if (!o) o = new_buf(b5 ? 16 : 20);\n o.write_shift(2, 0);\n\n if (data.style) {\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, 0xFFF4);\n } else {\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, ixfeP << 4);\n }\n\n var f = 0;\n if (data.numFmtId > 0 && b5) f |= 0x0400;\n o.write_shift(4, f);\n o.write_shift(4, 0);\n if (!b5) o.write_shift(4, 0);\n o.write_shift(2, 0);\n return o;\n }\n /* [MS-XLS] 2.4.134 */\n\n\n function parse_Guts(blob) {\n blob.l += 4;\n var out = [blob.read_shift(2), blob.read_shift(2)];\n if (out[0] !== 0) out[0]--;\n if (out[1] !== 0) out[1]--;\n if (out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n return out;\n }\n\n function write_Guts(guts) {\n var o = new_buf(8);\n o.write_shift(4, 0);\n o.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n o.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n return o;\n }\n /* [MS-XLS] 2.4.24 */\n\n\n function parse_BoolErr(blob, length, opts) {\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2 || length == 9) ++blob.l;\n var val = parse_Bes(blob, 2);\n cell.val = val;\n cell.t = val === true || val === false ? 'b' : 'e';\n return cell;\n }\n\n function write_BoolErr(R, C, v, os, opts, t) {\n var o = new_buf(8);\n write_XLSCell(R, C, os, o);\n write_Bes(v, t, o);\n return o;\n }\n /* [MS-XLS] 2.4.180 Number */\n\n\n function parse_Number(blob, length, opts) {\n if (opts.biffguess && opts.biff == 2) opts.biff = 5;\n var cell = parse_XLSCell(blob, 6);\n var xnum = parse_Xnum(blob, 8);\n cell.val = xnum;\n return cell;\n }\n\n function write_Number(R, C, v, os) {\n var o = new_buf(14);\n write_XLSCell(R, C, os, o);\n write_Xnum(v, o);\n return o;\n }\n\n var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n /* [MS-XLS] 2.4.271 */\n\n function parse_SupBook(blob, length, opts) {\n var end = blob.l + length;\n var ctab = blob.read_shift(2);\n var cch = blob.read_shift(2);\n opts.sbcch = cch;\n if (cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n if (cch < 0x01 || cch > 0xff) throw new Error(\"Unexpected SupBook type: \" + cch);\n var virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n /* TODO: 2.5.277 Virtual Path */\n\n var rgst = [];\n\n while (end > blob.l) {\n rgst.push(parse_XLUnicodeString(blob));\n }\n\n return [cch, ctab, virtPath, rgst];\n }\n /* [MS-XLS] 2.4.105 TODO */\n\n\n function parse_ExternName(blob, length, opts) {\n var flags = blob.read_shift(2);\n var body;\n var o = {\n fBuiltIn: flags & 0x01,\n fWantAdvise: flags >>> 1 & 0x01,\n fWantPict: flags >>> 2 & 0x01,\n fOle: flags >>> 3 & 0x01,\n fOleLink: flags >>> 4 & 0x01,\n cf: flags >>> 5 & 0x3FF,\n fIcon: flags >>> 15 & 0x01\n };\n if (opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length - 2, opts); //else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\n o.body = body || blob.read_shift(length - 2);\n if (typeof body === \"string\") o.Name = body;\n return o;\n }\n /* [MS-XLS] 2.4.150 TODO */\n\n\n var XLSLblBuiltIn = [\"_xlnm.Consolidate_Area\", \"_xlnm.Auto_Open\", \"_xlnm.Auto_Close\", \"_xlnm.Extract\", \"_xlnm.Database\", \"_xlnm.Criteria\", \"_xlnm.Print_Area\", \"_xlnm.Print_Titles\", \"_xlnm.Recorder\", \"_xlnm.Data_Form\", \"_xlnm.Auto_Activate\", \"_xlnm.Auto_Deactivate\", \"_xlnm.Sheet_Title\", \"_xlnm._FilterDatabase\"];\n\n function parse_Lbl(blob, length, opts) {\n var target = blob.l + length;\n var flags = blob.read_shift(2);\n var chKey = blob.read_shift(1);\n var cch = blob.read_shift(1);\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n var itab = 0;\n\n if (!opts || opts.biff >= 5) {\n if (opts.biff != 5) blob.l += 2;\n itab = blob.read_shift(2);\n if (opts.biff == 5) blob.l += 2;\n blob.l += 4;\n }\n\n var name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n if (flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n var npflen = target - blob.l;\n if (opts && opts.biff == 2) --npflen;\n var rgce = target == blob.l || cce === 0 || !(npflen > 0) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n return {\n chKey: chKey,\n Name: name,\n itab: itab,\n rgce: rgce\n };\n }\n /* [MS-XLS] 2.4.106 TODO: verify filename encoding */\n\n\n function parse_ExternSheet(blob, length, opts) {\n if (opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n var o = [],\n target = blob.l + length,\n len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\n while (len-- !== 0) {\n o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n } // [iSupBook, itabFirst, itabLast];\n\n\n if (blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n return o;\n }\n\n function parse_BIFF5ExternSheet(blob, length, opts) {\n if (blob[blob.l + 1] == 0x03) blob[blob.l]++;\n var o = parse_ShortXLUnicodeString(blob, length, opts);\n return o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n }\n /* [MS-XLS] 2.4.176 TODO: check older biff */\n\n\n function parse_NameCmt(blob, length, opts) {\n if (opts.biff < 8) {\n blob.l += length;\n return;\n }\n\n var cchName = blob.read_shift(2);\n var cchComment = blob.read_shift(2);\n var name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n var comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n return [name, comment];\n }\n /* [MS-XLS] 2.4.260 */\n\n\n function parse_ShrFmla(blob, length, opts) {\n var ref = parse_RefU(blob, 6);\n blob.l++;\n var cUse = blob.read_shift(1);\n length -= 8;\n return [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n }\n /* [MS-XLS] 2.4.4 TODO */\n\n\n function parse_Array(blob, length, opts) {\n var ref = parse_Ref(blob, 6);\n /* TODO: fAlwaysCalc */\n\n switch (opts.biff) {\n case 2:\n blob.l++;\n length -= 7;\n break;\n\n case 3:\n case 4:\n blob.l += 2;\n length -= 8;\n break;\n\n default:\n blob.l += 6;\n length -= 12;\n }\n\n return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n }\n /* [MS-XLS] 2.4.173 */\n\n\n function parse_MTRSettings(blob) {\n var fMTREnabled = blob.read_shift(4) !== 0x00;\n var fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n var cUserThreadCount = blob.read_shift(4);\n return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n }\n /* [MS-XLS] 2.5.186 TODO: BIFF5 */\n\n\n function parse_NoteSh(blob, length, opts) {\n if (opts.biff < 8) return;\n var row = blob.read_shift(2),\n col = blob.read_shift(2);\n var flags = blob.read_shift(2),\n idObj = blob.read_shift(2);\n var stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n if (opts.biff < 8) blob.read_shift(1);\n return [{\n r: row,\n c: col\n }, stAuthor, idObj, flags];\n }\n /* [MS-XLS] 2.4.179 */\n\n\n function parse_Note(blob, length, opts) {\n /* TODO: Support revisions */\n return parse_NoteSh(blob, length, opts);\n }\n /* [MS-XLS] 2.4.168 */\n\n\n function parse_MergeCells(blob, length) {\n var merges = [];\n var cmcs = blob.read_shift(2);\n\n while (cmcs--) {\n merges.push(parse_Ref8U(blob, length));\n }\n\n return merges;\n }\n\n function write_MergeCells(merges) {\n var o = new_buf(2 + merges.length * 8);\n o.write_shift(2, merges.length);\n\n for (var i = 0; i < merges.length; ++i) {\n write_Ref8U(merges[i], o);\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.181 TODO: parse all the things! */\n\n\n function parse_Obj(blob, length, opts) {\n if (opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n var cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\n var fts = parse_FtArray(blob, length - 22, cmo[1]);\n return {\n cmo: cmo,\n ft: fts\n };\n }\n /* from older spec */\n\n\n var parse_BIFF5OT = [];\n\n parse_BIFF5OT[0x08] = function (blob, length) {\n var tgt = blob.l + length;\n blob.l += 10; // todo\n\n var cf = blob.read_shift(2);\n blob.l += 4;\n blob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\n blob.l += 2;\n blob.l += 2; //var grbit = blob.read_shift(2);\n\n blob.l += 4;\n var cchName = blob.read_shift(1);\n blob.l += cchName; // TODO: stName\n\n blob.l = tgt; // TODO: fmla\n\n return {\n fmt: cf\n };\n };\n\n function parse_BIFF5Obj(blob, length, opts) {\n blob.l += 4; //var cnt = blob.read_shift(4);\n\n var ot = blob.read_shift(2);\n var id = blob.read_shift(2);\n var grbit = blob.read_shift(2);\n blob.l += 2; //var colL = blob.read_shift(2);\n\n blob.l += 2; //var dxL = blob.read_shift(2);\n\n blob.l += 2; //var rwT = blob.read_shift(2);\n\n blob.l += 2; //var dyT = blob.read_shift(2);\n\n blob.l += 2; //var colR = blob.read_shift(2);\n\n blob.l += 2; //var dxR = blob.read_shift(2);\n\n blob.l += 2; //var rwB = blob.read_shift(2);\n\n blob.l += 2; //var dyB = blob.read_shift(2);\n\n blob.l += 2; //var cbMacro = blob.read_shift(2);\n\n blob.l += 6;\n length -= 36;\n var fts = [];\n fts.push((parse_BIFF5OT[ot] || parsenoop)(blob, length, opts));\n return {\n cmo: [id, ot, grbit],\n ft: fts\n };\n }\n /* [MS-XLS] 2.4.329 TODO: parse properly */\n\n\n function parse_TxO(blob, length, opts) {\n var s = blob.l;\n var texts = \"\";\n\n try {\n blob.l += 4;\n var ot = (opts.lastobj || {\n cmo: [0, 0]\n }).cmo[1];\n var controlInfo; // eslint-disable-line no-unused-vars\n\n if ([0, 5, 7, 11, 12, 14].indexOf(ot) == -1) blob.l += 6;else controlInfo = parse_ControlInfo(blob, 6, opts);\n var cchText = blob.read_shift(2);\n /*var cbRuns = */\n\n blob.read_shift(2);\n /*var ifntEmpty = */\n\n parseuint16(blob, 2);\n var len = blob.read_shift(2);\n blob.l += len; //var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n for (var i = 1; i < blob.lens.length - 1; ++i) {\n if (blob.l - s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n var hdr = blob[blob.l];\n var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i + 1] - blob.lens[i] - 1);\n texts += t;\n if (texts.length >= (hdr ? cchText : 2 * cchText)) break;\n }\n\n if (texts.length !== cchText && texts.length !== cchText * 2) {\n throw new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n }\n\n blob.l = s + length;\n /* [MS-XLS] 2.5.272 TxORuns */\n //\tvar rgTxoRuns = [];\n //\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n //\tvar cchText2 = blob.read_shift(2);\n //\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n //\tblob.l += 6;\n //\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\n return {\n t: texts\n };\n } catch (e) {\n blob.l = s + length;\n return {\n t: texts\n };\n }\n }\n /* [MS-XLS] 2.4.140 */\n\n\n function parse_HLink(blob, length) {\n var ref = parse_Ref8U(blob, 8);\n blob.l += 16;\n /* CLSID */\n\n var hlink = parse_Hyperlink(blob, length - 24);\n return [ref, hlink];\n }\n\n function write_HLink(hl) {\n var O = new_buf(24);\n var ref = decode_cell(hl[0]);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.c);\n O.write_shift(2, ref.c);\n var clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n for (var i = 0; i < 16; ++i) {\n O.write_shift(1, parseInt(clsid[i], 16));\n }\n\n return bconcat([O, write_Hyperlink(hl[1])]);\n }\n /* [MS-XLS] 2.4.141 */\n\n\n function parse_HLinkTooltip(blob, length) {\n blob.read_shift(2);\n var ref = parse_Ref8U(blob, 8);\n var wzTooltip = blob.read_shift((length - 10) / 2, 'dbcs-cont');\n wzTooltip = wzTooltip.replace(chr0, \"\");\n return [ref, wzTooltip];\n }\n\n function write_HLinkTooltip(hl) {\n var TT = hl[1].Tooltip;\n var O = new_buf(10 + 2 * (TT.length + 1));\n O.write_shift(2, 0x0800);\n var ref = decode_cell(hl[0]);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.c);\n O.write_shift(2, ref.c);\n\n for (var i = 0; i < TT.length; ++i) {\n O.write_shift(2, TT.charCodeAt(i));\n }\n\n O.write_shift(2, 0);\n return O;\n }\n /* [MS-XLS] 2.4.63 */\n\n\n function parse_Country(blob) {\n var o = [0, 0],\n d;\n d = blob.read_shift(2);\n o[0] = CountryEnum[d] || d;\n d = blob.read_shift(2);\n o[1] = CountryEnum[d] || d;\n return o;\n }\n\n function write_Country(o) {\n if (!o) o = new_buf(4);\n o.write_shift(2, 0x01);\n o.write_shift(2, 0x01);\n return o;\n }\n /* [MS-XLS] 2.4.50 ClrtClient */\n\n\n function parse_ClrtClient(blob) {\n var ccv = blob.read_shift(2);\n var o = [];\n\n while (ccv-- > 0) {\n o.push(parse_LongRGB(blob, 8));\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.188 */\n\n\n function parse_Palette(blob) {\n var ccv = blob.read_shift(2);\n var o = [];\n\n while (ccv-- > 0) {\n o.push(parse_LongRGB(blob, 8));\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.354 */\n\n\n function parse_XFCRC(blob) {\n blob.l += 2;\n var o = {\n cxfs: 0,\n crc: 0\n };\n o.cxfs = blob.read_shift(2);\n o.crc = blob.read_shift(4);\n return o;\n }\n /* [MS-XLS] 2.4.53 TODO: parse flags */\n\n /* [MS-XLSB] 2.4.323 TODO: parse flags */\n\n\n function parse_ColInfo(blob, length, opts) {\n if (!opts.cellStyles) return parsenoop(blob, length);\n var w = opts && opts.biff >= 12 ? 4 : 2;\n var colFirst = blob.read_shift(w);\n var colLast = blob.read_shift(w);\n var coldx = blob.read_shift(w);\n var ixfe = blob.read_shift(w);\n var flags = blob.read_shift(2);\n if (w == 2) blob.l += 2;\n var o = {\n s: colFirst,\n e: colLast,\n w: coldx,\n ixfe: ixfe,\n flags: flags\n };\n if (opts.biff >= 5 || !opts.biff) o.level = flags >> 8 & 0x7;\n return o;\n }\n\n function write_ColInfo(col, idx) {\n var o = new_buf(12);\n o.write_shift(2, idx);\n o.write_shift(2, idx);\n o.write_shift(2, col.width * 256);\n o.write_shift(2, 0);\n var f = 0;\n if (col.hidden) f |= 1;\n o.write_shift(1, f);\n f = col.level || 0;\n o.write_shift(1, f);\n o.write_shift(2, 0);\n return o;\n }\n /* [MS-XLS] 2.4.257 */\n\n\n function parse_Setup(blob, length) {\n var o = {};\n if (length < 32) return o;\n blob.l += 16;\n o.header = parse_Xnum(blob, 8);\n o.footer = parse_Xnum(blob, 8);\n blob.l += 2;\n return o;\n }\n /* [MS-XLS] 2.4.261 */\n\n\n function parse_ShtProps(blob, length, opts) {\n var def = {\n area: false\n };\n\n if (opts.biff != 5) {\n blob.l += length;\n return def;\n }\n\n var d = blob.read_shift(1);\n blob.l += 3;\n if (d & 0x10) def.area = true;\n return def;\n }\n /* [MS-XLS] 2.4.241 */\n\n\n function write_RRTabId(n) {\n var out = new_buf(2 * n);\n\n for (var i = 0; i < n; ++i) {\n out.write_shift(2, i + 1);\n }\n\n return out;\n }\n\n var parse_Blank = parse_XLSCell;\n /* [MS-XLS] 2.4.20 Just the cell */\n\n var parse_Scl = parseuint16a;\n /* [MS-XLS] 2.4.247 num, den */\n\n var parse_String = parse_XLUnicodeString;\n /* [MS-XLS] 2.4.268 */\n\n /* --- Specific to versions before BIFF8 --- */\n\n function parse_ImData(blob) {\n var cf = blob.read_shift(2);\n var env = blob.read_shift(2);\n var lcb = blob.read_shift(4);\n var o = {\n fmt: cf,\n env: env,\n len: lcb,\n data: blob.slice(blob.l, blob.l + lcb)\n };\n blob.l += lcb;\n return o;\n }\n /* BIFF2_??? where ??? is the name from [XLS] */\n\n\n function parse_BIFF2STR(blob, length, opts) {\n if (opts.biffguess && opts.biff == 5) opts.biff = 2;\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var str = parse_XLUnicodeString2(blob, length - 7, opts);\n cell.t = 'str';\n cell.val = str;\n return cell;\n }\n\n function parse_BIFF2NUM(blob) {\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var num = parse_Xnum(blob, 8);\n cell.t = 'n';\n cell.val = num;\n return cell;\n }\n\n function write_BIFF2NUM(r, c, val) {\n var out = new_buf(15);\n write_BIFF2Cell(out, r, c);\n out.write_shift(8, val, 'f');\n return out;\n }\n\n function parse_BIFF2INT(blob) {\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var num = blob.read_shift(2);\n cell.t = 'n';\n cell.val = num;\n return cell;\n }\n\n function write_BIFF2INT(r, c, val) {\n var out = new_buf(9);\n write_BIFF2Cell(out, r, c);\n out.write_shift(2, val);\n return out;\n }\n\n function parse_BIFF2STRING(blob) {\n var cch = blob.read_shift(1);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return blob.read_shift(cch, 'sbcs-cont');\n }\n /* TODO: convert to BIFF8 font struct */\n\n\n function parse_BIFF2FONTXTRA(blob, length) {\n blob.l += 6; // unknown\n\n blob.l += 2; // font weight \"bls\"\n\n blob.l += 1; // charset\n\n blob.l += 3; // unknown\n\n blob.l += 1; // font family\n\n blob.l += length - 13;\n }\n /* TODO: parse rich text runs */\n\n\n function parse_RString(blob, length, opts) {\n var end = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n var cch = blob.read_shift(2);\n var str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n blob.l = end;\n cell.t = 'str';\n cell.val = str;\n return cell;\n }\n /* from js-harb (C) 2014-present SheetJS */\n\n\n var DBF = function () {\n var dbf_codepage_map = {\n /* Code Pages Supported by Visual FoxPro */\n 0x01: 437,\n 0x02: 850,\n 0x03: 1252,\n 0x04: 10000,\n 0x64: 852,\n 0x65: 866,\n 0x66: 865,\n 0x67: 861,\n 0x68: 895,\n 0x69: 620,\n 0x6A: 737,\n 0x6B: 857,\n 0x78: 950,\n 0x79: 949,\n 0x7A: 936,\n 0x7B: 932,\n 0x7C: 874,\n 0x7D: 1255,\n 0x7E: 1256,\n 0x96: 10007,\n 0x97: 10029,\n 0x98: 10006,\n 0xC8: 1250,\n 0xC9: 1251,\n 0xCA: 1254,\n 0xCB: 1253,\n\n /* shapefile DBF extension */\n 0x00: 20127,\n 0x08: 865,\n 0x09: 437,\n 0x0A: 850,\n 0x0B: 437,\n 0x0D: 437,\n 0x0E: 850,\n 0x0F: 437,\n 0x10: 850,\n 0x11: 437,\n 0x12: 850,\n 0x13: 932,\n 0x14: 850,\n 0x15: 437,\n 0x16: 850,\n 0x17: 865,\n 0x18: 437,\n 0x19: 437,\n 0x1A: 850,\n 0x1B: 437,\n 0x1C: 863,\n 0x1D: 850,\n 0x1F: 852,\n 0x22: 852,\n 0x23: 852,\n 0x24: 860,\n 0x25: 850,\n 0x26: 866,\n 0x37: 850,\n 0x40: 852,\n 0x4D: 936,\n 0x4E: 949,\n 0x4F: 950,\n 0x50: 874,\n 0x57: 1252,\n 0x58: 1252,\n 0x59: 1252,\n 0x6C: 863,\n 0x86: 737,\n 0x87: 852,\n 0x88: 857,\n 0xCC: 1257,\n 0xFF: 16969\n };\n var dbf_reverse_map = evert({\n 0x01: 437,\n 0x02: 850,\n 0x03: 1252,\n 0x04: 10000,\n 0x64: 852,\n 0x65: 866,\n 0x66: 865,\n 0x67: 861,\n 0x68: 895,\n 0x69: 620,\n 0x6A: 737,\n 0x6B: 857,\n 0x78: 950,\n 0x79: 949,\n 0x7A: 936,\n 0x7B: 932,\n 0x7C: 874,\n 0x7D: 1255,\n 0x7E: 1256,\n 0x96: 10007,\n 0x97: 10029,\n 0x98: 10006,\n 0xC8: 1250,\n 0xC9: 1251,\n 0xCA: 1254,\n 0xCB: 1253,\n 0x00: 20127\n });\n var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\n /* TODO: find an actual specification */\n\n function dbf_to_aoa(buf, opts) {\n var out = [];\n var d = new_raw_buf(1);\n\n switch (opts.type) {\n case 'base64':\n d = s2a(Base64.decode(buf));\n break;\n\n case 'binary':\n d = s2a(buf);\n break;\n\n case 'buffer':\n case 'array':\n d = buf;\n break;\n }\n\n prep_blob(d, 0);\n /* header */\n\n var ft = d.read_shift(1);\n var memo = !!(ft & 0x88);\n var vfp = false,\n l7 = false;\n\n switch (ft) {\n case 0x02:\n break;\n // dBASE II\n\n case 0x03:\n break;\n // dBASE III\n\n case 0x30:\n vfp = true;\n memo = true;\n break;\n // VFP\n\n case 0x31:\n vfp = true;\n memo = true;\n break;\n // VFP with autoincrement\n // 0x43 dBASE IV SQL table files\n // 0x63 dBASE IV SQL system files\n\n case 0x83:\n break;\n // dBASE III with memo\n\n case 0x8B:\n break;\n // dBASE IV with memo\n\n case 0x8C:\n l7 = true;\n break;\n // dBASE Level 7 with memo\n // case 0xCB dBASE IV SQL table files with memo\n\n case 0xF5:\n break;\n // FoxPro 2.x with memo\n // case 0xFB FoxBASE\n\n default:\n throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n }\n\n var nrow = 0,\n fpos = 0x0209;\n if (ft == 0x02) nrow = d.read_shift(2);\n d.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\n if (ft != 0x02) nrow = d.read_shift(4);\n if (nrow > 1048576) nrow = 1e6;\n if (ft != 0x02) fpos = d.read_shift(2); // header length\n\n var rlen = d.read_shift(2); // record length\n\n var\n /*flags = 0,*/\n current_cp = opts.codepage || 1252;\n\n if (ft != 0x02) {\n // 20 reserved bytes\n d.l += 16;\n /*flags = */\n\n d.read_shift(1); //if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n /* codepage present in FoxPro and dBASE Level 7 */\n\n if (d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n d.l += 1;\n d.l += 2;\n }\n\n if (l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n var fields = [],\n field = {};\n var hend = Math.min(d.length, ft == 0x02 ? 0x209 : fpos - 10 - (vfp ? 264 : 0));\n var ww = l7 ? 32 : 11;\n\n while (d.l < hend && d[d.l] != 0x0d) {\n field = {};\n field.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l + ww)).replace(/[\\u0000\\r\\n].*$/g, \"\");\n d.l += ww;\n field.type = String.fromCharCode(d.read_shift(1));\n if (ft != 0x02 && !l7) field.offset = d.read_shift(4);\n field.len = d.read_shift(1);\n if (ft == 0x02) field.offset = d.read_shift(2);\n field.dec = d.read_shift(1);\n if (field.name.length) fields.push(field);\n if (ft != 0x02) d.l += l7 ? 13 : 14;\n\n switch (field.type) {\n case 'B':\n // Double (VFP) / Binary (dBASE L7)\n if ((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n break;\n\n case 'G': // General (FoxPro and dBASE L7)\n\n case 'P':\n // Picture (FoxPro and dBASE L7)\n if (opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n break;\n\n case '+': // Autoincrement (dBASE L7 only)\n\n case '0': // _NullFlags (VFP only)\n\n case '@': // Timestamp (dBASE L7 only)\n\n case 'C': // Character (dBASE II)\n\n case 'D': // Date (dBASE III)\n\n case 'F': // Float (dBASE IV)\n\n case 'I': // Long (VFP and dBASE L7)\n\n case 'L': // Logical (dBASE II)\n\n case 'M': // Memo (dBASE III)\n\n case 'N': // Number (dBASE II)\n\n case 'O': // Double (dBASE L7 only)\n\n case 'T': // Datetime (VFP only)\n\n case 'Y':\n // Currency (VFP only)\n break;\n\n default:\n throw new Error('Unknown Field Type: ' + field.type);\n }\n }\n\n if (d[d.l] !== 0x0D) d.l = fpos - 1;\n if (d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n d.l = fpos;\n /* data */\n\n var R = 0,\n C = 0;\n out[0] = [];\n\n for (C = 0; C != fields.length; ++C) {\n out[0][C] = fields[C].name;\n }\n\n while (nrow-- > 0) {\n if (d[d.l] === 0x2A) {\n // TODO: record marked as deleted -- create a hidden row?\n d.l += rlen;\n continue;\n }\n\n ++d.l;\n out[++R] = [];\n C = 0;\n\n for (C = 0; C != fields.length; ++C) {\n var dd = d.slice(d.l, d.l + fields[C].len);\n d.l += fields[C].len;\n prep_blob(dd, 0);\n var s = cptable.utils.decode(current_cp, dd);\n\n switch (fields[C].type) {\n case 'C':\n // NOTE: it is conventional to write ' / / ' for empty dates\n if (s.trim().length) out[R][C] = s.replace(/\\s+$/, \"\");\n break;\n\n case 'D':\n if (s.length === 8) out[R][C] = new Date(+s.slice(0, 4), +s.slice(4, 6) - 1, +s.slice(6, 8));else out[R][C] = s;\n break;\n\n case 'F':\n out[R][C] = parseFloat(s.trim());\n break;\n\n case '+':\n case 'I':\n out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i');\n break;\n\n case 'L':\n switch (s.trim().toUpperCase()) {\n case 'Y':\n case 'T':\n out[R][C] = true;\n break;\n\n case 'N':\n case 'F':\n out[R][C] = false;\n break;\n\n case '':\n case '?':\n break;\n\n default:\n throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n }\n\n break;\n\n case 'M':\n /* TODO: handle memo files */\n if (!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n out[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10) : dd.read_shift(4));\n break;\n\n case 'N':\n s = s.replace(/\\u0000/g, \"\").trim(); // NOTE: dBASE II interprets \" . \" as 0\n\n if (s && s != \".\") out[R][C] = +s || 0;\n break;\n\n case '@':\n // NOTE: dBASE specs appear to be incorrect\n out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n break;\n\n case 'T':\n out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4));\n break;\n\n case 'Y':\n out[R][C] = dd.read_shift(4, 'i') / 1e4;\n break;\n\n case 'O':\n out[R][C] = -dd.read_shift(-8, 'f');\n break;\n\n case 'B':\n if (vfp && fields[C].len == 8) {\n out[R][C] = dd.read_shift(8, 'f');\n break;\n }\n\n /* falls through */\n\n case 'G':\n case 'P':\n dd.l += fields[C].len;\n break;\n\n case '0':\n if (fields[C].name === '_NullFlags') break;\n\n /* falls through */\n\n default:\n throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n }\n }\n }\n\n if (ft != 0x02) if (d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l - 1) + \" of \" + d.length + \" \" + d[d.l - 1].toString(16));\n if (opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n return out;\n }\n\n function dbf_to_sheet(buf, opts) {\n var o = opts || {};\n if (!o.dateNF) o.dateNF = \"yyyymmdd\";\n return aoa_to_sheet(dbf_to_aoa(buf, o), o);\n }\n\n function dbf_to_workbook(buf, opts) {\n try {\n return sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n } catch (e) {\n if (opts && opts.WTF) throw e;\n }\n\n return {\n SheetNames: [],\n Sheets: {}\n };\n }\n\n var _RLEN = {\n 'B': 8,\n 'C': 250,\n 'L': 1,\n 'D': 8,\n '?': 0,\n '': 0\n };\n\n function sheet_to_dbf(ws, opts) {\n var o = opts || {};\n if (+o.codepage >= 0) set_cp(+o.codepage);\n if (o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n var ba = buf_array();\n var aoa = sheet_to_json(ws, {\n header: 1,\n raw: true,\n cellDates: true\n });\n var headers = aoa[0],\n data = aoa.slice(1);\n var i = 0,\n j = 0,\n hcnt = 0,\n rlen = 1;\n\n for (i = 0; i < headers.length; ++i) {\n if (i == null) continue;\n ++hcnt;\n if (typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n if (typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + typeof headers[i] + \"|\");\n if (headers.indexOf(headers[i]) !== i) for (j = 0; j < 1024; ++j) {\n if (headers.indexOf(headers[i] + \"_\" + j) == -1) {\n headers[i] += \"_\" + j;\n break;\n }\n }\n }\n\n var range = safe_decode_range(ws['!ref']);\n var coltypes = [];\n\n for (i = 0; i <= range.e.c - range.s.c; ++i) {\n var col = [];\n\n for (j = 0; j < data.length; ++j) {\n if (data[j][i] != null) col.push(data[j][i]);\n }\n\n if (col.length == 0 || headers[i] == null) {\n coltypes[i] = '?';\n continue;\n }\n\n var guess = '',\n _guess = '';\n\n for (j = 0; j < col.length; ++j) {\n switch (typeof col[j]) {\n /* TODO: check if L2 compat is desired */\n case 'number':\n _guess = 'B';\n break;\n\n case 'string':\n _guess = 'C';\n break;\n\n case 'boolean':\n _guess = 'L';\n break;\n\n case 'object':\n _guess = col[j] instanceof Date ? 'D' : 'C';\n break;\n\n default:\n _guess = 'C';\n }\n\n guess = guess && guess != _guess ? 'C' : _guess;\n if (guess == 'C') break;\n }\n\n rlen += _RLEN[guess] || 0;\n coltypes[i] = guess;\n }\n\n var h = ba.next(32);\n h.write_shift(4, 0x13021130);\n h.write_shift(4, data.length);\n h.write_shift(2, 296 + 32 * hcnt);\n h.write_shift(2, rlen);\n\n for (i = 0; i < 4; ++i) {\n h.write_shift(4, 0);\n }\n\n h.write_shift(4, 0x00000000 | (+dbf_reverse_map[current_ansi] || 0x03) << 8);\n\n for (i = 0, j = 0; i < headers.length; ++i) {\n if (headers[i] == null) continue;\n var hf = ba.next(32);\n\n var _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\n hf.write_shift(1, _f, \"sbcs\");\n hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n hf.write_shift(4, j);\n hf.write_shift(1, _RLEN[coltypes[i]] || 0);\n hf.write_shift(1, 0);\n hf.write_shift(1, 0x02);\n hf.write_shift(4, 0);\n hf.write_shift(1, 0);\n hf.write_shift(4, 0);\n hf.write_shift(4, 0);\n j += _RLEN[coltypes[i]] || 0;\n }\n\n var hb = ba.next(264);\n hb.write_shift(4, 0x0000000D);\n\n for (i = 0; i < 65; ++i) {\n hb.write_shift(4, 0x00000000);\n }\n\n for (i = 0; i < data.length; ++i) {\n var rout = ba.next(rlen);\n rout.write_shift(1, 0);\n\n for (j = 0; j < headers.length; ++j) {\n if (headers[j] == null) continue;\n\n switch (coltypes[j]) {\n case 'L':\n rout.write_shift(1, data[i][j] == null ? 0x3F : data[i][j] ? 0x54 : 0x46);\n break;\n\n case 'B':\n rout.write_shift(8, data[i][j] || 0, 'f');\n break;\n\n case 'D':\n if (!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");else {\n rout.write_shift(4, (\"0000\" + data[i][j].getFullYear()).slice(-4), \"sbcs\");\n rout.write_shift(2, (\"00\" + (data[i][j].getMonth() + 1)).slice(-2), \"sbcs\");\n rout.write_shift(2, (\"00\" + data[i][j].getDate()).slice(-2), \"sbcs\");\n }\n break;\n\n case 'C':\n var _s = String(data[i][j] || \"\");\n\n rout.write_shift(1, _s, \"sbcs\");\n\n for (hcnt = 0; hcnt < 250 - _s.length; ++hcnt) {\n rout.write_shift(1, 0x20);\n }\n\n break;\n }\n } // data\n\n }\n\n ba.next(1).write_shift(1, 0x1A);\n return ba.end();\n }\n\n return {\n versions: DBF_SUPPORTED_VERSIONS,\n to_workbook: dbf_to_workbook,\n to_sheet: dbf_to_sheet,\n from_sheet: sheet_to_dbf\n };\n }();\n\n var SYLK = function () {\n /* TODO: stress test sequences */\n var sylk_escapes = {\n AA: 'À',\n BA: 'Á',\n CA: 'Â',\n DA: 195,\n HA: 'Ä',\n JA: 197,\n AE: 'È',\n BE: 'É',\n CE: 'Ê',\n HE: 'Ë',\n AI: 'Ì',\n BI: 'Í',\n CI: 'Î',\n HI: 'Ï',\n AO: 'Ò',\n BO: 'Ó',\n CO: 'Ô',\n DO: 213,\n HO: 'Ö',\n AU: 'Ù',\n BU: 'Ú',\n CU: 'Û',\n HU: 'Ü',\n Aa: 'à',\n Ba: 'á',\n Ca: 'â',\n Da: 227,\n Ha: 'ä',\n Ja: 229,\n Ae: 'è',\n Be: 'é',\n Ce: 'ê',\n He: 'ë',\n Ai: 'ì',\n Bi: 'í',\n Ci: 'î',\n Hi: 'ï',\n Ao: 'ò',\n Bo: 'ó',\n Co: 'ô',\n Do: 245,\n Ho: 'ö',\n Au: 'ù',\n Bu: 'ú',\n Cu: 'û',\n Hu: 'ü',\n KC: 'Ç',\n Kc: 'ç',\n q: 'æ',\n z: 'œ',\n a: 'Æ',\n j: 'Œ',\n DN: 209,\n Dn: 241,\n Hy: 255,\n S: 169,\n c: 170,\n R: 174,\n \"B \": 180,\n 0: 176,\n 1: 177,\n 2: 178,\n 3: 179,\n 5: 181,\n 6: 182,\n 7: 183,\n Q: 185,\n k: 186,\n b: 208,\n i: 216,\n l: 222,\n s: 240,\n y: 248,\n \"!\": 161,\n '\"': 162,\n \"#\": 163,\n \"(\": 164,\n \"%\": 165,\n \"'\": 167,\n \"H \": 168,\n \"+\": 171,\n \";\": 187,\n \"<\": 188,\n \"=\": 189,\n \">\": 190,\n \"?\": 191,\n \"{\": 223\n };\n var sylk_char_regex = new RegExp(\"\\x1BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g, \"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\n var sylk_char_fn = function sylk_char_fn(_, $1) {\n var o = sylk_escapes[$1];\n return typeof o == \"number\" ? _getansi(o) : o;\n };\n\n var decode_sylk_char = function decode_sylk_char($$, $1, $2) {\n var newcc = $1.charCodeAt(0) - 0x20 << 4 | $2.charCodeAt(0) - 0x30;\n return newcc == 59 ? $$ : _getansi(newcc);\n };\n\n sylk_escapes[\"|\"] = 254;\n /* TODO: find an actual specification */\n\n function sylk_to_aoa(d, opts) {\n switch (opts.type) {\n case 'base64':\n return sylk_to_aoa_str(Base64.decode(d), opts);\n\n case 'binary':\n return sylk_to_aoa_str(d, opts);\n\n case 'buffer':\n return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n case 'array':\n return sylk_to_aoa_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function sylk_to_aoa_str(str, opts) {\n var records = str.split(/[\\n\\r]+/),\n R = -1,\n C = -1,\n ri = 0,\n rj = 0,\n arr = [];\n var formats = [];\n var next_cell_format = null;\n var sht = {},\n rowinfo = [],\n colinfo = [],\n cw = [];\n var Mval = 0,\n j;\n if (+opts.codepage >= 0) set_cp(+opts.codepage);\n\n for (; ri !== records.length; ++ri) {\n Mval = 0;\n var rstr = records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n var record = rstr.replace(/;;/g, \"\\0\").split(\";\").map(function (x) {\n return x.replace(/\\u0000/g, \";\");\n });\n var RT = record[0],\n val;\n if (rstr.length > 0) switch (RT) {\n case 'ID':\n break;\n\n /* header */\n\n case 'E':\n break;\n\n /* EOF */\n\n case 'B':\n break;\n\n /* dimensions */\n\n case 'O':\n break;\n\n /* options? */\n\n case 'W':\n break;\n\n /* window? */\n\n case 'P':\n if (record[1].charAt(0) == 'P') formats.push(rstr.slice(3).replace(/;;/g, \";\"));\n break;\n\n case 'C':\n var C_seen_K = false,\n C_seen_X = false,\n C_seen_S = false,\n C_seen_E = false,\n _R = -1,\n _C = -1;\n\n for (rj = 1; rj < record.length; ++rj) {\n switch (record[rj].charAt(0)) {\n case 'A':\n break;\n // TODO: comment\n\n case 'X':\n C = parseInt(record[rj].slice(1)) - 1;\n C_seen_X = true;\n break;\n\n case 'Y':\n R = parseInt(record[rj].slice(1)) - 1;\n if (!C_seen_X) C = 0;\n\n for (j = arr.length; j <= R; ++j) {\n arr[j] = [];\n }\n\n break;\n\n case 'K':\n val = record[rj].slice(1);\n if (val.charAt(0) === '\"') val = val.slice(1, val.length - 1);else if (val === 'TRUE') val = true;else if (val === 'FALSE') val = false;else if (!isNaN(fuzzynum(val))) {\n val = fuzzynum(val);\n if (next_cell_format !== null && SSF.is_date(next_cell_format)) val = numdate(val);\n } else if (!isNaN(fuzzydate(val).getDate())) {\n val = parseDate(val);\n }\n if (typeof cptable !== 'undefined' && typeof val == \"string\" && (opts || {}).type != \"string\" && (opts || {}).codepage) val = cptable.utils.decode(opts.codepage, val);\n C_seen_K = true;\n break;\n\n case 'E':\n C_seen_E = true;\n var formula = rc_to_a1(record[rj].slice(1), {\n r: R,\n c: C\n });\n arr[R][C] = [arr[R][C], formula];\n break;\n\n case 'S':\n C_seen_S = true;\n arr[R][C] = [arr[R][C], \"S5S\"];\n break;\n\n case 'G':\n break;\n // unknown\n\n case 'R':\n _R = parseInt(record[rj].slice(1)) - 1;\n break;\n\n case 'C':\n _C = parseInt(record[rj].slice(1)) - 1;\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (C_seen_K) {\n if (arr[R][C] && arr[R][C].length == 2) arr[R][C][0] = val;else arr[R][C] = val;\n next_cell_format = null;\n }\n\n if (C_seen_S) {\n if (C_seen_E) throw new Error(\"SYLK shared formula cannot have own formula\");\n var shrbase = _R > -1 && arr[_R][_C];\n if (!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n arr[R][C][1] = shift_formula_str(shrbase[1], {\n r: R - _R,\n c: C - _C\n });\n }\n\n break;\n\n case 'F':\n var F_seen = 0;\n\n for (rj = 1; rj < record.length; ++rj) {\n switch (record[rj].charAt(0)) {\n case 'X':\n C = parseInt(record[rj].slice(1)) - 1;\n ++F_seen;\n break;\n\n case 'Y':\n R = parseInt(record[rj].slice(1)) - 1;\n /*C = 0;*/\n\n for (j = arr.length; j <= R; ++j) {\n arr[j] = [];\n }\n\n break;\n\n case 'M':\n Mval = parseInt(record[rj].slice(1)) / 20;\n break;\n\n case 'F':\n break;\n\n /* ??? */\n\n case 'G':\n break;\n\n /* hide grid */\n\n case 'P':\n next_cell_format = formats[parseInt(record[rj].slice(1))];\n break;\n\n case 'S':\n break;\n\n /* cell style */\n\n case 'D':\n break;\n\n /* column */\n\n case 'N':\n break;\n\n /* font */\n\n case 'W':\n cw = record[rj].slice(1).split(\" \");\n\n for (j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {\n Mval = parseInt(cw[2], 10);\n colinfo[j - 1] = Mval === 0 ? {\n hidden: true\n } : {\n wch: Mval\n };\n process_col(colinfo[j - 1]);\n }\n\n break;\n\n case 'C':\n /* default column format */\n C = parseInt(record[rj].slice(1)) - 1;\n if (!colinfo[C]) colinfo[C] = {};\n break;\n\n case 'R':\n /* row properties */\n R = parseInt(record[rj].slice(1)) - 1;\n if (!rowinfo[R]) rowinfo[R] = {};\n\n if (Mval > 0) {\n rowinfo[R].hpt = Mval;\n rowinfo[R].hpx = pt2px(Mval);\n } else if (Mval === 0) rowinfo[R].hidden = true;\n\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (F_seen < 1) next_cell_format = null;\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (rowinfo.length > 0) sht['!rows'] = rowinfo;\n if (colinfo.length > 0) sht['!cols'] = colinfo;\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return [arr, sht];\n }\n\n function sylk_to_sheet(d, opts) {\n var aoasht = sylk_to_aoa(d, opts);\n var aoa = aoasht[0],\n ws = aoasht[1];\n var o = aoa_to_sheet(aoa, opts);\n keys(ws).forEach(function (k) {\n o[k] = ws[k];\n });\n return o;\n }\n\n function sylk_to_workbook(d, opts) {\n return sheet_to_workbook(sylk_to_sheet(d, opts), opts);\n }\n\n function write_ws_cell_sylk(cell, ws, R, C) {\n var o = \"C;Y\" + (R + 1) + \";X\" + (C + 1) + \";K\";\n\n switch (cell.t) {\n case 'n':\n o += cell.v || 0;\n if (cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {\n r: R,\n c: C\n });\n break;\n\n case 'b':\n o += cell.v ? \"TRUE\" : \"FALSE\";\n break;\n\n case 'e':\n o += cell.w || cell.v;\n break;\n\n case 'd':\n o += '\"' + (cell.w || cell.v) + '\"';\n break;\n\n case 's':\n o += '\"' + cell.v.replace(/\"/g, \"\") + '\"';\n break;\n }\n\n return o;\n }\n\n function write_ws_cols_sylk(out, cols) {\n cols.forEach(function (col, i) {\n var rec = \"F;W\" + (i + 1) + \" \" + (i + 1) + \" \";\n if (col.hidden) rec += \"0\";else {\n if (typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n if (typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n if (typeof col.wch == 'number') rec += Math.round(col.wch);\n }\n if (rec.charAt(rec.length - 1) != \" \") out.push(rec);\n });\n }\n\n function write_ws_rows_sylk(out, rows) {\n rows.forEach(function (row, i) {\n var rec = \"F;\";\n if (row.hidden) rec += \"M0;\";else if (row.hpt) rec += \"M\" + 20 * row.hpt + \";\";else if (row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n if (rec.length > 2) out.push(rec + \"R\" + (i + 1));\n });\n }\n\n function sheet_to_sylk(ws, opts) {\n var preamble = [\"ID;PWXL;N;E\"],\n o = [];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n var RS = \"\\r\\n\";\n preamble.push(\"P;PGeneral\");\n preamble.push(\"F;P0;DG0G8;M255\");\n if (ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n if (ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n preamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c, r.s.r, r.e.c, r.e.r].join(\" \"));\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n o.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n }\n }\n\n return preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n }\n\n return {\n to_workbook: sylk_to_workbook,\n to_sheet: sylk_to_sheet,\n from_sheet: sheet_to_sylk\n };\n }();\n\n var DIF = function () {\n function dif_to_aoa(d, opts) {\n switch (opts.type) {\n case 'base64':\n return dif_to_aoa_str(Base64.decode(d), opts);\n\n case 'binary':\n return dif_to_aoa_str(d, opts);\n\n case 'buffer':\n return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n case 'array':\n return dif_to_aoa_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function dif_to_aoa_str(str, opts) {\n var records = str.split('\\n'),\n R = -1,\n C = -1,\n ri = 0,\n arr = [];\n\n for (; ri !== records.length; ++ri) {\n if (records[ri].trim() === 'BOT') {\n arr[++R] = [];\n C = 0;\n continue;\n }\n\n if (R < 0) continue;\n var metadata = records[ri].trim().split(\",\");\n var type = metadata[0],\n value = metadata[1];\n ++ri;\n var data = records[ri] || \"\";\n\n while ((data.match(/[\"]/g) || []).length & 1 && ri < records.length - 1) {\n data += \"\\n\" + records[++ri];\n }\n\n data = data.trim();\n\n switch (+type) {\n case -1:\n if (data === 'BOT') {\n arr[++R] = [];\n C = 0;\n continue;\n } else if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\n break;\n\n case 0:\n if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);else if (!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);else arr[R][C] = value;\n ++C;\n break;\n\n case 1:\n data = data.slice(1, data.length - 1);\n data = data.replace(/\"\"/g, '\"');\n if (DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n arr[R][C++] = data !== '' ? data : null;\n break;\n }\n\n if (data === 'EOD') break;\n }\n\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return arr;\n }\n\n function dif_to_sheet(str, opts) {\n return aoa_to_sheet(dif_to_aoa(str, opts), opts);\n }\n\n function dif_to_workbook(str, opts) {\n return sheet_to_workbook(dif_to_sheet(str, opts), opts);\n }\n\n var sheet_to_dif = function () {\n var push_field = function pf(o, topic, v, n, s) {\n o.push(topic);\n o.push(v + \",\" + n);\n o.push('\"' + s.replace(/\"/g, '\"\"') + '\"');\n };\n\n var push_value = function po(o, type, v, s) {\n o.push(type + \",\" + v);\n o.push(type == 1 ? '\"' + s.replace(/\"/g, '\"\"') + '\"' : s);\n };\n\n return function sheet_to_dif(ws) {\n var o = [];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n push_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n push_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1, \"\");\n push_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1, \"\");\n push_field(o, \"DATA\", 0, 0, \"\");\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n push_value(o, -1, 0, \"BOT\");\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n if (!cell) {\n push_value(o, 1, 0, \"\");\n continue;\n }\n\n switch (cell.t) {\n case 'n':\n var val = DIF_XL ? cell.w : cell.v;\n if (!val && cell.v != null) val = cell.v;\n\n if (val == null) {\n if (DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);else push_value(o, 1, 0, \"\");\n } else push_value(o, 0, val, \"V\");\n\n break;\n\n case 'b':\n push_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n break;\n\n case 's':\n push_value(o, 1, 0, !DIF_XL || isNaN(cell.v) ? cell.v : '=\"' + cell.v + '\"');\n break;\n\n case 'd':\n if (!cell.w) cell.w = SSF.format(cell.z || SSF._table[14], datenum(parseDate(cell.v)));\n if (DIF_XL) push_value(o, 0, cell.w, \"V\");else push_value(o, 1, 0, cell.w);\n break;\n\n default:\n push_value(o, 1, 0, \"\");\n }\n }\n }\n\n push_value(o, -1, 0, \"EOD\");\n var RS = \"\\r\\n\";\n var oo = o.join(RS); //while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\n return oo;\n };\n }();\n\n return {\n to_workbook: dif_to_workbook,\n to_sheet: dif_to_sheet,\n from_sheet: sheet_to_dif\n };\n }();\n\n var ETH = function () {\n function decode(s) {\n return s.replace(/\\\\b/g, \"\\\\\").replace(/\\\\c/g, \":\").replace(/\\\\n/g, \"\\n\");\n }\n\n function encode(s) {\n return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g, \"\\\\n\");\n }\n\n function eth_to_aoa(str, opts) {\n var records = str.split('\\n'),\n R = -1,\n C = -1,\n ri = 0,\n arr = [];\n\n for (; ri !== records.length; ++ri) {\n var record = records[ri].trim().split(\":\");\n if (record[0] !== 'cell') continue;\n var addr = decode_cell(record[1]);\n if (arr.length <= addr.r) for (R = arr.length; R <= addr.r; ++R) {\n if (!arr[R]) arr[R] = [];\n }\n R = addr.r;\n C = addr.c;\n\n switch (record[2]) {\n case 't':\n arr[R][C] = decode(record[3]);\n break;\n\n case 'v':\n arr[R][C] = +record[3];\n break;\n\n case 'vtf':\n var _f = record[record.length - 1];\n\n /* falls through */\n\n case 'vtc':\n switch (record[3]) {\n case 'nl':\n arr[R][C] = +record[4] ? true : false;\n break;\n\n default:\n arr[R][C] = +record[4];\n break;\n }\n\n if (record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n }\n }\n\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return arr;\n }\n\n function eth_to_sheet(d, opts) {\n return aoa_to_sheet(eth_to_aoa(d, opts), opts);\n }\n\n function eth_to_workbook(d, opts) {\n return sheet_to_workbook(eth_to_sheet(d, opts), opts);\n }\n\n var header = [\"socialcalc:version:1.5\", \"MIME-Version: 1.0\", \"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"].join(\"\\n\");\n var sep = [\"--SocialCalcSpreadsheetControlSave\", \"Content-type: text/plain; charset=UTF-8\"].join(\"\\n\") + \"\\n\";\n /* TODO: the other parts */\n\n var meta = [\"# SocialCalc Spreadsheet Control Save\", \"part:sheet\"].join(\"\\n\");\n var end = \"--SocialCalcSpreadsheetControlSave--\";\n\n function sheet_to_eth_data(ws) {\n if (!ws || !ws['!ref']) return \"\";\n var o = [],\n oo = [],\n cell,\n coord = \"\";\n var r = decode_range(ws['!ref']);\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n for (var C = r.s.c; C <= r.e.c; ++C) {\n coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null || cell.t === 'z') continue;\n oo = [\"cell\", coord, 't'];\n\n switch (cell.t) {\n case 's':\n case 'str':\n oo.push(encode(cell.v));\n break;\n\n case 'n':\n if (!cell.f) {\n oo[2] = 'v';\n oo[3] = cell.v;\n } else {\n oo[2] = 'vtf';\n oo[3] = 'n';\n oo[4] = cell.v;\n oo[5] = encode(cell.f);\n }\n\n break;\n\n case 'b':\n oo[2] = 'vt' + (cell.f ? 'f' : 'c');\n oo[3] = 'nl';\n oo[4] = cell.v ? \"1\" : \"0\";\n oo[5] = encode(cell.f || (cell.v ? 'TRUE' : 'FALSE'));\n break;\n\n case 'd':\n var t = datenum(parseDate(cell.v));\n oo[2] = 'vtc';\n oo[3] = 'nd';\n oo[4] = \"\" + t;\n oo[5] = cell.w || SSF.format(cell.z || SSF._table[14], t);\n break;\n\n case 'e':\n continue;\n }\n\n o.push(oo.join(\":\"));\n }\n }\n\n o.push(\"sheet:c:\" + (r.e.c - r.s.c + 1) + \":r:\" + (r.e.r - r.s.r + 1) + \":tvf:1\");\n o.push(\"valueformat:1:text-wiki\"); //o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\n return o.join(\"\\n\");\n }\n\n function sheet_to_eth(ws) {\n return [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\"); // return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n }\n\n return {\n to_workbook: eth_to_workbook,\n to_sheet: eth_to_sheet,\n from_sheet: sheet_to_eth\n };\n }();\n\n var PRN = function () {\n function set_text_arr(data, arr, R, C, o) {\n if (o.raw) arr[R][C] = data;else if (data === \"\") {\n /* empty */\n } else if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);else if (!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);else arr[R][C] = data;\n }\n\n function prn_to_aoa_str(f, opts) {\n var o = opts || {};\n var arr = [];\n if (!f || f.length === 0) return arr;\n var lines = f.split(/[\\r\\n]/);\n var L = lines.length - 1;\n\n while (L >= 0 && lines[L].length === 0) {\n --L;\n }\n\n var start = 10,\n idx = 0;\n var R = 0;\n\n for (; R <= L; ++R) {\n idx = lines[R].indexOf(\" \");\n if (idx == -1) idx = lines[R].length;else idx++;\n start = Math.max(start, idx);\n }\n\n for (R = 0; R <= L; ++R) {\n arr[R] = [];\n /* TODO: confirm that widths are always 10 */\n\n var C = 0;\n set_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\n for (C = 1; C <= (lines[R].length - start) / 10 + 1; ++C) {\n set_text_arr(lines[R].slice(start + (C - 1) * 10, start + C * 10).trim(), arr, R, C, o);\n }\n }\n\n if (o.sheetRows) arr = arr.slice(0, o.sheetRows);\n return arr;\n } // List of accepted CSV separators\n\n\n var guess_seps = {\n 0x2C: ',',\n 0x09: \"\\t\",\n 0x3B: ';',\n 0x7C: '|'\n }; // CSV separator weights to be used in case of equal numbers\n\n var guess_sep_weights = {\n 0x2C: 3,\n 0x09: 2,\n 0x3B: 1,\n 0x7C: 0\n };\n\n function guess_sep(str) {\n var cnt = {},\n instr = false,\n end = 0,\n cc = 0;\n\n for (; end < str.length; ++end) {\n if ((cc = str.charCodeAt(end)) == 0x22) instr = !instr;else if (!instr && cc in guess_seps) cnt[cc] = (cnt[cc] || 0) + 1;\n }\n\n cc = [];\n\n for (end in cnt) {\n if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n cc.push([cnt[end], end]);\n }\n }\n\n if (!cc.length) {\n cnt = guess_sep_weights;\n\n for (end in cnt) {\n if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n cc.push([cnt[end], end]);\n }\n }\n }\n\n cc.sort(function (a, b) {\n return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]];\n });\n return guess_seps[cc.pop()[1]] || 0x2C;\n }\n\n function dsv_to_sheet_str(str, opts) {\n var o = opts || {};\n var sep = \"\";\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var ws = o.dense ? [] : {};\n var range = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n\n if (str.slice(0, 4) == \"sep=\") {\n // If the line ends in \\r\\n\n if (str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10) {\n sep = str.charAt(4);\n str = str.slice(7);\n } // If line ends in \\r OR \\n\n else if (str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10) {\n sep = str.charAt(4);\n str = str.slice(6);\n } else sep = guess_sep(str.slice(0, 1024));\n } else sep = guess_sep(str.slice(0, 1024));\n\n var R = 0,\n C = 0,\n v = 0;\n var start = 0,\n end = 0,\n sepcc = sep.charCodeAt(0),\n instr = false,\n cc = 0,\n startcc = str.charCodeAt(0);\n str = str.replace(/\\r\\n/mg, \"\\n\");\n\n var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\n function finish_cell() {\n var s = str.slice(start, end);\n var cell = {};\n if (s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1, -1).replace(/\"\"/g, '\"');\n if (s.length === 0) cell.t = 'z';else if (o.raw) {\n cell.t = 's';\n cell.v = s;\n } else if (s.trim().length === 0) {\n cell.t = 's';\n cell.v = s;\n } else if (s.charCodeAt(0) == 0x3D) {\n if (s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) {\n cell.t = 's';\n cell.v = s.slice(2, -1).replace(/\"\"/g, '\"');\n } else if (fuzzyfmla(s)) {\n cell.t = 'n';\n cell.f = s.slice(1);\n } else {\n cell.t = 's';\n cell.v = s;\n }\n } else if (s == \"TRUE\") {\n cell.t = 'b';\n cell.v = true;\n } else if (s == \"FALSE\") {\n cell.t = 'b';\n cell.v = false;\n } else if (!isNaN(v = fuzzynum(s))) {\n cell.t = 'n';\n if (o.cellText !== false) cell.w = s;\n cell.v = v;\n } else if (!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n cell.z = o.dateNF || SSF._table[14];\n var k = 0;\n\n if (_re && s.match(_re)) {\n s = dateNF_fix(s, o.dateNF, s.match(_re) || []);\n k = 1;\n }\n\n if (o.cellDates) {\n cell.t = 'd';\n cell.v = parseDate(s, k);\n } else {\n cell.t = 'n';\n cell.v = datenum(parseDate(s, k));\n }\n\n if (o.cellText !== false) cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v) : cell.v);\n if (!o.cellNF) delete cell.z;\n } else {\n cell.t = 's';\n cell.v = s;\n }\n\n if (cell.t == 'z') {} else if (o.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = cell;\n } else ws[encode_cell({\n c: C,\n r: R\n })] = cell;\n\n start = end + 1;\n startcc = str.charCodeAt(start);\n if (range.e.c < C) range.e.c = C;\n if (range.e.r < R) range.e.r = R;\n if (cc == sepcc) ++C;else {\n C = 0;\n ++R;\n if (o.sheetRows && o.sheetRows <= R) return true;\n }\n }\n\n outer: for (; end < str.length; ++end) {\n switch (cc = str.charCodeAt(end)) {\n case 0x22:\n if (startcc === 0x22) instr = !instr;\n break;\n\n case sepcc:\n case 0x0a:\n case 0x0d:\n if (!instr && finish_cell()) break outer;\n break;\n\n default:\n break;\n }\n }\n\n if (end - start > 0) finish_cell();\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function prn_to_sheet_str(str, opts) {\n if (!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n if (str.slice(0, 4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n if (str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n return aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n }\n\n function prn_to_sheet(d, opts) {\n var str = \"\",\n bytes = opts.type == 'string' ? [0, 0, 0, 0] : firstbyte(d, opts);\n\n switch (opts.type) {\n case 'base64':\n str = Base64.decode(d);\n break;\n\n case 'binary':\n str = d;\n break;\n\n case 'buffer':\n if (opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n else if (opts.codepage && typeof cptable !== 'undefined') str = cptable.utils.decode(opts.codepage, d);else str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n break;\n\n case 'array':\n str = cc2str(d);\n break;\n\n case 'string':\n str = d;\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));else if (opts.type != 'string' && opts.codepage == 65001) str = utf8read(str);else if (opts.type == 'binary' && typeof cptable !== 'undefined' && opts.codepage) str = cptable.utils.decode(opts.codepage, cptable.utils.encode(28591, str));\n if (str.slice(0, 19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n return prn_to_sheet_str(str, opts);\n }\n\n function prn_to_workbook(d, opts) {\n return sheet_to_workbook(prn_to_sheet(d, opts), opts);\n }\n\n function sheet_to_prn(ws) {\n var o = [];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n var oo = [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n if (!cell || cell.v == null) {\n oo.push(\" \");\n continue;\n }\n\n var w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0, 10);\n\n while (w.length < 10) {\n w += \" \";\n }\n\n oo.push(w + (C === 0 ? \" \" : \"\"));\n }\n\n o.push(oo.join(\"\"));\n }\n\n return o.join(\"\\n\");\n }\n\n return {\n to_workbook: prn_to_workbook,\n to_sheet: prn_to_sheet,\n from_sheet: sheet_to_prn\n };\n }();\n /* Excel defaults to SYLK but warns if data is not valid */\n\n\n function read_wb_ID(d, opts) {\n var o = opts || {},\n OLD_WTF = !!o.WTF;\n o.WTF = true;\n\n try {\n var out = SYLK.to_workbook(d, o);\n o.WTF = OLD_WTF;\n return out;\n } catch (e) {\n o.WTF = OLD_WTF;\n if (!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n return PRN.to_workbook(d, opts);\n }\n }\n\n var WK_ = function () {\n function lotushopper(data, cb, opts) {\n if (!data) return;\n prep_blob(data, data.l || 0);\n var Enum = opts.Enum || WK1Enum;\n\n while (data.l < data.length) {\n var RT = data.read_shift(2);\n var R = Enum[RT] || Enum[0xFF];\n var length = data.read_shift(2);\n var tgt = data.l + length;\n var d = (R.f || parsenoop)(data, length, opts);\n data.l = tgt;\n if (cb(d, R.n, RT)) return;\n }\n }\n\n function lotus_to_workbook(d, opts) {\n switch (opts.type) {\n case 'base64':\n return lotus_to_workbook_buf(s2a(Base64.decode(d)), opts);\n\n case 'binary':\n return lotus_to_workbook_buf(s2a(d), opts);\n\n case 'buffer':\n case 'array':\n return lotus_to_workbook_buf(d, opts);\n }\n\n throw \"Unsupported type \" + opts.type;\n }\n\n function lotus_to_workbook_buf(d, opts) {\n if (!d) return d;\n var o = opts || {};\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var s = o.dense ? [] : {},\n n = \"Sheet1\",\n sidx = 0;\n var sheets = {},\n snames = [n];\n var refguess = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var sheetRows = o.sheetRows || 0;\n if (d[2] == 0x02) o.Enum = WK1Enum;else if (d[2] == 0x1a) o.Enum = WK3Enum;else if (d[2] == 0x0e) {\n o.Enum = WK3Enum;\n o.qpro = true;\n d.l = 0;\n } else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n lotushopper(d, function (val, Rn, RT) {\n if (d[2] == 0x02) switch (RT) {\n case 0x00:\n o.vers = val;\n if (val >= 0x1000) o.qpro = true;\n break;\n\n case 0x06:\n refguess = val;\n break;\n\n /* RANGE */\n\n case 0x0F:\n /* LABEL */\n if (!o.qpro) val[1].v = val[1].v.slice(1);\n\n /* falls through */\n\n case 0x0D:\n /* INTEGER */\n\n case 0x0E:\n /* NUMBER */\n\n case 0x10:\n /* FORMULA */\n\n case 0x33:\n /* STRING */\n\n /* TODO: actual translation of the format code */\n if (RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n val[1].z = o.dateNF || SSF._table[14];\n\n if (o.cellDates) {\n val[1].t = 'd';\n val[1].v = numdate(val[1].v);\n }\n }\n\n if (o.dense) {\n if (!s[val[0].r]) s[val[0].r] = [];\n s[val[0].r][val[0].c] = val[1];\n } else s[encode_cell(val[0])] = val[1];\n\n break;\n } else switch (RT) {\n case 0x16:\n /* LABEL16 */\n val[1].v = val[1].v.slice(1);\n\n /* falls through */\n\n case 0x17:\n /* NUMBER17 */\n\n case 0x18:\n /* NUMBER18 */\n\n case 0x19:\n /* FORMULA19 */\n\n case 0x25:\n /* NUMBER25 */\n\n case 0x27:\n /* NUMBER27 */\n\n case 0x28:\n /* FORMULA28 */\n if (val[3] > sidx) {\n s[\"!ref\"] = encode_range(refguess);\n sheets[n] = s;\n s = o.dense ? [] : {};\n refguess = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n sidx = val[3];\n n = \"Sheet\" + (sidx + 1);\n snames.push(n);\n }\n\n if (sheetRows > 0 && val[0].r >= sheetRows) break;\n\n if (o.dense) {\n if (!s[val[0].r]) s[val[0].r] = [];\n s[val[0].r][val[0].c] = val[1];\n } else s[encode_cell(val[0])] = val[1];\n\n if (refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n if (refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n break;\n\n default:\n break;\n }\n }, o);\n s[\"!ref\"] = encode_range(refguess);\n sheets[n] = s;\n return {\n SheetNames: snames,\n Sheets: sheets\n };\n }\n\n function parse_RANGE(blob) {\n var o = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n o.s.c = blob.read_shift(2);\n o.s.r = blob.read_shift(2);\n o.e.c = blob.read_shift(2);\n o.e.r = blob.read_shift(2);\n if (o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n return o;\n }\n\n function parse_cell(blob, length, opts) {\n var o = [{\n c: 0,\n r: 0\n }, {\n t: 'n',\n v: 0\n }, 0];\n\n if (opts.qpro && opts.vers != 0x5120) {\n o[0].c = blob.read_shift(1);\n blob.l++;\n o[0].r = blob.read_shift(2);\n blob.l += 2;\n } else {\n o[2] = blob.read_shift(1);\n o[0].c = blob.read_shift(2);\n o[0].r = blob.read_shift(2);\n }\n\n return o;\n }\n\n function parse_LABEL(blob, length, opts) {\n var tgt = blob.l + length;\n var o = parse_cell(blob, length, opts);\n o[1].t = 's';\n\n if (opts.vers == 0x5120) {\n blob.l++;\n var len = blob.read_shift(1);\n o[1].v = blob.read_shift(len, 'utf8');\n return o;\n }\n\n if (opts.qpro) blob.l++;\n o[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n return o;\n }\n\n function parse_INTEGER(blob, length, opts) {\n var o = parse_cell(blob, length, opts);\n o[1].v = blob.read_shift(2, 'i');\n return o;\n }\n\n function parse_NUMBER(blob, length, opts) {\n var o = parse_cell(blob, length, opts);\n o[1].v = blob.read_shift(8, 'f');\n return o;\n }\n\n function parse_FORMULA(blob, length, opts) {\n var tgt = blob.l + length;\n var o = parse_cell(blob, length, opts);\n /* TODO: formula */\n\n o[1].v = blob.read_shift(8, 'f');\n if (opts.qpro) blob.l = tgt;else {\n var flen = blob.read_shift(2);\n blob.l += flen;\n }\n return o;\n }\n\n function parse_cell_3(blob) {\n var o = [{\n c: 0,\n r: 0\n }, {\n t: 'n',\n v: 0\n }, 0];\n o[0].r = blob.read_shift(2);\n o[3] = blob[blob.l++];\n o[0].c = blob[blob.l++];\n return o;\n }\n\n function parse_LABEL_16(blob, length) {\n var o = parse_cell_3(blob, length);\n o[1].t = 's';\n o[1].v = blob.read_shift(length - 4, 'cstr');\n return o;\n }\n\n function parse_NUMBER_18(blob, length) {\n var o = parse_cell_3(blob, length);\n o[1].v = blob.read_shift(2);\n var v = o[1].v >> 1;\n /* TODO: figure out all of the corner cases */\n\n if (o[1].v & 0x1) {\n switch (v & 0x07) {\n case 1:\n v = (v >> 3) * 500;\n break;\n\n case 2:\n v = (v >> 3) / 20;\n break;\n\n case 4:\n v = (v >> 3) / 2000;\n break;\n\n case 6:\n v = (v >> 3) / 16;\n break;\n\n case 7:\n v = (v >> 3) / 64;\n break;\n\n default:\n throw \"unknown NUMBER_18 encoding \" + (v & 0x07);\n }\n }\n\n o[1].v = v;\n return o;\n }\n\n function parse_NUMBER_17(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(4);\n var v2 = blob.read_shift(4);\n var e = blob.read_shift(2);\n\n if (e == 0xFFFF) {\n o[1].v = 0;\n return o;\n }\n\n var s = e & 0x8000;\n e = (e & 0x7FFF) - 16446;\n o[1].v = (s * 2 - 1) * ((e > 0 ? v2 << e : v2 >>> -e) + (e > -32 ? v1 << e + 32 : v1 >>> -(e + 32)));\n return o;\n }\n\n function parse_FORMULA_19(blob, length) {\n var o = parse_NUMBER_17(blob, 14);\n blob.l += length - 14;\n /* TODO: formula */\n\n return o;\n }\n\n function parse_NUMBER_25(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(4);\n o[1].v = v1 >> 6;\n return o;\n }\n\n function parse_NUMBER_27(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(8, 'f');\n o[1].v = v1;\n return o;\n }\n\n function parse_FORMULA_28(blob, length) {\n var o = parse_NUMBER_27(blob, 14);\n blob.l += length - 10;\n /* TODO: formula */\n\n return o;\n }\n\n var WK1Enum = {\n 0x0000: {\n n: \"BOF\",\n f: parseuint16\n },\n 0x0001: {\n n: \"EOF\"\n },\n 0x0002: {\n n: \"CALCMODE\"\n },\n 0x0003: {\n n: \"CALCORDER\"\n },\n 0x0004: {\n n: \"SPLIT\"\n },\n 0x0005: {\n n: \"SYNC\"\n },\n 0x0006: {\n n: \"RANGE\",\n f: parse_RANGE\n },\n 0x0007: {\n n: \"WINDOW1\"\n },\n 0x0008: {\n n: \"COLW1\"\n },\n 0x0009: {\n n: \"WINTWO\"\n },\n 0x000A: {\n n: \"COLW2\"\n },\n 0x000B: {\n n: \"NAME\"\n },\n 0x000C: {\n n: \"BLANK\"\n },\n 0x000D: {\n n: \"INTEGER\",\n f: parse_INTEGER\n },\n 0x000E: {\n n: \"NUMBER\",\n f: parse_NUMBER\n },\n 0x000F: {\n n: \"LABEL\",\n f: parse_LABEL\n },\n 0x0010: {\n n: \"FORMULA\",\n f: parse_FORMULA\n },\n 0x0018: {\n n: \"TABLE\"\n },\n 0x0019: {\n n: \"ORANGE\"\n },\n 0x001A: {\n n: \"PRANGE\"\n },\n 0x001B: {\n n: \"SRANGE\"\n },\n 0x001C: {\n n: \"FRANGE\"\n },\n 0x001D: {\n n: \"KRANGE1\"\n },\n 0x0020: {\n n: \"HRANGE\"\n },\n 0x0023: {\n n: \"KRANGE2\"\n },\n 0x0024: {\n n: \"PROTEC\"\n },\n 0x0025: {\n n: \"FOOTER\"\n },\n 0x0026: {\n n: \"HEADER\"\n },\n 0x0027: {\n n: \"SETUP\"\n },\n 0x0028: {\n n: \"MARGINS\"\n },\n 0x0029: {\n n: \"LABELFMT\"\n },\n 0x002A: {\n n: \"TITLES\"\n },\n 0x002B: {\n n: \"SHEETJS\"\n },\n 0x002D: {\n n: \"GRAPH\"\n },\n 0x002E: {\n n: \"NGRAPH\"\n },\n 0x002F: {\n n: \"CALCCOUNT\"\n },\n 0x0030: {\n n: \"UNFORMATTED\"\n },\n 0x0031: {\n n: \"CURSORW12\"\n },\n 0x0032: {\n n: \"WINDOW\"\n },\n 0x0033: {\n n: \"STRING\",\n f: parse_LABEL\n },\n 0x0037: {\n n: \"PASSWORD\"\n },\n 0x0038: {\n n: \"LOCKED\"\n },\n 0x003C: {\n n: \"QUERY\"\n },\n 0x003D: {\n n: \"QUERYNAME\"\n },\n 0x003E: {\n n: \"PRINT\"\n },\n 0x003F: {\n n: \"PRINTNAME\"\n },\n 0x0040: {\n n: \"GRAPH2\"\n },\n 0x0041: {\n n: \"GRAPHNAME\"\n },\n 0x0042: {\n n: \"ZOOM\"\n },\n 0x0043: {\n n: \"SYMSPLIT\"\n },\n 0x0044: {\n n: \"NSROWS\"\n },\n 0x0045: {\n n: \"NSCOLS\"\n },\n 0x0046: {\n n: \"RULER\"\n },\n 0x0047: {\n n: \"NNAME\"\n },\n 0x0048: {\n n: \"ACOMM\"\n },\n 0x0049: {\n n: \"AMACRO\"\n },\n 0x004A: {\n n: \"PARSE\"\n },\n 0x00FF: {\n n: \"\",\n f: parsenoop\n }\n };\n var WK3Enum = {\n 0x0000: {\n n: \"BOF\"\n },\n 0x0001: {\n n: \"EOF\"\n },\n 0x0003: {\n n: \"??\"\n },\n 0x0004: {\n n: \"??\"\n },\n 0x0005: {\n n: \"??\"\n },\n 0x0006: {\n n: \"??\"\n },\n 0x0007: {\n n: \"??\"\n },\n 0x0009: {\n n: \"??\"\n },\n 0x000a: {\n n: \"??\"\n },\n 0x000b: {\n n: \"??\"\n },\n 0x000c: {\n n: \"??\"\n },\n 0x000e: {\n n: \"??\"\n },\n 0x000f: {\n n: \"??\"\n },\n 0x0010: {\n n: \"??\"\n },\n 0x0011: {\n n: \"??\"\n },\n 0x0012: {\n n: \"??\"\n },\n 0x0013: {\n n: \"??\"\n },\n 0x0015: {\n n: \"??\"\n },\n 0x0016: {\n n: \"LABEL16\",\n f: parse_LABEL_16\n },\n 0x0017: {\n n: \"NUMBER17\",\n f: parse_NUMBER_17\n },\n 0x0018: {\n n: \"NUMBER18\",\n f: parse_NUMBER_18\n },\n 0x0019: {\n n: \"FORMULA19\",\n f: parse_FORMULA_19\n },\n 0x001a: {\n n: \"??\"\n },\n 0x001b: {\n n: \"??\"\n },\n 0x001c: {\n n: \"??\"\n },\n 0x001d: {\n n: \"??\"\n },\n 0x001e: {\n n: \"??\"\n },\n 0x001f: {\n n: \"??\"\n },\n 0x0021: {\n n: \"??\"\n },\n 0x0025: {\n n: \"NUMBER25\",\n f: parse_NUMBER_25\n },\n 0x0027: {\n n: \"NUMBER27\",\n f: parse_NUMBER_27\n },\n 0x0028: {\n n: \"FORMULA28\",\n f: parse_FORMULA_28\n },\n 0x00FF: {\n n: \"\",\n f: parsenoop\n }\n };\n return {\n to_workbook: lotus_to_workbook\n };\n }();\n /* 18.4.7 rPr CT_RPrElt */\n\n\n function parse_rpr(rpr) {\n var font = {},\n m = rpr.match(tagregex),\n i = 0;\n var pass = false;\n if (m) for (; i != m.length; ++i) {\n var y = parsexmltag(m[i]);\n\n switch (y[0].replace(/\\w*:/g, \"\")) {\n /* 18.8.12 condense CT_BooleanProperty */\n\n /* ** not required . */\n case '':\n case '':\n font.shadow = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.1 charset CT_IntProperty TODO */\n\n case '':\n case '':\n font.outline = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.5 rFont CT_FontName */\n\n case '':\n case '':\n font.strike = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.13 u CT_UnderlineProperty */\n\n case '':\n case '':\n font.u = 1;\n break;\n\n case '':\n break;\n\n /* 18.8.2 b */\n\n case '':\n case '':\n font.b = 1;\n break;\n\n case '':\n break;\n\n /* 18.8.26 i */\n\n case '':\n case '':\n font.i = 1;\n break;\n\n case '':\n break;\n\n /* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n }\n }\n return font;\n }\n\n var parse_rs = function () {\n var tregex = matchtag(\"t\"),\n rpregex = matchtag(\"rPr\");\n /* 18.4.4 r CT_RElt */\n\n function parse_r(r) {\n /* 18.4.12 t ST_Xstring */\n var t = r.match(tregex)\n /*, cp = 65001*/\n ;\n if (!t) return {\n t: \"s\",\n v: \"\"\n };\n var o = {\n t: 's',\n v: unescapexml(t[1])\n };\n var rpr = r.match(rpregex);\n if (rpr) o.s = parse_rpr(rpr[1]);\n return o;\n }\n\n var rregex = /<(?:\\w+:)?r>/g,\n rend = /<\\/(?:\\w+:)?r>/;\n return function parse_rs(rs) {\n return rs.replace(rregex, \"\").split(rend).map(parse_r).filter(function (r) {\n return r.v;\n });\n };\n }();\n /* Parse a list of tags */\n\n\n var rs_to_html = function parse_rs_factory() {\n var nlregex = /(\\r\\n|\\n)/g;\n\n function parse_rpr2(font, intro, outro) {\n var style = [];\n if (font.u) style.push(\"text-decoration: underline;\");\n if (font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n if (font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n if (font.outline) style.push(\"text-effect: outline;\");\n if (font.shadow) style.push(\"text-shadow: auto;\");\n intro.push('');\n\n if (font.b) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n if (font.i) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n if (font.strike) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n var align = font.valign || \"\";\n if (align == \"superscript\" || align == \"super\") align = \"sup\";else if (align == \"subscript\") align = \"sub\";\n\n if (align != \"\") {\n intro.push(\"<\" + align + \">\");\n outro.push(\"\");\n }\n\n outro.push(\"\");\n return font;\n }\n /* 18.4.4 r CT_RElt */\n\n\n function r_to_html(r) {\n var terms = [[], r.v, []];\n if (!r.v) return \"\";\n if (r.s) parse_rpr2(r.s, terms[0], terms[2]);\n return terms[0].join(\"\") + terms[1].replace(nlregex, '
') + terms[2].join(\"\");\n }\n\n return function parse_rs(rs) {\n return rs.map(r_to_html).join(\"\");\n };\n }();\n /* 18.4.8 si CT_Rst */\n\n\n var sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g,\n sirregex = /<(?:\\w+:)?r>/;\n var sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\n\n function parse_si(x, opts) {\n var html = opts ? opts.cellHTML : true;\n var z = {};\n if (!x) return {\n t: \"\"\n }; //var y;\n\n /* 18.4.12 t ST_Xstring (Plaintext String) */\n // TODO: is whitespace actually valid here?\n\n if (x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n z.t = unescapexml(utf8read(x.slice(x.indexOf(\">\") + 1).split(/<\\/(?:\\w+:)?t>/)[0] || \"\"));\n z.r = utf8read(x);\n if (html) z.h = escapehtml(z.t);\n }\n /* 18.4.4 r CT_RElt (Rich Text Run) */\n else if (\n /*y = */\n x.match(sirregex)) {\n z.r = utf8read(x);\n z.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex) || []).join(\"\").replace(tagregex, \"\")));\n if (html) z.h = rs_to_html(parse_rs(z.r));\n }\n /* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\n /* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\n\n return z;\n }\n /* 18.4 Shared String Table */\n\n\n var sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\n var sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\n var sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\n\n function parse_sst_xml(data, opts) {\n var s = [],\n ss = \"\";\n if (!data) return s;\n /* 18.4.9 sst CT_Sst */\n\n var sst = data.match(sstr0);\n\n if (sst) {\n ss = sst[2].replace(sstr1, \"\").split(sstr2);\n\n for (var i = 0; i != ss.length; ++i) {\n var o = parse_si(ss[i].trim(), opts);\n if (o != null) s[s.length] = o;\n }\n\n sst = parsexmltag(sst[1]);\n s.Count = sst.count;\n s.Unique = sst.uniqueCount;\n }\n\n return s;\n }\n\n RELS.SST = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\";\n var straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\n\n function write_sst_xml(sst, opts) {\n if (!opts.bookSST) return \"\";\n var o = [XML_HEADER];\n o[o.length] = writextag('sst', null, {\n xmlns: XMLNS.main[0],\n count: sst.Count,\n uniqueCount: sst.Unique\n });\n\n for (var i = 0; i != sst.length; ++i) {\n if (sst[i] == null) continue;\n var s = sst[i];\n var sitag = \"\";\n if (s.r) sitag += s.r;else {\n sitag += \"\" + escapexml(s.t) + \"\";\n }\n sitag += \"\";\n o[o.length] = sitag;\n }\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.221 BrtBeginSst */\n\n\n function parse_BrtBeginSst(data) {\n return [data.read_shift(4), data.read_shift(4)];\n }\n /* [MS-XLSB] 2.1.7.45 Shared Strings */\n\n\n function parse_sst_bin(data, opts) {\n var s = [];\n var pass = false;\n recordhopper(data, function hopper_sst(val, R_n, RT) {\n switch (RT) {\n case 0x009F:\n /* 'BrtBeginSst' */\n s.Count = val[0];\n s.Unique = val[1];\n break;\n\n case 0x0013:\n /* 'BrtSSTItem' */\n s.push(val);\n break;\n\n case 0x00A0:\n /* 'BrtEndSst' */\n return true;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n default:\n if (R_n.indexOf(\"Begin\") > 0) {\n /* empty */\n } else if (R_n.indexOf(\"End\") > 0) {\n /* empty */\n }\n\n if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n }\n });\n return s;\n }\n\n function write_BrtBeginSst(sst, o) {\n if (!o) o = new_buf(8);\n o.write_shift(4, sst.Count);\n o.write_shift(4, sst.Unique);\n return o;\n }\n\n var write_BrtSSTItem = write_RichStr;\n\n function write_sst_bin(sst) {\n var ba = buf_array();\n write_record(ba, \"BrtBeginSst\", write_BrtBeginSst(sst));\n\n for (var i = 0; i < sst.length; ++i) {\n write_record(ba, \"BrtSSTItem\", write_BrtSSTItem(sst[i]));\n }\n /* FRTSST */\n\n\n write_record(ba, \"BrtEndSst\");\n return ba.end();\n }\n\n function _JS2ANSI(str) {\n if (typeof cptable !== 'undefined') return cptable.utils.encode(current_ansi, str);\n var o = [],\n oo = str.split(\"\");\n\n for (var i = 0; i < oo.length; ++i) {\n o[i] = oo[i].charCodeAt(0);\n }\n\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.4 Version */\n\n\n function parse_CRYPTOVersion(blob, length) {\n var o = {};\n o.Major = blob.read_shift(2);\n o.Minor = blob.read_shift(2);\n if (length >= 4) blob.l += length - 4;\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\n\n\n function parse_DataSpaceVersionInfo(blob) {\n var o = {};\n o.id = blob.read_shift(0, 'lpp4');\n o.R = parse_CRYPTOVersion(blob, 4);\n o.U = parse_CRYPTOVersion(blob, 4);\n o.W = parse_CRYPTOVersion(blob, 4);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\n\n\n function parse_DataSpaceMapEntry(blob) {\n var len = blob.read_shift(4);\n var end = blob.l + len - 4;\n var o = {};\n var cnt = blob.read_shift(4);\n var comps = [];\n /* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\n while (cnt-- > 0) {\n comps.push({\n t: blob.read_shift(4),\n v: blob.read_shift(0, 'lpp4')\n });\n }\n\n o.name = blob.read_shift(0, 'lpp4');\n o.comps = comps;\n if (blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\n\n\n function parse_DataSpaceMap(blob) {\n var o = [];\n blob.l += 4; // must be 0x8\n\n var cnt = blob.read_shift(4);\n\n while (cnt-- > 0) {\n o.push(parse_DataSpaceMapEntry(blob));\n }\n\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\n\n\n function parse_DataSpaceDefinition(blob) {\n var o = [];\n blob.l += 4; // must be 0x8\n\n var cnt = blob.read_shift(4);\n\n while (cnt-- > 0) {\n o.push(blob.read_shift(0, 'lpp4'));\n }\n\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\n\n\n function parse_TransformInfoHeader(blob) {\n var o = {};\n /*var len = */\n\n blob.read_shift(4);\n blob.l += 4; // must be 0x1\n\n o.id = blob.read_shift(0, 'lpp4');\n o.name = blob.read_shift(0, 'lpp4');\n o.R = parse_CRYPTOVersion(blob, 4);\n o.U = parse_CRYPTOVersion(blob, 4);\n o.W = parse_CRYPTOVersion(blob, 4);\n return o;\n }\n\n function parse_Primary(blob) {\n /* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n var hdr = parse_TransformInfoHeader(blob);\n /* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\n hdr.ename = blob.read_shift(0, '8lpp4');\n hdr.blksz = blob.read_shift(4);\n hdr.cmode = blob.read_shift(4);\n if (blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n return hdr;\n }\n /* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\n\n\n function parse_EncryptionHeader(blob, length) {\n var tgt = blob.l + length;\n var o = {};\n o.Flags = blob.read_shift(4) & 0x3F;\n blob.l += 4;\n o.AlgID = blob.read_shift(4);\n var valid = false;\n\n switch (o.AlgID) {\n case 0x660E:\n case 0x660F:\n case 0x6610:\n valid = o.Flags == 0x24;\n break;\n\n case 0x6801:\n valid = o.Flags == 0x04;\n break;\n\n case 0:\n valid = o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24;\n break;\n\n default:\n throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n }\n\n if (!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n o.AlgIDHash = blob.read_shift(4);\n o.KeySize = blob.read_shift(4);\n o.ProviderType = blob.read_shift(4);\n blob.l += 8;\n o.CSPName = blob.read_shift(tgt - blob.l >> 1, 'utf16le');\n blob.l = tgt;\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\n\n\n function parse_EncryptionVerifier(blob, length) {\n var o = {},\n tgt = blob.l + length;\n blob.l += 4; // SaltSize must be 0x10\n\n o.Salt = blob.slice(blob.l, blob.l + 16);\n blob.l += 16;\n o.Verifier = blob.slice(blob.l, blob.l + 16);\n blob.l += 16;\n /*var sz = */\n\n blob.read_shift(4);\n o.VerifierHash = blob.slice(blob.l, tgt);\n blob.l = tgt;\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\n\n\n function parse_EncryptionInfo(blob) {\n var vers = parse_CRYPTOVersion(blob);\n\n switch (vers.Minor) {\n case 0x02:\n return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\n case 0x03:\n return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\n case 0x04:\n return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n }\n\n throw new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n }\n /* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\n\n\n function parse_EncInfoStd(blob) {\n var flags = blob.read_shift(4);\n if ((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n var sz = blob.read_shift(4); //var tgt = blob.l + sz;\n\n var hdr = parse_EncryptionHeader(blob, sz);\n var verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n return {\n t: \"Std\",\n h: hdr,\n v: verifier\n };\n }\n /* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\n\n\n function parse_EncInfoExt() {\n throw new Error(\"File is password-protected: ECMA-376 Extensible\");\n }\n /* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\n\n\n function parse_EncInfoAgl(blob) {\n var KeyData = [\"saltSize\", \"blockSize\", \"keyBits\", \"hashSize\", \"cipherAlgorithm\", \"cipherChaining\", \"hashAlgorithm\", \"saltValue\"];\n blob.l += 4;\n var xml = blob.read_shift(blob.length - blob.l, 'utf8');\n var o = {};\n xml.replace(tagregex, function xml_agile(x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n case ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n o.Flags = blob.read_shift(4);\n length -= 4;\n var sz = blob.read_shift(4);\n length -= 4;\n o.EncryptionHeader = parse_EncryptionHeader(blob, sz);\n length -= sz;\n o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\n\n\n function parse_RC4Header(blob) {\n var o = {};\n var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n if (vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n o.Salt = blob.read_shift(16);\n o.EncryptedVerifier = blob.read_shift(16);\n o.EncryptedVerifierHash = blob.read_shift(16);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\n\n\n function crypto_CreatePasswordVerifier_Method1(Password) {\n var Verifier = 0x0000,\n PasswordArray;\n\n var PasswordDecoded = _JS2ANSI(Password);\n\n var len = PasswordDecoded.length + 1,\n i,\n PasswordByte;\n var Intermediate1, Intermediate2, Intermediate3;\n PasswordArray = new_raw_buf(len);\n PasswordArray[0] = PasswordDecoded.length;\n\n for (i = 1; i != len; ++i) {\n PasswordArray[i] = PasswordDecoded[i - 1];\n }\n\n for (i = len - 1; i >= 0; --i) {\n PasswordByte = PasswordArray[i];\n Intermediate1 = (Verifier & 0x4000) === 0x0000 ? 0 : 1;\n Intermediate2 = Verifier << 1 & 0x7FFF;\n Intermediate3 = Intermediate1 | Intermediate2;\n Verifier = Intermediate3 ^ PasswordByte;\n }\n\n return Verifier ^ 0xCE4B;\n }\n /* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\n\n\n var crypto_CreateXorArray_Method1 = function () {\n var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n var XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\n var Ror = function Ror(Byte) {\n return (Byte / 2 | Byte * 128) & 0xFF;\n };\n\n var XorRor = function XorRor(byte1, byte2) {\n return Ror(byte1 ^ byte2);\n };\n\n var CreateXorKey_Method1 = function CreateXorKey_Method1(Password) {\n var XorKey = InitialCode[Password.length - 1];\n var CurrentElement = 0x68;\n\n for (var i = Password.length - 1; i >= 0; --i) {\n var Char = Password[i];\n\n for (var j = 0; j != 7; ++j) {\n if (Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n Char *= 2;\n --CurrentElement;\n }\n }\n\n return XorKey;\n };\n\n return function (password) {\n var Password = _JS2ANSI(password);\n\n var XorKey = CreateXorKey_Method1(Password);\n var Index = Password.length;\n var ObfuscationArray = new_raw_buf(16);\n\n for (var i = 0; i != 16; ++i) {\n ObfuscationArray[i] = 0x00;\n }\n\n var Temp, PasswordLastChar, PadIndex;\n\n if ((Index & 1) === 1) {\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n --Index;\n Temp = XorKey & 0xFF;\n PasswordLastChar = Password[Password.length - 1];\n ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n }\n\n while (Index > 0) {\n --Index;\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n --Index;\n Temp = XorKey & 0xFF;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n }\n\n Index = 15;\n PadIndex = 15 - Password.length;\n\n while (PadIndex > 0) {\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n --Index;\n --PadIndex;\n Temp = XorKey & 0xFF;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n --Index;\n --PadIndex;\n }\n\n return ObfuscationArray;\n };\n }();\n /* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\n\n\n var crypto_DecryptData_Method1 = function crypto_DecryptData_Method1(password, Data, XorArrayIndex, XorArray, O) {\n /* If XorArray is set, use it; if O is not set, make changes in-place */\n if (!O) O = Data;\n if (!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n var Index, Value;\n\n for (Index = 0; Index != Data.length; ++Index) {\n Value = Data[Index];\n Value ^= XorArray[XorArrayIndex];\n Value = (Value >> 5 | Value << 3) & 0xFF;\n O[Index] = Value;\n ++XorArrayIndex;\n }\n\n return [O, XorArrayIndex, XorArray];\n };\n\n var crypto_MakeXorDecryptor = function crypto_MakeXorDecryptor(password) {\n var XorArrayIndex = 0,\n XorArray = crypto_CreateXorArray_Method1(password);\n return function (Data) {\n var O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n XorArrayIndex = O[1];\n return O[0];\n };\n };\n /* 2.5.343 */\n\n\n function parse_XORObfuscation(blob, length, opts, out) {\n var o = {\n key: parseuint16(blob),\n verificationBytes: parseuint16(blob)\n };\n if (opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n out.valid = o.verificationBytes === o.verifier;\n if (out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n return o;\n }\n /* 2.4.117 */\n\n\n function parse_FilePassHeader(blob, length, oo) {\n var o = oo || {};\n o.Info = blob.read_shift(2);\n blob.l -= 2;\n if (o.Info === 1) o.Data = parse_RC4Header(blob, length);else o.Data = parse_RC4CryptoHeader(blob, length);\n return o;\n }\n\n function parse_FilePass(blob, length, opts) {\n var o = {\n Type: opts.biff >= 8 ? blob.read_shift(2) : 0\n };\n /* wEncryptionType */\n\n if (o.Type) parse_FilePassHeader(blob, length - 2, o);else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n return o;\n }\n\n var RTF = function () {\n function rtf_to_sheet(d, opts) {\n switch (opts.type) {\n case 'base64':\n return rtf_to_sheet_str(Base64.decode(d), opts);\n\n case 'binary':\n return rtf_to_sheet_str(d, opts);\n\n case 'buffer':\n return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n case 'array':\n return rtf_to_sheet_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n /* TODO: this is a stub */\n\n\n function rtf_to_sheet_str(str, opts) {\n var o = opts || {};\n var ws = o.dense ? [] : {};\n var rows = str.match(/\\\\trowd.*?\\\\row\\b/g);\n if (!rows.length) throw new Error(\"RTF missing table\");\n var range = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: rows.length - 1\n }\n };\n rows.forEach(function (rowtf, R) {\n if (Array.isArray(ws)) ws[R] = [];\n var rtfre = /\\\\\\w+\\b/g;\n var last_index = 0;\n var res;\n var C = -1;\n\n while (res = rtfre.exec(rowtf)) {\n switch (res[0]) {\n case \"\\\\cell\":\n var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n if (data[0] == \" \") data = data.slice(1);\n ++C;\n\n if (data.length) {\n // TODO: value parsing, including codepage adjustments\n var cell = {\n v: data,\n t: \"s\"\n };\n if (Array.isArray(ws)) ws[R][C] = cell;else ws[encode_cell({\n r: R,\n c: C\n })] = cell;\n }\n\n break;\n }\n\n last_index = rtfre.lastIndex;\n }\n\n if (C > range.e.c) range.e.c = C;\n });\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function rtf_to_workbook(d, opts) {\n return sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n }\n /* TODO: this is a stub */\n\n\n function sheet_to_rtf(ws) {\n var o = [\"{\\\\rtf1\\\\ansi\"];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n o.push(\"\\\\trowd\\\\trautofit1\");\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n o.push(\"\\\\cellx\" + (C + 1));\n }\n\n o.push(\"\\\\pard\\\\intbl\");\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n o.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n o.push(\"\\\\cell\");\n }\n\n o.push(\"\\\\pard\\\\intbl\\\\row\");\n }\n\n return o.join(\"\") + \"}\";\n }\n\n return {\n to_workbook: rtf_to_workbook,\n to_sheet: rtf_to_sheet,\n from_sheet: sheet_to_rtf\n };\n }();\n\n function hex2RGB(h) {\n var o = h.slice(h[0] === \"#\" ? 1 : 0).slice(0, 6);\n return [parseInt(o.slice(0, 2), 16), parseInt(o.slice(2, 4), 16), parseInt(o.slice(4, 6), 16)];\n }\n\n function rgb2Hex(rgb) {\n for (var i = 0, o = 1; i != 3; ++i) {\n o = o * 256 + (rgb[i] > 255 ? 255 : rgb[i] < 0 ? 0 : rgb[i]);\n }\n\n return o.toString(16).toUpperCase().slice(1);\n }\n\n function rgb2HSL(rgb) {\n var R = rgb[0] / 255,\n G = rgb[1] / 255,\n B = rgb[2] / 255;\n var M = Math.max(R, G, B),\n m = Math.min(R, G, B),\n C = M - m;\n if (C === 0) return [0, 0, R];\n var H6 = 0,\n S = 0,\n L2 = M + m;\n S = C / (L2 > 1 ? 2 - L2 : L2);\n\n switch (M) {\n case R:\n H6 = ((G - B) / C + 6) % 6;\n break;\n\n case G:\n H6 = (B - R) / C + 2;\n break;\n\n case B:\n H6 = (R - G) / C + 4;\n break;\n }\n\n return [H6 / 6, S, L2 / 2];\n }\n\n function hsl2RGB(hsl) {\n var H = hsl[0],\n S = hsl[1],\n L = hsl[2];\n var C = S * 2 * (L < 0.5 ? L : 1 - L),\n m = L - C / 2;\n var rgb = [m, m, m],\n h6 = 6 * H;\n var X;\n if (S !== 0) switch (h6 | 0) {\n case 0:\n case 6:\n X = C * h6;\n rgb[0] += C;\n rgb[1] += X;\n break;\n\n case 1:\n X = C * (2 - h6);\n rgb[0] += X;\n rgb[1] += C;\n break;\n\n case 2:\n X = C * (h6 - 2);\n rgb[1] += C;\n rgb[2] += X;\n break;\n\n case 3:\n X = C * (4 - h6);\n rgb[1] += X;\n rgb[2] += C;\n break;\n\n case 4:\n X = C * (h6 - 4);\n rgb[2] += C;\n rgb[0] += X;\n break;\n\n case 5:\n X = C * (6 - h6);\n rgb[2] += X;\n rgb[0] += C;\n break;\n }\n\n for (var i = 0; i != 3; ++i) {\n rgb[i] = Math.round(rgb[i] * 255);\n }\n\n return rgb;\n }\n /* 18.8.3 bgColor tint algorithm */\n\n\n function rgb_tint(hex, tint) {\n if (tint === 0) return hex;\n var hsl = rgb2HSL(hex2RGB(hex));\n if (tint < 0) hsl[2] = hsl[2] * (1 + tint);else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n return rgb2Hex(hsl2RGB(hsl));\n }\n /* 18.3.1.13 width calculations */\n\n /* [MS-OI29500] 2.1.595 Column Width & Formatting */\n\n\n var DEF_MDW = 6,\n MAX_MDW = 15,\n MIN_MDW = 1,\n MDW = DEF_MDW;\n\n function width2px(width) {\n return Math.floor((width + Math.round(128 / MDW) / 256) * MDW);\n }\n\n function px2char(px) {\n return Math.floor((px - 5) / MDW * 100 + 0.5) / 100;\n }\n\n function char2width(chr) {\n return Math.round((chr * MDW + 5) / MDW * 256) / 256;\n } //function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n //function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\n\n\n function cycle_width(collw) {\n return char2width(px2char(width2px(collw)));\n }\n /* XLSX/XLSB/XLS specify width in units of MDW */\n\n\n function find_mdw_colw(collw) {\n var delta = Math.abs(collw - cycle_width(collw)),\n _MDW = MDW;\n if (delta > 0.005) for (MDW = MIN_MDW; MDW < MAX_MDW; ++MDW) {\n if (Math.abs(collw - cycle_width(collw)) <= delta) {\n delta = Math.abs(collw - cycle_width(collw));\n _MDW = MDW;\n }\n }\n MDW = _MDW;\n }\n /* XLML specifies width in terms of pixels */\n\n /*function find_mdw_wpx(wpx) {\n \tvar delta = Infinity, guess = 0, _MDW = MIN_MDW;\n \tfor(MDW=MIN_MDW; MDW 0.5) guess--;\n \t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n \t}\n \tMDW = _MDW;\n }*/\n\n\n function process_col(coll) {\n if (coll.width) {\n coll.wpx = width2px(coll.width);\n coll.wch = px2char(coll.wpx);\n coll.MDW = MDW;\n } else if (coll.wpx) {\n coll.wch = px2char(coll.wpx);\n coll.width = char2width(coll.wch);\n coll.MDW = MDW;\n } else if (typeof coll.wch == 'number') {\n coll.width = char2width(coll.wch);\n coll.wpx = width2px(coll.width);\n coll.MDW = MDW;\n }\n\n if (coll.customWidth) delete coll.customWidth;\n }\n\n var DEF_PPI = 96,\n PPI = DEF_PPI;\n\n function px2pt(px) {\n return px * 96 / PPI;\n }\n\n function pt2px(pt) {\n return pt * PPI / 96;\n }\n /* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\n\n\n var XLMLPatternTypeMap = {\n \"None\": \"none\",\n \"Solid\": \"solid\",\n \"Gray50\": \"mediumGray\",\n \"Gray75\": \"darkGray\",\n \"Gray25\": \"lightGray\",\n \"HorzStripe\": \"darkHorizontal\",\n \"VertStripe\": \"darkVertical\",\n \"ReverseDiagStripe\": \"darkDown\",\n \"DiagStripe\": \"darkUp\",\n \"DiagCross\": \"darkGrid\",\n \"ThickDiagCross\": \"darkTrellis\",\n \"ThinHorzStripe\": \"lightHorizontal\",\n \"ThinVertStripe\": \"lightVertical\",\n \"ThinReverseDiagStripe\": \"lightDown\",\n \"ThinHorzCross\": \"lightGrid\"\n };\n /* 18.8.5 borders CT_Borders */\n\n function parse_borders(t, styles, themes, opts) {\n styles.Borders = [];\n var border = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.4 border CT_Border */\n\n case '':\n case '':\n border = {};\n if (y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n if (y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n styles.Borders.push(border);\n break;\n\n case '':\n break;\n\n /* note: not in spec, appears to be CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* note: not in spec, appears to be CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.43 top CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.6 bottom CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.13 diagonal CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.25 horizontal CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.44 vertical CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.37 start CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.16 end CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.? color CT_Color */\n\n case '':\n break;\n\n case '':\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n }\n\n }\n });\n }\n /* 18.8.21 fills CT_Fills */\n\n\n function parse_fills(t, styles, themes, opts) {\n styles.Fills = [];\n var fill = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.20 fill CT_Fill */\n\n case '':\n case '':\n fill = {};\n styles.Fills.push(fill);\n break;\n\n case '':\n break;\n\n /* 18.8.24 gradientFill CT_GradientFill */\n\n case '':\n break;\n\n case '':\n styles.Fills.push(fill);\n fill = {};\n break;\n\n /* 18.8.32 patternFill CT_PatternFill */\n\n case '':\n if (y.patternType) fill.patternType = y.patternType;\n break;\n\n case '':\n case '':\n break;\n\n /* 18.8.3 bgColor CT_Color */\n\n case '':\n case '':\n break;\n\n /* 18.8.19 fgColor CT_Color */\n\n case '':\n case '':\n break;\n\n /* 18.8.38 stop CT_GradientStop */\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.? color CT_Color */\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n }\n\n }\n });\n }\n /* 18.8.23 fonts CT_Fonts */\n\n\n function parse_fonts(t, styles, themes, opts) {\n styles.Fonts = [];\n var font = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.22 font CT_Font */\n\n case '':\n break;\n\n case '':\n case '':\n styles.Fonts.push(font);\n font = {};\n break;\n\n /* 18.8.29 name CT_FontName */\n\n case '':\n case '':\n break;\n\n /* 18.8.2 b CT_BooleanProperty */\n\n case '':\n font.bold = 1;\n break;\n\n /* 18.8.26 i CT_BooleanProperty */\n\n case '':\n font.italic = 1;\n break;\n\n /* 18.4.13 u CT_UnderlineProperty */\n\n case '':\n font.underline = 1;\n break;\n\n /* 18.4.10 strike CT_BooleanProperty */\n\n case '':\n font.strike = 1;\n break;\n\n /* 18.4.2 outline CT_BooleanProperty */\n\n case '':\n font.outline = 1;\n break;\n\n /* 18.8.36 shadow CT_BooleanProperty */\n\n case '':\n font.shadow = 1;\n break;\n\n /* 18.8.12 condense CT_BooleanProperty */\n\n case '':\n font.condense = 1;\n break;\n\n /* 18.8.17 extend CT_BooleanProperty */\n\n case '':\n font.extend = 1;\n break;\n\n /* 18.4.11 sz CT_FontSize */\n\n case '':\n case '':\n break;\n\n /* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\n case '':\n case '':\n break;\n\n /* 18.8.18 family CT_FontFamily */\n\n case '':\n case '':\n break;\n\n /* 18.8.35 scheme CT_FontScheme */\n\n case '':\n case '':\n break;\n\n /* 18.4.1 charset CT_IntProperty */\n\n case '':\n case '':\n break;\n\n /* note: sometimes mc:AlternateContent appears bare */\n\n case '':\n pass = false;\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n }\n\n }\n });\n }\n /* 18.8.31 numFmts CT_NumFmts */\n\n\n function parse_numFmts(t, styles, opts) {\n styles.NumberFmt = [];\n var k\n /*Array*/\n = keys(SSF._table);\n\n for (var i = 0; i < k.length; ++i) {\n styles.NumberFmt[k[i]] = SSF._table[k[i]];\n }\n\n var m = t[0].match(tagregex);\n if (!m) return;\n\n for (i = 0; i < m.length; ++i) {\n var y = parsexmltag(m[i]);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n case '':\n break;\n\n case ' 0) {\n if (j > 0x188) {\n for (j = 0x188; j > 0x3c; --j) {\n if (styles.NumberFmt[j] == null) break;\n }\n\n styles.NumberFmt[j] = f;\n }\n\n SSF.load(f, j);\n }\n }\n break;\n\n case '':\n break;\n\n default:\n if (opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n }\n }\n }\n\n function write_numFmts(NF) {\n var o = [\"\"];\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) o[o.length] = writextag('numFmt', null, {\n numFmtId: i,\n formatCode: escapexml(NF[i])\n });\n }\n });\n if (o.length === 1) return \"\";\n o[o.length] = \"\";\n o[0] = writextag('numFmts', null, {\n count: o.length - 2\n }).replace(\"/>\", \">\");\n return o.join(\"\");\n }\n /* 18.8.10 cellXfs CT_CellXfs */\n\n\n var cellXF_uint = [\"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\"];\n var cellXF_bool = [\"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\"];\n\n function parse_cellXfs(t, styles, opts) {\n styles.CellXf = [];\n var xf;\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x),\n i = 0;\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n case '':\n break;\n\n /* 18.8.45 xf CT_Xf */\n\n case '':\n xf = y;\n delete xf[0];\n\n for (i = 0; i < cellXF_uint.length; ++i) {\n if (xf[cellXF_uint[i]]) xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n }\n\n for (i = 0; i < cellXF_bool.length; ++i) {\n if (xf[cellXF_bool[i]]) xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n }\n\n if (styles.NumberFmt && xf.numFmtId > 0x188) {\n for (i = 0x188; i > 0x3c; --i) {\n if (styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) {\n xf.numFmtId = i;\n break;\n }\n }\n }\n\n styles.CellXf.push(xf);\n break;\n\n case '':\n break;\n\n /* 18.8.1 alignment CT_CellAlignment */\n\n case '':\n var alignment = {};\n if (y.vertical) alignment.vertical = y.vertical;\n if (y.horizontal) alignment.horizontal = y.horizontal;\n if (y.textRotation != null) alignment.textRotation = y.textRotation;\n if (y.indent) alignment.indent = y.indent;\n if (y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n xf.alignment = alignment;\n break;\n\n case '':\n break;\n\n /* 18.8.33 protection CT_CellProtection */\n\n case '':\n case '':\n break;\n\n /* note: sometimes mc:AlternateContent appears bare */\n\n case '':\n pass = false;\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n }\n\n }\n });\n }\n\n function write_cellXfs(cellXfs) {\n var o = [];\n o[o.length] = writextag('cellXfs', null);\n cellXfs.forEach(function (c) {\n o[o.length] = writextag('xf', null, c);\n });\n o[o.length] = \"\";\n if (o.length === 2) return \"\";\n o[0] = writextag('cellXfs', null, {\n count: o.length - 2\n }).replace(\"/>\", \">\");\n return o.join(\"\");\n }\n /* 18.8 Styles CT_Stylesheet*/\n\n\n var parse_sty_xml = function make_pstyx() {\n var numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\n var cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\n var fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\n var fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\n var bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n return function parse_sty_xml(data, themes, opts) {\n var styles = {};\n if (!data) return styles;\n data = data.replace(//mg, \"\").replace(//gm, \"\");\n /* 18.8.39 styleSheet CT_Stylesheet */\n\n var t;\n /* 18.8.31 numFmts CT_NumFmts ? */\n\n if (t = data.match(numFmtRegex)) parse_numFmts(t, styles, opts);\n /* 18.8.23 fonts CT_Fonts ? */\n\n if (t = data.match(fontsRegex)) parse_fonts(t, styles, themes, opts);\n /* 18.8.21 fills CT_Fills ? */\n\n if (t = data.match(fillsRegex)) parse_fills(t, styles, themes, opts);\n /* 18.8.5 borders CT_Borders ? */\n\n if (t = data.match(bordersRegex)) parse_borders(t, styles, themes, opts);\n /* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\n /* 18.8.8 cellStyles CT_CellStyles ? */\n\n /* 18.8.10 cellXfs CT_CellXfs ? */\n\n if (t = data.match(cellXfRegex)) parse_cellXfs(t, styles, opts);\n /* 18.8.15 dxfs CT_Dxfs ? */\n\n /* 18.8.42 tableStyles CT_TableStyles ? */\n\n /* 18.8.11 colors CT_Colors ? */\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n return styles;\n };\n }();\n\n var STYLES_XML_ROOT = writextag('styleSheet', null, {\n 'xmlns': XMLNS.main[0],\n 'xmlns:vt': XMLNS.vt\n });\n RELS.STY = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n\n function write_sty_xml(wb, opts) {\n var o = [XML_HEADER, STYLES_XML_ROOT],\n w;\n if (wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n if (w = write_cellXfs(opts.cellXfs)) o[o.length] = w;\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.657 BrtFmt */\n\n\n function parse_BrtFmt(data, length) {\n var numFmtId = data.read_shift(2);\n var stFmtCode = parse_XLWideString(data, length - 2);\n return [numFmtId, stFmtCode];\n }\n\n function write_BrtFmt(i, f, o) {\n if (!o) o = new_buf(6 + 4 * f.length);\n o.write_shift(2, i);\n write_XLWideString(f, o);\n var out = o.length > o.l ? o.slice(0, o.l) : o;\n if (o.l == null) o.l = o.length;\n return out;\n }\n /* [MS-XLSB] 2.4.659 BrtFont TODO */\n\n\n function parse_BrtFont(data, length, opts) {\n var out = {};\n out.sz = data.read_shift(2) / 20;\n var grbit = parse_FontFlags(data, 2, opts);\n if (grbit.fItalic) out.italic = 1;\n if (grbit.fCondense) out.condense = 1;\n if (grbit.fExtend) out.extend = 1;\n if (grbit.fShadow) out.shadow = 1;\n if (grbit.fOutline) out.outline = 1;\n if (grbit.fStrikeout) out.strike = 1;\n var bls = data.read_shift(2);\n if (bls === 0x02BC) out.bold = 1;\n\n switch (data.read_shift(2)) {\n /* case 0: out.vertAlign = \"baseline\"; break; */\n case 1:\n out.vertAlign = \"superscript\";\n break;\n\n case 2:\n out.vertAlign = \"subscript\";\n break;\n }\n\n var underline = data.read_shift(1);\n if (underline != 0) out.underline = underline;\n var family = data.read_shift(1);\n if (family > 0) out.family = family;\n var bCharSet = data.read_shift(1);\n if (bCharSet > 0) out.charset = bCharSet;\n data.l++;\n out.color = parse_BrtColor(data, 8);\n\n switch (data.read_shift(1)) {\n /* case 0: out.scheme = \"none\": break; */\n case 1:\n out.scheme = \"major\";\n break;\n\n case 2:\n out.scheme = \"minor\";\n break;\n }\n\n out.name = parse_XLWideString(data, length - 21);\n return out;\n }\n\n function write_BrtFont(font, o) {\n if (!o) o = new_buf(25 + 4 * 32);\n o.write_shift(2, font.sz * 20);\n write_FontFlags(font, o);\n o.write_shift(2, font.bold ? 0x02BC : 0x0190);\n var sss = 0;\n if (font.vertAlign == \"superscript\") sss = 1;else if (font.vertAlign == \"subscript\") sss = 2;\n o.write_shift(2, sss);\n o.write_shift(1, font.underline || 0);\n o.write_shift(1, font.family || 0);\n o.write_shift(1, font.charset || 0);\n o.write_shift(1, 0);\n write_BrtColor(font.color, o);\n var scheme = 0;\n if (font.scheme == \"major\") scheme = 1;\n if (font.scheme == \"minor\") scheme = 2;\n o.write_shift(1, scheme);\n write_XLWideString(font.name, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.650 BrtFill */\n\n\n var XLSBFillPTNames = [\"none\", \"solid\", \"mediumGray\", \"darkGray\", \"lightGray\", \"darkHorizontal\", \"darkVertical\", \"darkDown\", \"darkUp\", \"darkGrid\", \"darkTrellis\", \"lightHorizontal\", \"lightVertical\", \"lightDown\", \"lightUp\", \"lightGrid\", \"lightTrellis\", \"gray125\", \"gray0625\"];\n var rev_XLSBFillPTNames = evert(XLSBFillPTNames);\n /* TODO: gradient fill representation */\n\n var parse_BrtFill = parsenoop;\n\n function write_BrtFill(fill, o) {\n if (!o) o = new_buf(4 * 3 + 8 * 7 + 16 * 1);\n var fls = rev_XLSBFillPTNames[fill.patternType];\n if (fls == null) fls = 0x28;\n o.write_shift(4, fls);\n var j = 0;\n\n if (fls != 0x28) {\n /* TODO: custom FG Color */\n write_BrtColor({\n auto: 1\n }, o);\n /* TODO: custom BG Color */\n\n write_BrtColor({\n auto: 1\n }, o);\n\n for (; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n } else {\n for (; j < 4; ++j) {\n o.write_shift(4, 0);\n }\n\n for (; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n /* TODO */\n\n /* iGradientType */\n\n /* xnumDegree */\n\n /* xnumFillToLeft */\n\n /* xnumFillToRight */\n\n /* xnumFillToTop */\n\n /* xnumFillToBottom */\n\n /* cNumStop */\n\n /* xfillGradientStop */\n\n }\n\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.824 BrtXF */\n\n\n function parse_BrtXF(data, length) {\n var tgt = data.l + length;\n var ixfeParent = data.read_shift(2);\n var ifmt = data.read_shift(2);\n data.l = tgt;\n return {\n ixfe: ixfeParent,\n numFmtId: ifmt\n };\n }\n\n function write_BrtXF(data, ixfeP, o) {\n if (!o) o = new_buf(16);\n o.write_shift(2, ixfeP || 0);\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, 0);\n /* iFont */\n\n o.write_shift(2, 0);\n /* iFill */\n\n o.write_shift(2, 0);\n /* ixBorder */\n\n o.write_shift(1, 0);\n /* trot */\n\n o.write_shift(1, 0);\n /* indent */\n\n var flow = 0;\n o.write_shift(1, flow);\n /* flags */\n\n o.write_shift(1, 0);\n /* flags */\n\n o.write_shift(1, 0);\n /* xfGrbitAtr */\n\n o.write_shift(1, 0);\n return o;\n }\n /* [MS-XLSB] 2.5.4 Blxf TODO */\n\n\n function write_Blxf(data, o) {\n if (!o) o = new_buf(10);\n o.write_shift(1, 0);\n /* dg */\n\n o.write_shift(1, 0);\n o.write_shift(4, 0);\n /* color */\n\n o.write_shift(4, 0);\n /* color */\n\n return o;\n }\n /* [MS-XLSB] 2.4.302 BrtBorder TODO */\n\n\n var parse_BrtBorder = parsenoop;\n\n function write_BrtBorder(border, o) {\n if (!o) o = new_buf(51);\n o.write_shift(1, 0);\n /* diagonal */\n\n write_Blxf(null, o);\n /* top */\n\n write_Blxf(null, o);\n /* bottom */\n\n write_Blxf(null, o);\n /* left */\n\n write_Blxf(null, o);\n /* right */\n\n write_Blxf(null, o);\n /* diag */\n\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.763 BrtStyle TODO */\n\n\n function write_BrtStyle(style, o) {\n if (!o) o = new_buf(12 + 4 * 10);\n o.write_shift(4, style.xfId);\n o.write_shift(2, 1);\n o.write_shift(1, +style.builtinId);\n o.write_shift(1, 0);\n /* iLevel */\n\n write_XLNullableWideString(style.name || \"\", o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\n\n\n function write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n var o = new_buf(4 + 256 * 2 * 4);\n o.write_shift(4, cnt);\n write_XLNullableWideString(defTableStyle, o);\n write_XLNullableWideString(defPivotStyle, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.1.7.50 Styles */\n\n\n function parse_sty_bin(data, themes, opts) {\n var styles = {};\n styles.NumberFmt = [];\n\n for (var y in SSF._table) {\n styles.NumberFmt[y] = SSF._table[y];\n }\n\n styles.CellXf = [];\n styles.Fonts = [];\n var state = [];\n var pass = false;\n recordhopper(data, function hopper_sty(val, R_n, RT) {\n switch (RT) {\n case 0x002C:\n /* 'BrtFmt' */\n styles.NumberFmt[val[0]] = val[1];\n SSF.load(val[1], val[0]);\n break;\n\n case 0x002B:\n /* 'BrtFont' */\n styles.Fonts.push(val);\n\n if (val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n val.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n }\n\n break;\n\n case 0x0401:\n /* 'BrtKnownFonts' */\n break;\n\n case 0x002D:\n /* 'BrtFill' */\n break;\n\n case 0x002E:\n /* 'BrtBorder' */\n break;\n\n case 0x002F:\n /* 'BrtXF' */\n if (state[state.length - 1] == \"BrtBeginCellXFs\") {\n styles.CellXf.push(val);\n }\n\n break;\n\n case 0x0030:\n /* 'BrtStyle' */\n\n case 0x01FB:\n /* 'BrtDXF' */\n\n case 0x023C:\n /* 'BrtMRUColor' */\n\n case 0x01DB:\n /* 'BrtIndexedColor': */\n break;\n\n case 0x0493:\n /* 'BrtDXF14' */\n\n case 0x0836:\n /* 'BrtDXF15' */\n\n case 0x046A:\n /* 'BrtSlicerStyleElement' */\n\n case 0x0200:\n /* 'BrtTableStyleElement' */\n\n case 0x082F:\n /* 'BrtTimelineStyleElement' */\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) state.push(R_n);else if ((R_n || \"\").indexOf(\"End\") > 0) state.pop();else if (!pass || opts.WTF && state[state.length - 1] != \"BrtACBegin\") throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n }\n });\n return styles;\n }\n\n function write_FMTS_bin(ba, NF) {\n if (!NF) return;\n var cnt = 0;\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) ++cnt;\n }\n });\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginFmts\", write_UInt32LE(cnt));\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) write_record(ba, \"BrtFmt\", write_BrtFmt(i, NF[i]));\n }\n });\n write_record(ba, \"BrtEndFmts\");\n }\n\n function write_FONTS_bin(ba) {\n var cnt = 1;\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginFonts\", write_UInt32LE(cnt));\n write_record(ba, \"BrtFont\", write_BrtFont({\n sz: 12,\n color: {\n theme: 1\n },\n name: \"Calibri\",\n family: 2,\n scheme: \"minor\"\n }));\n /* 1*65491BrtFont [ACFONTS] */\n\n write_record(ba, \"BrtEndFonts\");\n }\n\n function write_FILLS_bin(ba) {\n var cnt = 2;\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginFills\", write_UInt32LE(cnt));\n write_record(ba, \"BrtFill\", write_BrtFill({\n patternType: \"none\"\n }));\n write_record(ba, \"BrtFill\", write_BrtFill({\n patternType: \"gray125\"\n }));\n /* 1*65431BrtFill */\n\n write_record(ba, \"BrtEndFills\");\n }\n\n function write_BORDERS_bin(ba) {\n var cnt = 1;\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginBorders\", write_UInt32LE(cnt));\n write_record(ba, \"BrtBorder\", write_BrtBorder({}));\n /* 1*65430BrtBorder */\n\n write_record(ba, \"BrtEndBorders\");\n }\n\n function write_CELLSTYLEXFS_bin(ba) {\n var cnt = 1;\n write_record(ba, \"BrtBeginCellStyleXFs\", write_UInt32LE(cnt));\n write_record(ba, \"BrtXF\", write_BrtXF({\n numFmtId: 0,\n fontId: 0,\n fillId: 0,\n borderId: 0\n }, 0xFFFF));\n /* 1*65430(BrtXF *FRT) */\n\n write_record(ba, \"BrtEndCellStyleXFs\");\n }\n\n function write_CELLXFS_bin(ba, data) {\n write_record(ba, \"BrtBeginCellXFs\", write_UInt32LE(data.length));\n data.forEach(function (c) {\n write_record(ba, \"BrtXF\", write_BrtXF(c, 0));\n });\n /* 1*65430(BrtXF *FRT) */\n\n write_record(ba, \"BrtEndCellXFs\");\n }\n\n function write_STYLES_bin(ba) {\n var cnt = 1;\n write_record(ba, \"BrtBeginStyles\", write_UInt32LE(cnt));\n write_record(ba, \"BrtStyle\", write_BrtStyle({\n xfId: 0,\n builtinId: 0,\n name: \"Normal\"\n }));\n /* 1*65430(BrtStyle *FRT) */\n\n write_record(ba, \"BrtEndStyles\");\n }\n\n function write_DXFS_bin(ba) {\n var cnt = 0;\n write_record(ba, \"BrtBeginDXFs\", write_UInt32LE(cnt));\n /* *2147483647(BrtDXF *FRT) */\n\n write_record(ba, \"BrtEndDXFs\");\n }\n\n function write_TABLESTYLES_bin(ba) {\n var cnt = 0;\n write_record(ba, \"BrtBeginTableStyles\", write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n /* *TABLESTYLE */\n\n write_record(ba, \"BrtEndTableStyles\");\n }\n\n function write_COLORPALETTE_bin() {\n return;\n /* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n }\n /* [MS-XLSB] 2.1.7.50 Styles */\n\n\n function write_sty_bin(wb, opts) {\n var ba = buf_array();\n write_record(ba, \"BrtBeginStyleSheet\");\n write_FMTS_bin(ba, wb.SSF);\n write_FONTS_bin(ba, wb);\n write_FILLS_bin(ba, wb);\n write_BORDERS_bin(ba, wb);\n write_CELLSTYLEXFS_bin(ba, wb);\n write_CELLXFS_bin(ba, opts.cellXfs);\n write_STYLES_bin(ba, wb);\n write_DXFS_bin(ba, wb);\n write_TABLESTYLES_bin(ba, wb);\n write_COLORPALETTE_bin(ba, wb);\n /* FRTSTYLESHEET*/\n\n write_record(ba, \"BrtEndStyleSheet\");\n return ba.end();\n }\n\n RELS.THEME = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n /* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\n\n var XLSXThemeClrScheme = ['', '', '', '', '', '', '', '', '', '', '', ''];\n /* 20.1.6.2 clrScheme CT_ColorScheme */\n\n function parse_clrScheme(t, themes, opts) {\n themes.themeElements.clrScheme = [];\n var color = {};\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0]) {\n /* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n case '':\n break;\n\n /* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n if (y[0].charAt(1) === '/') {\n themes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n color = {};\n } else {\n color.name = y[0].slice(3, y[0].length - 1);\n }\n\n break;\n\n default:\n if (opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n }\n });\n }\n /* 20.1.4.1.18 fontScheme CT_FontScheme */\n\n\n function parse_fontScheme() {}\n /* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\n\n\n function parse_fmtScheme() {}\n\n var clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\n var fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\n var fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n /* 20.1.6.10 themeElements CT_BaseStyles */\n\n function parse_themeElements(data, themes, opts) {\n themes.themeElements = {};\n var t;\n [\n /* clrScheme CT_ColorScheme */\n ['clrScheme', clrsregex, parse_clrScheme],\n /* fontScheme CT_FontScheme */\n ['fontScheme', fntsregex, parse_fontScheme],\n /* fmtScheme CT_StyleMatrix */\n ['fmtScheme', fmtsregex, parse_fmtScheme]].forEach(function (m) {\n if (!(t = data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n m[2](t, themes, opts);\n });\n }\n\n var themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n /* 14.2.7 Theme Part */\n\n function parse_theme_xml(data, opts) {\n /* 20.1.6.9 theme CT_OfficeStyleSheet */\n if (!data || data.length === 0) return parse_theme_xml(write_theme());\n var t;\n var themes = {};\n /* themeElements CT_BaseStyles */\n\n if (!(t = data.match(themeltregex))) throw new Error('themeElements not found in theme');\n parse_themeElements(t[0], themes, opts);\n themes.raw = data;\n return themes;\n }\n\n function write_theme(Themes, opts) {\n if (opts && opts.themeXLSX) return opts.themeXLSX;\n if (Themes && typeof Themes.raw == \"string\") return Themes.raw;\n var o = [XML_HEADER];\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n return o.join(\"\");\n }\n /* [MS-XLS] 2.4.326 TODO: payload is a zip file */\n\n\n function parse_Theme(blob, length, opts) {\n var end = blob.l + length;\n var dwThemeVersion = blob.read_shift(4);\n if (dwThemeVersion === 124226) return;\n\n if (!opts.cellStyles) {\n blob.l = end;\n return;\n }\n\n var data = blob.slice(blob.l);\n blob.l = end;\n var zip;\n\n try {\n zip = zip_read(data, {\n type: \"array\"\n });\n } catch (e) {\n return;\n }\n\n var themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n if (!themeXML) return;\n return parse_theme_xml(themeXML, opts);\n }\n /* 2.5.49 */\n\n\n function parse_ColorTheme(blob) {\n return blob.read_shift(4);\n }\n /* 2.5.155 */\n\n\n function parse_FullColorExt(blob) {\n var o = {};\n o.xclrType = blob.read_shift(2);\n o.nTintShade = blob.read_shift(2);\n\n switch (o.xclrType) {\n case 0:\n blob.l += 4;\n break;\n\n case 1:\n o.xclrValue = parse_IcvXF(blob, 4);\n break;\n\n case 2:\n o.xclrValue = parse_LongRGBA(blob, 4);\n break;\n\n case 3:\n o.xclrValue = parse_ColorTheme(blob, 4);\n break;\n\n case 4:\n blob.l += 4;\n break;\n }\n\n blob.l += 8;\n return o;\n }\n /* 2.5.164 TODO: read 7 bits*/\n\n\n function parse_IcvXF(blob, length) {\n return parsenoop(blob, length);\n }\n /* 2.5.280 */\n\n\n function parse_XFExtGradient(blob, length) {\n return parsenoop(blob, length);\n }\n /* [MS-XLS] 2.5.108 */\n\n\n function parse_ExtProp(blob) {\n var extType = blob.read_shift(2);\n var cb = blob.read_shift(2) - 4;\n var o = [extType];\n\n switch (extType) {\n case 0x04:\n case 0x05:\n case 0x07:\n case 0x08:\n case 0x09:\n case 0x0A:\n case 0x0B:\n case 0x0D:\n o[1] = parse_FullColorExt(blob, cb);\n break;\n\n case 0x06:\n o[1] = parse_XFExtGradient(blob, cb);\n break;\n\n case 0x0E:\n case 0x0F:\n o[1] = blob.read_shift(cb === 1 ? 1 : 2);\n break;\n\n default:\n throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n }\n\n return o;\n }\n /* 2.4.355 */\n\n\n function parse_XFExt(blob, length) {\n var end = blob.l + length;\n blob.l += 2;\n var ixfe = blob.read_shift(2);\n blob.l += 2;\n var cexts = blob.read_shift(2);\n var ext = [];\n\n while (cexts-- > 0) {\n ext.push(parse_ExtProp(blob, end - blob.l));\n }\n\n return {\n ixfe: ixfe,\n ext: ext\n };\n }\n /* xf is an XF, see parse_XFExt for xfext */\n\n\n function update_xfext(xf, xfext) {\n xfext.forEach(function (xfe) {\n switch (xfe[0]) {\n /* 2.5.108 extPropData */\n case 0x04:\n break;\n\n /* foreground color */\n\n case 0x05:\n break;\n\n /* background color */\n\n case 0x06:\n break;\n\n /* gradient fill */\n\n case 0x07:\n break;\n\n /* top cell border color */\n\n case 0x08:\n break;\n\n /* bottom cell border color */\n\n case 0x09:\n break;\n\n /* left cell border color */\n\n case 0x0a:\n break;\n\n /* right cell border color */\n\n case 0x0b:\n break;\n\n /* diagonal cell border color */\n\n case 0x0d:\n /* text color */\n break;\n\n case 0x0e:\n break;\n\n /* font scheme */\n\n case 0x0f:\n break;\n\n /* indentation level */\n }\n });\n }\n /* 18.6 Calculation Chain */\n\n\n function parse_cc_xml(data) {\n var d = [];\n if (!data) return d;\n var i = 1;\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0]) {\n case '':\n case '':\n break;\n\n /* 18.6.1 c CT_CalcCell 1 */\n\n case ' 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n });\n return out;\n } //function write_cc_bin(data, opts) { }\n\n /* 18.14 Supplementary Workbook Data */\n\n\n function parse_xlink_xml() {//var opts = _opts || {};\n //if(opts.WTF) throw \"XLSX External Link\";\n }\n /* [MS-XLSB] 2.1.7.25 External Link */\n\n\n function parse_xlink_bin(data, rel, name, _opts) {\n if (!data) return data;\n var opts = _opts || {};\n var pass = false,\n end = false;\n recordhopper(data, function xlink_parse(val, R_n, RT) {\n if (end) return;\n\n switch (RT) {\n case 0x0167:\n /* 'BrtSupTabs' */\n\n case 0x016B:\n /* 'BrtExternTableStart' */\n\n case 0x016C:\n /* 'BrtExternTableEnd' */\n\n case 0x016E:\n /* 'BrtExternRowHdr' */\n\n case 0x016F:\n /* 'BrtExternCellBlank' */\n\n case 0x0170:\n /* 'BrtExternCellReal' */\n\n case 0x0171:\n /* 'BrtExternCellBool' */\n\n case 0x0172:\n /* 'BrtExternCellError' */\n\n case 0x0173:\n /* 'BrtExternCellString' */\n\n case 0x01D8:\n /* 'BrtExternValueMeta' */\n\n case 0x0241:\n /* 'BrtSupNameStart' */\n\n case 0x0242:\n /* 'BrtSupNameValueStart' */\n\n case 0x0243:\n /* 'BrtSupNameValueEnd' */\n\n case 0x0244:\n /* 'BrtSupNameNum' */\n\n case 0x0245:\n /* 'BrtSupNameErr' */\n\n case 0x0246:\n /* 'BrtSupNameSt' */\n\n case 0x0247:\n /* 'BrtSupNameNil' */\n\n case 0x0248:\n /* 'BrtSupNameBool' */\n\n case 0x0249:\n /* 'BrtSupNameFmla' */\n\n case 0x024A:\n /* 'BrtSupNameBits' */\n\n case 0x024B:\n /* 'BrtSupNameEnd' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT.toString(16) + \" \" + R_n);\n\n }\n }, opts);\n }\n /* 20.5 DrawingML - SpreadsheetML Drawing */\n\n\n RELS.IMG = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\n RELS.DRAW = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\";\n /* 20.5.2.35 wsDr CT_Drawing */\n\n function parse_drawing(data, rels) {\n if (!data) return \"??\";\n /*\n Chartsheet Drawing:\n - 20.5.2.35 wsDr CT_Drawing\n - 20.5.2.1 absoluteAnchor CT_AbsoluteAnchor\n - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n - 20.1.2.2.16 graphic CT_GraphicalObject\n - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n - chart reference\n the actual type is based on the URI of the graphicData\n \tTODO: handle embedded charts and other types of graphics\n */\n\n var id = (data.match(/]*r:id=\"([^\"]*)\"/) || [\"\", \"\"])[1];\n return rels['!id'][id].Target;\n }\n /* L.5.5.2 SpreadsheetML Comments + VML Schema */\n\n\n var _shapeid = 1024;\n\n function write_comments_vml(rId, comments) {\n var csize = [21600, 21600];\n /* L.5.2.1.2 Path Attribute */\n\n var bbox = [\"m0,0l0\", csize[1], csize[0], csize[1], csize[0], \"0xe\"].join(\",\");\n var o = [writextag(\"xml\", null, {\n 'xmlns:v': XLMLNS.v,\n 'xmlns:o': XLMLNS.o,\n 'xmlns:x': XLMLNS.x,\n 'xmlns:mv': XLMLNS.mv\n }).replace(/\\/>/, \">\"), writextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {\n 'v:ext': \"edit\",\n 'data': rId\n }), {\n 'v:ext': \"edit\"\n }), writextag(\"v:shapetype\", [writextag(\"v:stroke\", null, {\n joinstyle: \"miter\"\n }), writextag(\"v:path\", null, {\n gradientshapeok: \"t\",\n 'o:connecttype': \"rect\"\n })].join(\"\"), {\n id: \"_x0000_t202\",\n 'o:spt': 202,\n coordsize: csize.join(\",\"),\n path: bbox\n })];\n\n while (_shapeid < rId * 1000) {\n _shapeid += 1000;\n }\n\n comments.forEach(function (x) {\n var c = decode_cell(x[0]);\n var fillopts = {\n 'color2': \"#BEFF82\",\n 'type': \"gradient\"\n };\n if (fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n var fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {\n type: \"gradientUnscaled\",\n 'v:ext': \"view\"\n }) : null;\n var fillxml = writextag('v:fill', fillparm, fillopts);\n var shadata = {\n on: \"t\",\n 'obscured': \"t\"\n };\n ++_shapeid;\n o = o.concat(['', fillxml, writextag(\"v:shadow\", null, shadata), writextag(\"v:path\", null, {\n 'o:connecttype': \"none\"\n }), '
', '', '', '',\n /* Part 4 19.4.2.3 Anchor (Anchor) */\n writetag('x:Anchor', [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(\",\")), writetag('x:AutoFill', \"False\"), writetag('x:Row', String(c.r)), writetag('x:Column', String(c.c)), x[1].hidden ? '' : '', '', '']);\n });\n o.push('');\n return o.join(\"\");\n }\n\n RELS.CMNT = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n\n function sheet_insert_comments(sheet, comments) {\n var dense = Array.isArray(sheet);\n var cell;\n comments.forEach(function (comment) {\n var r = decode_cell(comment.ref);\n\n if (dense) {\n if (!sheet[r.r]) sheet[r.r] = [];\n cell = sheet[r.r][r.c];\n } else cell = sheet[comment.ref];\n\n if (!cell) {\n cell = {\n t: \"z\"\n };\n if (dense) sheet[r.r][r.c] = cell;else sheet[comment.ref] = cell;\n var range = safe_decode_range(sheet[\"!ref\"] || \"BDWGO1000001:A1\");\n if (range.s.r > r.r) range.s.r = r.r;\n if (range.e.r < r.r) range.e.r = r.r;\n if (range.s.c > r.c) range.s.c = r.c;\n if (range.e.c < r.c) range.e.c = r.c;\n var encoded = encode_range(range);\n if (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n }\n\n if (!cell.c) cell.c = [];\n var o = {\n a: comment.author,\n t: comment.t,\n r: comment.r\n };\n if (comment.h) o.h = comment.h;\n cell.c.push(o);\n });\n }\n /* 18.7 Comments */\n\n\n function parse_comments_xml(data, opts) {\n /* 18.7.6 CT_Comments */\n if (data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n var authors = [];\n var commentList = [];\n var authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n if (authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function (x) {\n if (x === \"\" || x.trim() === \"\") return;\n var a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n if (a) authors.push(a[1]);\n });\n var cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n if (cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function (x) {\n if (x === \"\" || x.trim() === \"\") return;\n var cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n if (!cm) return;\n var y = parsexmltag(cm[0]);\n var comment = {\n author: y.authorId && authors[y.authorId] || \"sheetjsghost\",\n ref: y.ref,\n guid: y.guid\n };\n var cell = decode_cell(y.ref);\n if (opts.sheetRows && opts.sheetRows <= cell.r) return;\n var textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {\n r: \"\",\n t: \"\",\n h: \"\"\n };\n comment.r = rt.r;\n if (rt.r == \"\") rt.t = rt.h = \"\";\n comment.t = (rt.t || \"\").replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n if (opts.cellHTML) comment.h = rt.h;\n commentList.push(comment);\n });\n return commentList;\n }\n\n var CMNT_XML_ROOT = writextag('comments', null, {\n 'xmlns': XMLNS.main[0]\n });\n\n function write_comments_xml(data) {\n var o = [XML_HEADER, CMNT_XML_ROOT];\n var iauthor = [];\n o.push(\"\");\n data.forEach(function (x) {\n x[1].forEach(function (w) {\n var a = escapexml(w.a);\n if (iauthor.indexOf(a) > -1) return;\n iauthor.push(a);\n o.push(\"\" + a + \"\");\n });\n });\n o.push(\"\");\n o.push(\"\");\n data.forEach(function (d) {\n d[1].forEach(function (c) {\n /* 18.7.3 CT_Comment */\n o.push('');\n o.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n o.push('');\n });\n });\n o.push(\"\");\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.28 BrtBeginComment */\n\n\n function parse_BrtBeginComment(data) {\n var out = {};\n out.iauthor = data.read_shift(4);\n var rfx = parse_UncheckedRfX(data, 16);\n out.rfx = rfx.s;\n out.ref = encode_cell(rfx.s);\n data.l += 16;\n /*var guid = parse_GUID(data); */\n\n return out;\n }\n\n function write_BrtBeginComment(data, o) {\n if (o == null) o = new_buf(36);\n o.write_shift(4, data[1].iauthor);\n write_UncheckedRfX(data[0], o);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n }\n /* [MS-XLSB] 2.4.327 BrtCommentAuthor */\n\n\n var parse_BrtCommentAuthor = parse_XLWideString;\n\n function write_BrtCommentAuthor(data) {\n return write_XLWideString(data.slice(0, 54));\n }\n /* [MS-XLSB] 2.1.7.8 Comments */\n\n\n function parse_comments_bin(data, opts) {\n var out = [];\n var authors = [];\n var c = {};\n var pass = false;\n recordhopper(data, function hopper_cmnt(val, R_n, RT) {\n switch (RT) {\n case 0x0278:\n /* 'BrtCommentAuthor' */\n authors.push(val);\n break;\n\n case 0x027B:\n /* 'BrtBeginComment' */\n c = val;\n break;\n\n case 0x027D:\n /* 'BrtCommentText' */\n c.t = val.t;\n c.h = val.h;\n c.r = val.r;\n break;\n\n case 0x027C:\n /* 'BrtEndComment' */\n c.author = authors[c.iauthor];\n delete c.iauthor;\n if (opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n if (!c.t) c.t = \"\";\n delete c.rfx;\n out.push(c);\n break;\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n });\n return out;\n }\n\n function write_comments_bin(data) {\n var ba = buf_array();\n var iauthor = [];\n write_record(ba, \"BrtBeginComments\");\n write_record(ba, \"BrtBeginCommentAuthors\");\n data.forEach(function (comment) {\n comment[1].forEach(function (c) {\n if (iauthor.indexOf(c.a) > -1) return;\n iauthor.push(c.a.slice(0, 54));\n write_record(ba, \"BrtCommentAuthor\", write_BrtCommentAuthor(c.a));\n });\n });\n write_record(ba, \"BrtEndCommentAuthors\");\n write_record(ba, \"BrtBeginCommentList\");\n data.forEach(function (comment) {\n comment[1].forEach(function (c) {\n c.iauthor = iauthor.indexOf(c.a);\n var range = {\n s: decode_cell(comment[0]),\n e: decode_cell(comment[0])\n };\n write_record(ba, \"BrtBeginComment\", write_BrtBeginComment([range, c]));\n if (c.t && c.t.length > 0) write_record(ba, \"BrtCommentText\", write_BrtCommentText(c));\n write_record(ba, \"BrtEndComment\");\n delete c.iauthor;\n });\n });\n write_record(ba, \"BrtEndCommentList\");\n write_record(ba, \"BrtEndComments\");\n return ba.end();\n }\n\n var CT_VBA = \"application/vnd.ms-office.vbaProject\";\n\n function make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({\n root: \"R\"\n });\n cfb.FullPaths.forEach(function (p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) return;\n var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n });\n return CFB.write(newcfb);\n }\n\n function fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function (p, i) {\n if (i == 0) return;\n var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n }\n\n var VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n RELS.DS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\";\n RELS.MS = \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\";\n /* macro and dialog sheet stubs */\n\n function parse_ds_bin() {\n return {\n '!type': 'dialog'\n };\n }\n\n function parse_ds_xml() {\n return {\n '!type': 'dialog'\n };\n }\n\n function parse_ms_bin() {\n return {\n '!type': 'macro'\n };\n }\n\n function parse_ms_xml() {\n return {\n '!type': 'macro'\n };\n }\n /* TODO: it will be useful to parse the function str */\n\n\n var rc_to_a1 = function () {\n var rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n var rcbase = {\n r: 0,\n c: 0\n };\n\n function rcfunc($$, $1, $2, $3) {\n var cRel = false,\n rRel = false;\n if ($2.length == 0) rRel = true;else if ($2.charAt(0) == \"[\") {\n rRel = true;\n $2 = $2.slice(1, -1);\n }\n if ($3.length == 0) cRel = true;else if ($3.charAt(0) == \"[\") {\n cRel = true;\n $3 = $3.slice(1, -1);\n }\n var R = $2.length > 0 ? parseInt($2, 10) | 0 : 0,\n C = $3.length > 0 ? parseInt($3, 10) | 0 : 0;\n if (cRel) C += rcbase.c;else --C;\n if (rRel) R += rcbase.r;else --R;\n return $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n }\n\n return function rc_to_a1(fstr, base) {\n rcbase = base;\n return fstr.replace(rcregex, rcfunc);\n };\n }();\n\n var crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\n\n var a1_to_rc = function () {\n return function a1_to_rc(fstr, base) {\n return fstr.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n var c = decode_col($3) - ($2 ? 0 : base.c);\n var r = decode_row($5) - ($4 ? 0 : base.r);\n var R = r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : r + 1;\n var C = c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : c + 1;\n return $1 + \"R\" + R + \"C\" + C;\n });\n };\n }();\n /* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\n\n\n function shift_formula_str(f, delta) {\n return f.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n return $1 + ($2 == \"$\" ? $2 + $3 : encode_col(decode_col($3) + delta.c)) + ($4 == \"$\" ? $4 + $5 : encode_row(decode_row($5) + delta.r));\n });\n }\n\n function shift_formula_xlsx(f, range, cell) {\n var r = decode_range(range),\n s = r.s,\n c = decode_cell(cell);\n var delta = {\n r: c.r - s.r,\n c: c.c - s.c\n };\n return shift_formula_str(f, delta);\n }\n /* TODO: parse formula */\n\n\n function fuzzyfmla(f) {\n if (f.length == 1) return false;\n return true;\n }\n\n function _xlfn(f) {\n return f.replace(/_xlfn\\./g, \"\");\n }\n\n function parseread1(blob) {\n blob.l += 1;\n return;\n }\n /* [MS-XLS] 2.5.51 */\n\n\n function parse_ColRelU(blob, length) {\n var c = blob.read_shift(length == 1 ? 1 : 2);\n return [c & 0x3FFF, c >> 14 & 1, c >> 15 & 1];\n }\n /* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\n\n\n function parse_RgceArea(blob, length, opts) {\n var w = 2;\n\n if (opts) {\n if (opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);else if (opts.biff == 12) w = 4;\n }\n\n var r = blob.read_shift(w),\n R = blob.read_shift(w);\n var c = parse_ColRelU(blob, 2);\n var C = parse_ColRelU(blob, 2);\n return {\n s: {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n },\n e: {\n r: R,\n c: C[0],\n cRel: C[1],\n rRel: C[2]\n }\n };\n }\n /* BIFF 2-5 encodes flags in the row field */\n\n\n function parse_RgceArea_BIFF2(blob) {\n var r = parse_ColRelU(blob, 2),\n R = parse_ColRelU(blob, 2);\n var c = blob.read_shift(1);\n var C = blob.read_shift(1);\n return {\n s: {\n r: r[0],\n c: c,\n cRel: r[1],\n rRel: r[2]\n },\n e: {\n r: R[0],\n c: C,\n cRel: R[1],\n rRel: R[2]\n }\n };\n }\n /* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\n\n\n function parse_RgceAreaRel(blob, length, opts) {\n if (opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n var r = blob.read_shift(opts.biff == 12 ? 4 : 2),\n R = blob.read_shift(opts.biff == 12 ? 4 : 2);\n var c = parse_ColRelU(blob, 2);\n var C = parse_ColRelU(blob, 2);\n return {\n s: {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n },\n e: {\n r: R,\n c: C[0],\n cRel: C[1],\n rRel: C[2]\n }\n };\n }\n /* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\n\n\n function parse_RgceLoc(blob, length, opts) {\n if (opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n var r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n var c = parse_ColRelU(blob, 2);\n return {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n };\n }\n\n function parse_RgceLoc_BIFF2(blob) {\n var r = parse_ColRelU(blob, 2);\n var c = blob.read_shift(1);\n return {\n r: r[0],\n c: c,\n cRel: r[1],\n rRel: r[2]\n };\n }\n /* [MS-XLS] 2.5.198.107, 2.5.47 */\n\n\n function parse_RgceElfLoc(blob) {\n var r = blob.read_shift(2);\n var c = blob.read_shift(2);\n return {\n r: r,\n c: c & 0xFF,\n fQuoted: !!(c & 0x4000),\n cRel: c >> 15,\n rRel: c >> 15\n };\n }\n /* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\n\n\n function parse_RgceLocRel(blob, length, opts) {\n var biff = opts && opts.biff ? opts.biff : 8;\n if (biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n var r = blob.read_shift(biff >= 12 ? 4 : 2);\n var cl = blob.read_shift(2);\n var cRel = (cl & 0x4000) >> 14,\n rRel = (cl & 0x8000) >> 15;\n cl &= 0x3FFF;\n if (rRel == 1) while (r > 0x7FFFF) {\n r -= 0x100000;\n }\n if (cRel == 1) while (cl > 0x1FFF) {\n cl = cl - 0x4000;\n }\n return {\n r: r,\n c: cl,\n cRel: cRel,\n rRel: rRel\n };\n }\n\n function parse_RgceLocRel_BIFF2(blob) {\n var rl = blob.read_shift(2);\n var c = blob.read_shift(1);\n var rRel = (rl & 0x8000) >> 15,\n cRel = (rl & 0x4000) >> 14;\n rl &= 0x3FFF;\n if (rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n if (cRel == 1 && c >= 0x80) c = c - 0x100;\n return {\n r: rl,\n c: c,\n cRel: cRel,\n rRel: rRel\n };\n }\n /* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\n\n\n function parse_PtgArea(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n return [type, area];\n }\n /* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\n\n\n function parse_PtgArea3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2, 'i');\n var w = 8;\n if (opts) switch (opts.biff) {\n case 5:\n blob.l += 12;\n w = 6;\n break;\n\n case 12:\n w = 12;\n break;\n }\n var area = parse_RgceArea(blob, w, opts);\n return [type, ixti, area];\n }\n /* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\n\n\n function parse_PtgAreaErr(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n blob.l += opts && opts.biff > 8 ? 12 : opts.biff < 8 ? 6 : 8;\n return [type];\n }\n /* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\n\n\n function parse_PtgAreaErr3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2);\n var w = 8;\n if (opts) switch (opts.biff) {\n case 5:\n blob.l += 12;\n w = 6;\n break;\n\n case 12:\n w = 12;\n break;\n }\n blob.l += w;\n return [type, ixti];\n }\n /* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\n\n\n function parse_PtgAreaN(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var area = parse_RgceAreaRel(blob, length - 1, opts);\n return [type, area];\n }\n /* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\n\n\n function parse_PtgArray(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n blob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n return [type];\n }\n /* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\n\n\n function parse_PtgAttrBaxcel(blob) {\n var bitSemi = blob[blob.l + 1] & 0x01;\n /* 1 = volatile */\n\n var bitBaxcel = 1;\n blob.l += 4;\n return [bitSemi, bitBaxcel];\n }\n /* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\n\n\n function parse_PtgAttrChoose(blob, length, opts) {\n blob.l += 2;\n var offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n var o = [];\n /* offset is 1 less than the number of elements */\n\n for (var i = 0; i <= offset; ++i) {\n o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n }\n\n return o;\n }\n /* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\n\n\n function parse_PtgAttrGoto(blob, length, opts) {\n var bitGoto = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n }\n /* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\n\n\n function parse_PtgAttrIf(blob, length, opts) {\n var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n }\n /* [MS-XLSB] 2.5.97.28 */\n\n\n function parse_PtgAttrIfError(blob) {\n var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitIf, blob.read_shift(2)];\n }\n /* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\n\n\n function parse_PtgAttrSemi(blob, length, opts) {\n var bitSemi = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n return [bitSemi];\n }\n /* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\n\n\n function parse_PtgAttrSpaceType(blob) {\n var type = blob.read_shift(1),\n cch = blob.read_shift(1);\n return [type, cch];\n }\n /* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\n\n\n function parse_PtgAttrSpace(blob) {\n blob.read_shift(2);\n return parse_PtgAttrSpaceType(blob, 2);\n }\n /* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\n\n\n function parse_PtgAttrSpaceSemi(blob) {\n blob.read_shift(2);\n return parse_PtgAttrSpaceType(blob, 2);\n }\n /* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\n\n\n function parse_PtgRef(blob, length, opts) {\n //var ptg = blob[blob.l] & 0x1F;\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var loc = parse_RgceLoc(blob, 0, opts);\n return [type, loc];\n }\n /* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\n\n\n function parse_PtgRefN(blob, length, opts) {\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var loc = parse_RgceLocRel(blob, 0, opts);\n return [type, loc];\n }\n /* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\n\n\n function parse_PtgRef3d(blob, length, opts) {\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var ixti = blob.read_shift(2); // XtiIndex\n\n if (opts && opts.biff == 5) blob.l += 12;\n var loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\n return [type, ixti, loc];\n }\n /* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\n\n\n function parse_PtgFunc(blob, length, opts) {\n //var ptg = blob[blob.l] & 0x1F;\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n return [FtabArgc[iftab], Ftab[iftab], type];\n }\n /* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\n\n\n function parse_PtgFuncVar(blob, length, opts) {\n var type = blob[blob.l++];\n var cparams = blob.read_shift(1),\n tab = opts && opts.biff <= 3 ? [type == 0x58 ? -1 : 0, blob.read_shift(1)] : parsetab(blob);\n return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n }\n\n function parsetab(blob) {\n return [blob[blob.l + 1] >> 7, blob.read_shift(2) & 0x7FFF];\n }\n /* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\n\n\n function parse_PtgAttrSum(blob, length, opts) {\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n return;\n }\n /* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\n\n\n function parse_PtgExp(blob, length, opts) {\n blob.l++;\n if (opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n var row = blob.read_shift(2);\n var col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [row, col];\n }\n /* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\n\n\n function parse_PtgErr(blob) {\n blob.l++;\n return BErr[blob.read_shift(1)];\n }\n /* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\n\n\n function parse_PtgInt(blob) {\n blob.l++;\n return blob.read_shift(2);\n }\n /* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\n\n\n function parse_PtgBool(blob) {\n blob.l++;\n return blob.read_shift(1) !== 0;\n }\n /* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\n\n\n function parse_PtgNum(blob) {\n blob.l++;\n return parse_Xnum(blob, 8);\n }\n /* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\n\n\n function parse_PtgStr(blob, length, opts) {\n blob.l++;\n return parse_ShortXLUnicodeString(blob, length - 1, opts);\n }\n /* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n\n /* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\n\n\n function parse_SerAr(blob, biff) {\n var val = [blob.read_shift(1)];\n if (biff == 12) switch (val[0]) {\n case 0x02:\n val[0] = 0x04;\n break;\n\n /* SerBool */\n\n case 0x04:\n val[0] = 0x10;\n break;\n\n /* SerErr */\n\n case 0x00:\n val[0] = 0x01;\n break;\n\n /* SerNum */\n\n case 0x01:\n val[0] = 0x02;\n break;\n\n /* SerStr */\n }\n\n switch (val[0]) {\n case 0x04:\n /* SerBool -- boolean */\n val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n if (biff != 12) blob.l += 7;\n break;\n\n case 0x25:\n /* appears to be an alias */\n\n case 0x10:\n /* SerErr -- error */\n val[1] = BErr[blob[blob.l]];\n blob.l += biff == 12 ? 4 : 8;\n break;\n\n case 0x00:\n /* SerNil -- honestly, I'm not sure how to reproduce this */\n blob.l += 8;\n break;\n\n case 0x01:\n /* SerNum -- Xnum */\n val[1] = parse_Xnum(blob, 8);\n break;\n\n case 0x02:\n /* SerStr -- XLUnicodeString (<256 chars) */\n val[1] = parse_XLUnicodeString2(blob, 0, {\n biff: biff > 0 && biff < 8 ? 2 : biff\n });\n break;\n\n default:\n throw new Error(\"Bad SerAr: \" + val[0]);\n\n /* Unreachable */\n }\n\n return val;\n }\n /* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\n\n\n function parse_PtgExtraMem(blob, cce, opts) {\n var count = blob.read_shift(opts.biff == 12 ? 4 : 2);\n var out = [];\n\n for (var i = 0; i != count; ++i) {\n out.push((opts.biff == 12 ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n }\n\n return out;\n }\n /* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\n\n\n function parse_PtgExtraArray(blob, length, opts) {\n var rows = 0,\n cols = 0;\n\n if (opts.biff == 12) {\n rows = blob.read_shift(4); // DRw\n\n cols = blob.read_shift(4); // DCol\n } else {\n cols = 1 + blob.read_shift(1); //DColByteU\n\n rows = 1 + blob.read_shift(2); //DRw\n }\n\n if (opts.biff >= 2 && opts.biff < 8) {\n --rows;\n if (--cols == 0) cols = 0x100;\n } // $FlowIgnore\n\n\n for (var i = 0, o = []; i != rows && (o[i] = []); ++i) {\n for (var j = 0; j != cols; ++j) {\n o[i][j] = parse_SerAr(blob, opts.biff);\n }\n }\n\n return o;\n }\n /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\n\n\n function parse_PtgName(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var w = !opts || opts.biff >= 8 ? 4 : 2;\n var nameindex = blob.read_shift(w);\n\n switch (opts.biff) {\n case 2:\n blob.l += 5;\n break;\n\n case 3:\n case 4:\n blob.l += 8;\n break;\n\n case 5:\n blob.l += 12;\n break;\n }\n\n return [type, 0, nameindex];\n }\n /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\n\n\n function parse_PtgNameX(blob, length, opts) {\n if (opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var ixti = blob.read_shift(2); // XtiIndex\n\n var nameindex = blob.read_shift(4);\n return [type, ixti, nameindex];\n }\n\n function parse_PtgNameX_BIFF5(blob) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var ixti = blob.read_shift(2, 'i'); // XtiIndex\n\n blob.l += 8;\n var nameindex = blob.read_shift(2);\n blob.l += 12;\n return [type, ixti, nameindex];\n }\n /* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\n\n\n function parse_PtgMemArea(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [type, cce];\n }\n /* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\n\n\n function parse_PtgMemFunc(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [type, cce];\n }\n /* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\n\n\n function parse_PtgRefErr(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n blob.l += 4;\n if (opts.biff < 8) blob.l--;\n if (opts.biff == 12) blob.l += 2;\n return [type];\n }\n /* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\n\n\n function parse_PtgRefErr3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2);\n var w = 4;\n if (opts) switch (opts.biff) {\n case 5:\n w = 15;\n break;\n\n case 12:\n w = 6;\n break;\n }\n blob.l += w;\n return [type, ixti];\n }\n /* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\n\n\n var parse_PtgMemErr = parsenoop;\n /* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\n\n var parse_PtgMemNoMem = parsenoop;\n /* [MS-XLS] 2.5.198.92 */\n\n var parse_PtgTbl = parsenoop;\n\n function parse_PtgElfLoc(blob, length, opts) {\n blob.l += 2;\n return [parse_RgceElfLoc(blob, 4, opts)];\n }\n\n function parse_PtgElfNoop(blob) {\n blob.l += 6;\n return [];\n }\n /* [MS-XLS] 2.5.198.46 */\n\n\n var parse_PtgElfCol = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.47 */\n\n var parse_PtgElfColS = parse_PtgElfNoop;\n /* [MS-XLS] 2.5.198.48 */\n\n var parse_PtgElfColSV = parse_PtgElfNoop;\n /* [MS-XLS] 2.5.198.49 */\n\n var parse_PtgElfColV = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.50 */\n\n function parse_PtgElfLel(blob) {\n blob.l += 2;\n return [parseuint16(blob), blob.read_shift(2) & 0x01];\n }\n /* [MS-XLS] 2.5.198.51 */\n\n\n var parse_PtgElfRadical = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.52 */\n\n var parse_PtgElfRadicalLel = parse_PtgElfLel;\n /* [MS-XLS] 2.5.198.53 */\n\n var parse_PtgElfRadicalS = parse_PtgElfNoop;\n /* [MS-XLS] 2.5.198.54 */\n\n var parse_PtgElfRw = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.55 */\n\n var parse_PtgElfRwV = parse_PtgElfLoc;\n /* [MS-XLSB] 2.5.97.52 TODO */\n\n var PtgListRT = [\"Data\", \"All\", \"Headers\", \"??\", \"?Data2\", \"??\", \"?DataHeaders\", \"??\", \"Totals\", \"??\", \"??\", \"??\", \"?DataTotals\", \"??\", \"??\", \"??\", \"?Current\"];\n\n function parse_PtgList(blob) {\n blob.l += 2;\n var ixti = blob.read_shift(2);\n var flags = blob.read_shift(2);\n var idx = blob.read_shift(4);\n var c = blob.read_shift(2);\n var C = blob.read_shift(2);\n var rt = PtgListRT[flags >> 2 & 0x1F];\n return {\n ixti: ixti,\n coltype: flags & 0x3,\n rt: rt,\n idx: idx,\n c: c,\n C: C\n };\n }\n /* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\n\n\n function parse_PtgSxName(blob) {\n blob.l += 2;\n return [blob.read_shift(4)];\n }\n /* [XLS] old spec */\n\n\n function parse_PtgSheet(blob, length, opts) {\n blob.l += 5;\n blob.l += 2;\n blob.l += opts.biff == 2 ? 1 : 4;\n return [\"PTGSHEET\"];\n }\n\n function parse_PtgEndSheet(blob, length, opts) {\n blob.l += opts.biff == 2 ? 4 : 5;\n return [\"PTGENDSHEET\"];\n }\n\n function parse_PtgMemAreaN(blob) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(2);\n return [type, cce];\n }\n\n function parse_PtgMemNoMemN(blob) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(2);\n return [type, cce];\n }\n\n function parse_PtgAttrNoop(blob) {\n blob.l += 4;\n return [0, 0];\n }\n /* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\n\n\n var PtgTypes = {\n 0x01: {\n n: 'PtgExp',\n f: parse_PtgExp\n },\n 0x02: {\n n: 'PtgTbl',\n f: parse_PtgTbl\n },\n 0x03: {\n n: 'PtgAdd',\n f: parseread1\n },\n 0x04: {\n n: 'PtgSub',\n f: parseread1\n },\n 0x05: {\n n: 'PtgMul',\n f: parseread1\n },\n 0x06: {\n n: 'PtgDiv',\n f: parseread1\n },\n 0x07: {\n n: 'PtgPower',\n f: parseread1\n },\n 0x08: {\n n: 'PtgConcat',\n f: parseread1\n },\n 0x09: {\n n: 'PtgLt',\n f: parseread1\n },\n 0x0A: {\n n: 'PtgLe',\n f: parseread1\n },\n 0x0B: {\n n: 'PtgEq',\n f: parseread1\n },\n 0x0C: {\n n: 'PtgGe',\n f: parseread1\n },\n 0x0D: {\n n: 'PtgGt',\n f: parseread1\n },\n 0x0E: {\n n: 'PtgNe',\n f: parseread1\n },\n 0x0F: {\n n: 'PtgIsect',\n f: parseread1\n },\n 0x10: {\n n: 'PtgUnion',\n f: parseread1\n },\n 0x11: {\n n: 'PtgRange',\n f: parseread1\n },\n 0x12: {\n n: 'PtgUplus',\n f: parseread1\n },\n 0x13: {\n n: 'PtgUminus',\n f: parseread1\n },\n 0x14: {\n n: 'PtgPercent',\n f: parseread1\n },\n 0x15: {\n n: 'PtgParen',\n f: parseread1\n },\n 0x16: {\n n: 'PtgMissArg',\n f: parseread1\n },\n 0x17: {\n n: 'PtgStr',\n f: parse_PtgStr\n },\n 0x1A: {\n n: 'PtgSheet',\n f: parse_PtgSheet\n },\n 0x1B: {\n n: 'PtgEndSheet',\n f: parse_PtgEndSheet\n },\n 0x1C: {\n n: 'PtgErr',\n f: parse_PtgErr\n },\n 0x1D: {\n n: 'PtgBool',\n f: parse_PtgBool\n },\n 0x1E: {\n n: 'PtgInt',\n f: parse_PtgInt\n },\n 0x1F: {\n n: 'PtgNum',\n f: parse_PtgNum\n },\n 0x20: {\n n: 'PtgArray',\n f: parse_PtgArray\n },\n 0x21: {\n n: 'PtgFunc',\n f: parse_PtgFunc\n },\n 0x22: {\n n: 'PtgFuncVar',\n f: parse_PtgFuncVar\n },\n 0x23: {\n n: 'PtgName',\n f: parse_PtgName\n },\n 0x24: {\n n: 'PtgRef',\n f: parse_PtgRef\n },\n 0x25: {\n n: 'PtgArea',\n f: parse_PtgArea\n },\n 0x26: {\n n: 'PtgMemArea',\n f: parse_PtgMemArea\n },\n 0x27: {\n n: 'PtgMemErr',\n f: parse_PtgMemErr\n },\n 0x28: {\n n: 'PtgMemNoMem',\n f: parse_PtgMemNoMem\n },\n 0x29: {\n n: 'PtgMemFunc',\n f: parse_PtgMemFunc\n },\n 0x2A: {\n n: 'PtgRefErr',\n f: parse_PtgRefErr\n },\n 0x2B: {\n n: 'PtgAreaErr',\n f: parse_PtgAreaErr\n },\n 0x2C: {\n n: 'PtgRefN',\n f: parse_PtgRefN\n },\n 0x2D: {\n n: 'PtgAreaN',\n f: parse_PtgAreaN\n },\n 0x2E: {\n n: 'PtgMemAreaN',\n f: parse_PtgMemAreaN\n },\n 0x2F: {\n n: 'PtgMemNoMemN',\n f: parse_PtgMemNoMemN\n },\n 0x39: {\n n: 'PtgNameX',\n f: parse_PtgNameX\n },\n 0x3A: {\n n: 'PtgRef3d',\n f: parse_PtgRef3d\n },\n 0x3B: {\n n: 'PtgArea3d',\n f: parse_PtgArea3d\n },\n 0x3C: {\n n: 'PtgRefErr3d',\n f: parse_PtgRefErr3d\n },\n 0x3D: {\n n: 'PtgAreaErr3d',\n f: parse_PtgAreaErr3d\n },\n 0xFF: {}\n };\n /* These are duplicated in the PtgTypes table */\n\n var PtgDupes = {\n 0x40: 0x20,\n 0x60: 0x20,\n 0x41: 0x21,\n 0x61: 0x21,\n 0x42: 0x22,\n 0x62: 0x22,\n 0x43: 0x23,\n 0x63: 0x23,\n 0x44: 0x24,\n 0x64: 0x24,\n 0x45: 0x25,\n 0x65: 0x25,\n 0x46: 0x26,\n 0x66: 0x26,\n 0x47: 0x27,\n 0x67: 0x27,\n 0x48: 0x28,\n 0x68: 0x28,\n 0x49: 0x29,\n 0x69: 0x29,\n 0x4A: 0x2A,\n 0x6A: 0x2A,\n 0x4B: 0x2B,\n 0x6B: 0x2B,\n 0x4C: 0x2C,\n 0x6C: 0x2C,\n 0x4D: 0x2D,\n 0x6D: 0x2D,\n 0x4E: 0x2E,\n 0x6E: 0x2E,\n 0x4F: 0x2F,\n 0x6F: 0x2F,\n 0x58: 0x22,\n 0x78: 0x22,\n 0x59: 0x39,\n 0x79: 0x39,\n 0x5A: 0x3A,\n 0x7A: 0x3A,\n 0x5B: 0x3B,\n 0x7B: 0x3B,\n 0x5C: 0x3C,\n 0x7C: 0x3C,\n 0x5D: 0x3D,\n 0x7D: 0x3D\n };\n\n (function () {\n for (var y in PtgDupes) {\n PtgTypes[y] = PtgTypes[PtgDupes[y]];\n }\n })();\n\n var Ptg18 = {\n 0x01: {\n n: 'PtgElfLel',\n f: parse_PtgElfLel\n },\n 0x02: {\n n: 'PtgElfRw',\n f: parse_PtgElfRw\n },\n 0x03: {\n n: 'PtgElfCol',\n f: parse_PtgElfCol\n },\n 0x06: {\n n: 'PtgElfRwV',\n f: parse_PtgElfRwV\n },\n 0x07: {\n n: 'PtgElfColV',\n f: parse_PtgElfColV\n },\n 0x0A: {\n n: 'PtgElfRadical',\n f: parse_PtgElfRadical\n },\n 0x0B: {\n n: 'PtgElfRadicalS',\n f: parse_PtgElfRadicalS\n },\n 0x0D: {\n n: 'PtgElfColS',\n f: parse_PtgElfColS\n },\n 0x0F: {\n n: 'PtgElfColSV',\n f: parse_PtgElfColSV\n },\n 0x10: {\n n: 'PtgElfRadicalLel',\n f: parse_PtgElfRadicalLel\n },\n 0x19: {\n n: 'PtgList',\n f: parse_PtgList\n },\n 0x1D: {\n n: 'PtgSxName',\n f: parse_PtgSxName\n },\n 0xFF: {}\n };\n var Ptg19 = {\n 0x00: {\n n: 'PtgAttrNoop',\n f: parse_PtgAttrNoop\n },\n 0x01: {\n n: 'PtgAttrSemi',\n f: parse_PtgAttrSemi\n },\n 0x02: {\n n: 'PtgAttrIf',\n f: parse_PtgAttrIf\n },\n 0x04: {\n n: 'PtgAttrChoose',\n f: parse_PtgAttrChoose\n },\n 0x08: {\n n: 'PtgAttrGoto',\n f: parse_PtgAttrGoto\n },\n 0x10: {\n n: 'PtgAttrSum',\n f: parse_PtgAttrSum\n },\n 0x20: {\n n: 'PtgAttrBaxcel',\n f: parse_PtgAttrBaxcel\n },\n 0x40: {\n n: 'PtgAttrSpace',\n f: parse_PtgAttrSpace\n },\n 0x41: {\n n: 'PtgAttrSpaceSemi',\n f: parse_PtgAttrSpaceSemi\n },\n 0x80: {\n n: 'PtgAttrIfError',\n f: parse_PtgAttrIfError\n },\n 0xFF: {}\n };\n Ptg19[0x21] = Ptg19[0x20];\n /* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\n\n function parse_RgbExtra(blob, length, rgce, opts) {\n if (opts.biff < 8) return parsenoop(blob, length);\n var target = blob.l + length;\n var o = [];\n\n for (var i = 0; i !== rgce.length; ++i) {\n switch (rgce[i][0]) {\n case 'PtgArray':\n /* PtgArray -> PtgExtraArray */\n rgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n o.push(rgce[i][1]);\n break;\n\n case 'PtgMemArea':\n /* PtgMemArea -> PtgExtraMem */\n rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n o.push(rgce[i][2]);\n break;\n\n case 'PtgExp':\n /* PtgExp -> PtgExtraCol */\n if (opts && opts.biff == 12) {\n rgce[i][1][1] = blob.read_shift(4);\n o.push(rgce[i][1]);\n }\n\n break;\n\n case 'PtgList':\n /* TODO: PtgList -> PtgExtraList */\n\n case 'PtgElfRadicalS':\n /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\n case 'PtgElfColS':\n /* TODO: PtgElfColS -> PtgExtraElf */\n\n case 'PtgElfColSV':\n /* TODO: PtgElfColSV -> PtgExtraElf */\n throw \"Unsupported \" + rgce[i][0];\n\n default:\n break;\n }\n }\n\n length = target - blob.l;\n /* note: this is technically an error but Excel disregards */\n //if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\n if (length !== 0) o.push(parsenoop(blob, length));\n return o;\n }\n /* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\n\n\n function parse_Rgce(blob, length, opts) {\n var target = blob.l + length;\n var R,\n id,\n ptgs = [];\n\n while (target != blob.l) {\n length = target - blob.l;\n id = blob[blob.l];\n R = PtgTypes[id];\n if (id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\n if (!R || !R.f) {\n /*ptgs.push*/\n parsenoop(blob, length);\n } else {\n ptgs.push([R.n, R.f(blob, length, opts)]);\n }\n }\n\n return ptgs;\n }\n\n function stringify_array(f) {\n var o = [];\n\n for (var i = 0; i < f.length; ++i) {\n var x = f[i],\n r = [];\n\n for (var j = 0; j < x.length; ++j) {\n var y = x[j];\n if (y) switch (y[0]) {\n // TODO: handle embedded quotes\n case 0x02:\n r.push('\"' + y[1].replace(/\"/g, '\"\"') + '\"');\n break;\n\n default:\n r.push(y[1]);\n } else r.push(\"\");\n }\n\n o.push(r.join(\",\"));\n }\n\n return o.join(\";\");\n }\n /* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\n\n\n var PtgBinOp = {\n PtgAdd: \"+\",\n PtgConcat: \"&\",\n PtgDiv: \"/\",\n PtgEq: \"=\",\n PtgGe: \">=\",\n PtgGt: \">\",\n PtgLe: \"<=\",\n PtgLt: \"<\",\n PtgMul: \"*\",\n PtgNe: \"<>\",\n PtgPower: \"^\",\n PtgSub: \"-\"\n }; // List of invalid characters needs to be tested further\n\n var quoteCharacters = new RegExp(/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/);\n\n function formula_quote_sheet_name(sname, opts) {\n if (!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n if (quoteCharacters.test(sname)) return \"'\" + sname + \"'\";\n return sname;\n }\n\n function get_ixti_raw(supbooks, ixti, opts) {\n if (!supbooks) return \"SH33TJSERR0\";\n if (opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n if (!supbooks.XTI) return \"SH33TJSERR6\";\n var XTI = supbooks.XTI[ixti];\n\n if (opts.biff < 8) {\n if (ixti > 10000) ixti -= 65536;\n if (ixti < 0) ixti = -ixti;\n return ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n }\n\n if (!XTI) return \"SH33TJSERR1\";\n var o = \"\";\n if (opts.biff > 8) switch (supbooks[XTI[0]][0]) {\n case 0x0165:\n /* 'BrtSupSelf' */\n o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n case 0x0166:\n /* 'BrtSupSame' */\n if (opts.SID != null) return supbooks.SheetNames[opts.SID];\n return \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\n case 0x0163:\n /* 'BrtSupBookSrc' */\n\n /* falls through */\n\n default:\n return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n }\n\n switch (supbooks[XTI[0]][0][0]) {\n case 0x0401:\n o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\";\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n case 0x3A01:\n return supbooks[XTI[0]].slice(1).map(function (name) {\n return name.Name;\n }).join(\";;\");\n //return \"SH33TJSERR8\";\n\n default:\n if (!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n o = XTI[1] == -1 ? \"#REF\" : supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\";\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n }\n }\n\n function get_ixti(supbooks, ixti, opts) {\n var ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n return ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n }\n\n function stringify_formula(formula\n /*Array*/\n , range, cell, supbooks, opts) {\n var biff = opts && opts.biff || 8;\n var _range =\n /*range != null ? range :*/\n {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n var stack = [],\n e1,\n e2,\n c,\n ixti = 0,\n nameidx = 0,\n r,\n sname = \"\";\n if (!formula[0] || !formula[0][0]) return \"\";\n var last_sp = -1,\n sp = \"\";\n\n for (var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n var f = formula[0][ff];\n\n switch (f[0]) {\n case 'PtgUminus':\n /* [MS-XLS] 2.5.198.93 */\n stack.push(\"-\" + stack.pop());\n break;\n\n case 'PtgUplus':\n /* [MS-XLS] 2.5.198.95 */\n stack.push(\"+\" + stack.pop());\n break;\n\n case 'PtgPercent':\n /* [MS-XLS] 2.5.198.81 */\n stack.push(stack.pop() + \"%\");\n break;\n\n case 'PtgAdd':\n /* [MS-XLS] 2.5.198.26 */\n\n case 'PtgConcat':\n /* [MS-XLS] 2.5.198.43 */\n\n case 'PtgDiv':\n /* [MS-XLS] 2.5.198.45 */\n\n case 'PtgEq':\n /* [MS-XLS] 2.5.198.56 */\n\n case 'PtgGe':\n /* [MS-XLS] 2.5.198.64 */\n\n case 'PtgGt':\n /* [MS-XLS] 2.5.198.65 */\n\n case 'PtgLe':\n /* [MS-XLS] 2.5.198.68 */\n\n case 'PtgLt':\n /* [MS-XLS] 2.5.198.69 */\n\n case 'PtgMul':\n /* [MS-XLS] 2.5.198.75 */\n\n case 'PtgNe':\n /* [MS-XLS] 2.5.198.78 */\n\n case 'PtgPower':\n /* [MS-XLS] 2.5.198.82 */\n\n case 'PtgSub':\n /* [MS-XLS] 2.5.198.90 */\n e1 = stack.pop();\n e2 = stack.pop();\n\n if (last_sp >= 0) {\n switch (formula[0][last_sp][1][0]) {\n case 0:\n // $FlowIgnore\n sp = fill(\" \", formula[0][last_sp][1][1]);\n break;\n\n case 1:\n // $FlowIgnore\n sp = fill(\"\\r\", formula[0][last_sp][1][1]);\n break;\n\n default:\n sp = \"\"; // $FlowIgnore\n\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n }\n\n e2 = e2 + sp;\n last_sp = -1;\n }\n\n stack.push(e2 + PtgBinOp[f[0]] + e1);\n break;\n\n case 'PtgIsect':\n /* [MS-XLS] 2.5.198.67 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \" \" + e1);\n break;\n\n case 'PtgUnion':\n /* [MS-XLS] 2.5.198.94 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \",\" + e1);\n break;\n\n case 'PtgRange':\n /* [MS-XLS] 2.5.198.83 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \":\" + e1);\n break;\n\n case 'PtgAttrChoose':\n /* [MS-XLS] 2.5.198.34 */\n break;\n\n case 'PtgAttrGoto':\n /* [MS-XLS] 2.5.198.35 */\n break;\n\n case 'PtgAttrIf':\n /* [MS-XLS] 2.5.198.36 */\n break;\n\n case 'PtgAttrIfError':\n /* [MS-XLSB] 2.5.97.28 */\n break;\n\n case 'PtgRef':\n /* [MS-XLS] 2.5.198.84 */\n c = shift_cell_xls(f[1][1], _range, opts);\n stack.push(encode_cell_xls(c, biff));\n break;\n\n case 'PtgRefN':\n /* [MS-XLS] 2.5.198.88 */\n c = cell ? shift_cell_xls(f[1][1], cell, opts) : f[1][1];\n stack.push(encode_cell_xls(c, biff));\n break;\n\n case 'PtgRef3d':\n /* [MS-XLS] 2.5.198.85 */\n ixti = f[1][1];\n c = shift_cell_xls(f[1][2], _range, opts);\n sname = get_ixti(supbooks, ixti, opts);\n var w = sname;\n /* IE9 fails on defined names */\n // eslint-disable-line no-unused-vars\n\n stack.push(sname + \"!\" + encode_cell_xls(c, biff));\n break;\n\n case 'PtgFunc':\n /* [MS-XLS] 2.5.198.62 */\n\n case 'PtgFuncVar':\n /* [MS-XLS] 2.5.198.63 */\n\n /* f[1] = [argc, func, type] */\n var argc = f[1][0],\n func = f[1][1];\n if (!argc) argc = 0;\n argc &= 0x7F;\n var args = argc == 0 ? [] : stack.slice(-argc);\n stack.length -= argc;\n if (func === 'User') func = args.shift();\n stack.push(func + \"(\" + args.join(\",\") + \")\");\n break;\n\n case 'PtgBool':\n /* [MS-XLS] 2.5.198.42 */\n stack.push(f[1] ? \"TRUE\" : \"FALSE\");\n break;\n\n case 'PtgInt':\n /* [MS-XLS] 2.5.198.66 */\n stack.push(f[1]);\n break;\n\n case 'PtgNum':\n /* [MS-XLS] 2.5.198.79 TODO: precision? */\n stack.push(String(f[1]));\n break;\n\n case 'PtgStr':\n /* [MS-XLS] 2.5.198.89 */\n // $FlowIgnore\n stack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"');\n break;\n\n case 'PtgErr':\n /* [MS-XLS] 2.5.198.57 */\n stack.push(f[1]);\n break;\n\n case 'PtgAreaN':\n /* [MS-XLS] 2.5.198.31 TODO */\n r = shift_range_xls(f[1][1], cell ? {\n s: cell\n } : _range, opts);\n stack.push(encode_range_xls(r, opts));\n break;\n\n case 'PtgArea':\n /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n r = shift_range_xls(f[1][1], _range, opts);\n stack.push(encode_range_xls(r, opts));\n break;\n\n case 'PtgArea3d':\n /* [MS-XLS] 2.5.198.28 TODO */\n ixti = f[1][1];\n r = f[1][2];\n sname = get_ixti(supbooks, ixti, opts);\n stack.push(sname + \"!\" + encode_range_xls(r, opts));\n break;\n\n case 'PtgAttrSum':\n /* [MS-XLS] 2.5.198.41 */\n stack.push(\"SUM(\" + stack.pop() + \")\");\n break;\n\n case 'PtgAttrBaxcel':\n /* [MS-XLS] 2.5.198.33 */\n\n case 'PtgAttrSemi':\n /* [MS-XLS] 2.5.198.37 */\n break;\n\n case 'PtgName':\n /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\n /* f[1] = type, 0, nameindex */\n nameidx = f[1][2];\n var lbl = (supbooks.names || [])[nameidx - 1] || (supbooks[0] || [])[nameidx];\n var name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n if (name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];\n stack.push(name);\n break;\n\n case 'PtgNameX':\n /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\n /* f[1] = type, ixti, nameindex */\n var bookidx = f[1][1];\n nameidx = f[1][2];\n var externbook;\n /* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\n if (opts.biff <= 5) {\n if (bookidx < 0) bookidx = -bookidx;\n if (supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n } else {\n var o = \"\";\n\n if (((supbooks[bookidx] || [])[0] || [])[0] == 0x3A01) {\n /* empty */\n } else if (((supbooks[bookidx] || [])[0] || [])[0] == 0x0401) {\n if (supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n o = supbooks.SheetNames[supbooks[bookidx][nameidx].itab - 1] + \"!\";\n }\n } else o = supbooks.SheetNames[nameidx - 1] + \"!\";\n\n if (supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;else if (supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;else {\n var ixtidata = (get_ixti_raw(supbooks, bookidx, opts) || \"\").split(\";;\");\n if (ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n else o += \"SH33TJSERRX\";\n }\n stack.push(o);\n break;\n }\n\n if (!externbook) externbook = {\n Name: \"SH33TJSERRY\"\n };\n stack.push(externbook.Name);\n break;\n\n case 'PtgParen':\n /* [MS-XLS] 2.5.198.80 */\n var lp = '(',\n rp = ')';\n\n if (last_sp >= 0) {\n sp = \"\";\n\n switch (formula[0][last_sp][1][0]) {\n // $FlowIgnore\n case 2:\n lp = fill(\" \", formula[0][last_sp][1][1]) + lp;\n break;\n // $FlowIgnore\n\n case 3:\n lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp;\n break;\n // $FlowIgnore\n\n case 4:\n rp = fill(\" \", formula[0][last_sp][1][1]) + rp;\n break;\n // $FlowIgnore\n\n case 5:\n rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp;\n break;\n\n default:\n // $FlowIgnore\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n }\n\n last_sp = -1;\n }\n\n stack.push(lp + stack.pop() + rp);\n break;\n\n case 'PtgRefErr':\n /* [MS-XLS] 2.5.198.86 */\n stack.push('#REF!');\n break;\n\n case 'PtgRefErr3d':\n /* [MS-XLS] 2.5.198.87 */\n stack.push('#REF!');\n break;\n\n case 'PtgExp':\n /* [MS-XLS] 2.5.198.58 TODO */\n c = {\n c: f[1][1],\n r: f[1][0]\n };\n var q = {\n c: cell.c,\n r: cell.r\n };\n\n if (supbooks.sharedf[encode_cell(c)]) {\n var parsedf = supbooks.sharedf[encode_cell(c)];\n stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n } else {\n var fnd = false;\n\n for (e1 = 0; e1 != supbooks.arrayf.length; ++e1) {\n /* TODO: should be something like range_has */\n e2 = supbooks.arrayf[e1];\n if (c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n if (c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n fnd = true;\n break;\n }\n\n if (!fnd) stack.push(f[1]);\n }\n\n break;\n\n case 'PtgArray':\n /* [MS-XLS] 2.5.198.32 TODO */\n stack.push(\"{\" + stringify_array(f[1]) + \"}\");\n break;\n\n case 'PtgMemArea':\n /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n //stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n break;\n\n case 'PtgAttrSpace':\n /* [MS-XLS] 2.5.198.38 */\n\n case 'PtgAttrSpaceSemi':\n /* [MS-XLS] 2.5.198.39 */\n last_sp = ff;\n break;\n\n case 'PtgTbl':\n /* [MS-XLS] 2.5.198.92 TODO */\n break;\n\n case 'PtgMemErr':\n /* [MS-XLS] 2.5.198.71 */\n break;\n\n case 'PtgMissArg':\n /* [MS-XLS] 2.5.198.74 */\n stack.push(\"\");\n break;\n\n case 'PtgAreaErr':\n /* [MS-XLS] 2.5.198.29 */\n stack.push(\"#REF!\");\n break;\n\n case 'PtgAreaErr3d':\n /* [MS-XLS] 2.5.198.30 */\n stack.push(\"#REF!\");\n break;\n\n case 'PtgList':\n /* [MS-XLSB] 2.5.97.52 */\n // $FlowIgnore\n stack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n break;\n\n case 'PtgMemAreaN':\n case 'PtgMemNoMemN':\n case 'PtgAttrNoop':\n case 'PtgSheet':\n case 'PtgEndSheet':\n break;\n\n case 'PtgMemFunc':\n /* [MS-XLS] 2.5.198.72 TODO */\n break;\n\n case 'PtgMemNoMem':\n /* [MS-XLS] 2.5.198.73 TODO */\n break;\n\n case 'PtgElfCol':\n /* [MS-XLS] 2.5.198.46 */\n\n case 'PtgElfColS':\n /* [MS-XLS] 2.5.198.47 */\n\n case 'PtgElfColSV':\n /* [MS-XLS] 2.5.198.48 */\n\n case 'PtgElfColV':\n /* [MS-XLS] 2.5.198.49 */\n\n case 'PtgElfLel':\n /* [MS-XLS] 2.5.198.50 */\n\n case 'PtgElfRadical':\n /* [MS-XLS] 2.5.198.51 */\n\n case 'PtgElfRadicalLel':\n /* [MS-XLS] 2.5.198.52 */\n\n case 'PtgElfRadicalS':\n /* [MS-XLS] 2.5.198.53 */\n\n case 'PtgElfRw':\n /* [MS-XLS] 2.5.198.54 */\n\n case 'PtgElfRwV':\n /* [MS-XLS] 2.5.198.55 */\n throw new Error(\"Unsupported ELFs\");\n\n case 'PtgSxName':\n /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n throw new Error('Unrecognized Formula Token: ' + String(f));\n\n default:\n throw new Error('Unrecognized Formula Token: ' + String(f));\n }\n\n var PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n if (opts.biff != 3) if (last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n f = formula[0][last_sp];\n var _left = true;\n\n switch (f[1][0]) {\n /* note: some bad XLSB files omit the PtgParen */\n case 4:\n _left = false;\n\n /* falls through */\n\n case 0:\n // $FlowIgnore\n sp = fill(\" \", f[1][1]);\n break;\n\n case 5:\n _left = false;\n\n /* falls through */\n\n case 1:\n // $FlowIgnore\n sp = fill(\"\\r\", f[1][1]);\n break;\n\n default:\n sp = \"\"; // $FlowIgnore\n\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n }\n\n stack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n last_sp = -1;\n }\n }\n\n if (stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n return stack[0];\n }\n /* [MS-XLS] 2.5.198.1 TODO */\n\n\n function parse_ArrayParsedFormula(blob, length, opts) {\n var target = blob.l + length,\n len = opts.biff == 2 ? 1 : 2;\n var rgcb,\n cce = blob.read_shift(len); // length of rgce\n\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n var rgce = parse_Rgce(blob, cce, opts);\n if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n blob.l = target;\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.198.3 TODO */\n\n\n function parse_XLSCellParsedFormula(blob, length, opts) {\n var target = blob.l + length,\n len = opts.biff == 2 ? 1 : 2;\n var rgcb,\n cce = blob.read_shift(len); // length of rgce\n\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n var rgce = parse_Rgce(blob, cce, opts);\n if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n blob.l = target;\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.198.21 */\n\n\n function parse_NameParsedFormula(blob, length, opts, cce) {\n var target = blob.l + length;\n var rgce = parse_Rgce(blob, cce, opts);\n var rgcb;\n if (target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.198.118 TODO */\n\n\n function parse_SharedParsedFormula(blob, length, opts) {\n var target = blob.l + length;\n var rgcb,\n cce = blob.read_shift(2); // length of rgce\n\n var rgce = parse_Rgce(blob, cce, opts);\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n if (length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\n\n\n function parse_FormulaValue(blob) {\n var b;\n if (__readUInt16LE(blob, blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob), 'n'];\n\n switch (blob[blob.l]) {\n case 0x00:\n blob.l += 8;\n return [\"String\", 's'];\n\n case 0x01:\n b = blob[blob.l + 2] === 0x1;\n blob.l += 8;\n return [b, 'b'];\n\n case 0x02:\n b = blob[blob.l + 2];\n blob.l += 8;\n return [b, 'e'];\n\n case 0x03:\n blob.l += 8;\n return [\"\", 's'];\n }\n\n return [];\n }\n\n function write_FormulaValue(value) {\n if (value == null) {\n // Blank String Value\n var o = new_buf(8);\n o.write_shift(1, 0x03);\n o.write_shift(1, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0xFFFF);\n return o;\n } else if (typeof value == \"number\") return write_Xnum(value);\n\n return write_Xnum(0);\n }\n /* [MS-XLS] 2.4.127 TODO */\n\n\n function parse_Formula(blob, length, opts) {\n var end = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2) ++blob.l;\n var val = parse_FormulaValue(blob, 8);\n var flags = blob.read_shift(1);\n\n if (opts.biff != 2) {\n blob.read_shift(1);\n\n if (opts.biff >= 5) {\n /*var chn = */\n blob.read_shift(4);\n }\n }\n\n var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n return {\n cell: cell,\n val: val[0],\n formula: cbf,\n shared: flags >> 3 & 1,\n tt: val[1]\n };\n }\n\n function write_Formula(cell, R, C, opts, os) {\n // Cell\n var o1 = write_XLSCell(R, C, os); // FormulaValue\n\n var o2 = write_FormulaValue(cell.v); // flags + cache\n\n var o3 = new_buf(6);\n var flags = 0x01 | 0x20;\n o3.write_shift(2, flags);\n o3.write_shift(4, 0); // CellParsedFormula\n\n var bf = new_buf(cell.bf.length);\n\n for (var i = 0; i < cell.bf.length; ++i) {\n bf[i] = cell.bf[i];\n }\n\n var out = bconcat([o1, o2, o3, bf]);\n return out;\n }\n /* XLSB Parsed Formula records have the same shape */\n\n\n function parse_XLSBParsedFormula(data, length, opts) {\n var cce = data.read_shift(4);\n var rgce = parse_Rgce(data, cce, opts);\n var cb = data.read_shift(4);\n var rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n return [rgce, rgcb];\n }\n /* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\n\n\n var parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLSB] 2.5.97.4 CellParsedFormula */\n\n var parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n //var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n\n /* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n //var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n\n /* [MS-XLSB] 2.5.97.12 NameParsedFormula */\n\n var parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\n\n var parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLS] 2.5.198.4 */\n\n var Cetab = {\n 0x0000: 'BEEP',\n 0x0001: 'OPEN',\n 0x0002: 'OPEN.LINKS',\n 0x0003: 'CLOSE.ALL',\n 0x0004: 'SAVE',\n 0x0005: 'SAVE.AS',\n 0x0006: 'FILE.DELETE',\n 0x0007: 'PAGE.SETUP',\n 0x0008: 'PRINT',\n 0x0009: 'PRINTER.SETUP',\n 0x000A: 'QUIT',\n 0x000B: 'NEW.WINDOW',\n 0x000C: 'ARRANGE.ALL',\n 0x000D: 'WINDOW.SIZE',\n 0x000E: 'WINDOW.MOVE',\n 0x000F: 'FULL',\n 0x0010: 'CLOSE',\n 0x0011: 'RUN',\n 0x0016: 'SET.PRINT.AREA',\n 0x0017: 'SET.PRINT.TITLES',\n 0x0018: 'SET.PAGE.BREAK',\n 0x0019: 'REMOVE.PAGE.BREAK',\n 0x001A: 'FONT',\n 0x001B: 'DISPLAY',\n 0x001C: 'PROTECT.DOCUMENT',\n 0x001D: 'PRECISION',\n 0x001E: 'A1.R1C1',\n 0x001F: 'CALCULATE.NOW',\n 0x0020: 'CALCULATION',\n 0x0022: 'DATA.FIND',\n 0x0023: 'EXTRACT',\n 0x0024: 'DATA.DELETE',\n 0x0025: 'SET.DATABASE',\n 0x0026: 'SET.CRITERIA',\n 0x0027: 'SORT',\n 0x0028: 'DATA.SERIES',\n 0x0029: 'TABLE',\n 0x002A: 'FORMAT.NUMBER',\n 0x002B: 'ALIGNMENT',\n 0x002C: 'STYLE',\n 0x002D: 'BORDER',\n 0x002E: 'CELL.PROTECTION',\n 0x002F: 'COLUMN.WIDTH',\n 0x0030: 'UNDO',\n 0x0031: 'CUT',\n 0x0032: 'COPY',\n 0x0033: 'PASTE',\n 0x0034: 'CLEAR',\n 0x0035: 'PASTE.SPECIAL',\n 0x0036: 'EDIT.DELETE',\n 0x0037: 'INSERT',\n 0x0038: 'FILL.RIGHT',\n 0x0039: 'FILL.DOWN',\n 0x003D: 'DEFINE.NAME',\n 0x003E: 'CREATE.NAMES',\n 0x003F: 'FORMULA.GOTO',\n 0x0040: 'FORMULA.FIND',\n 0x0041: 'SELECT.LAST.CELL',\n 0x0042: 'SHOW.ACTIVE.CELL',\n 0x0043: 'GALLERY.AREA',\n 0x0044: 'GALLERY.BAR',\n 0x0045: 'GALLERY.COLUMN',\n 0x0046: 'GALLERY.LINE',\n 0x0047: 'GALLERY.PIE',\n 0x0048: 'GALLERY.SCATTER',\n 0x0049: 'COMBINATION',\n 0x004A: 'PREFERRED',\n 0x004B: 'ADD.OVERLAY',\n 0x004C: 'GRIDLINES',\n 0x004D: 'SET.PREFERRED',\n 0x004E: 'AXES',\n 0x004F: 'LEGEND',\n 0x0050: 'ATTACH.TEXT',\n 0x0051: 'ADD.ARROW',\n 0x0052: 'SELECT.CHART',\n 0x0053: 'SELECT.PLOT.AREA',\n 0x0054: 'PATTERNS',\n 0x0055: 'MAIN.CHART',\n 0x0056: 'OVERLAY',\n 0x0057: 'SCALE',\n 0x0058: 'FORMAT.LEGEND',\n 0x0059: 'FORMAT.TEXT',\n 0x005A: 'EDIT.REPEAT',\n 0x005B: 'PARSE',\n 0x005C: 'JUSTIFY',\n 0x005D: 'HIDE',\n 0x005E: 'UNHIDE',\n 0x005F: 'WORKSPACE',\n 0x0060: 'FORMULA',\n 0x0061: 'FORMULA.FILL',\n 0x0062: 'FORMULA.ARRAY',\n 0x0063: 'DATA.FIND.NEXT',\n 0x0064: 'DATA.FIND.PREV',\n 0x0065: 'FORMULA.FIND.NEXT',\n 0x0066: 'FORMULA.FIND.PREV',\n 0x0067: 'ACTIVATE',\n 0x0068: 'ACTIVATE.NEXT',\n 0x0069: 'ACTIVATE.PREV',\n 0x006A: 'UNLOCKED.NEXT',\n 0x006B: 'UNLOCKED.PREV',\n 0x006C: 'COPY.PICTURE',\n 0x006D: 'SELECT',\n 0x006E: 'DELETE.NAME',\n 0x006F: 'DELETE.FORMAT',\n 0x0070: 'VLINE',\n 0x0071: 'HLINE',\n 0x0072: 'VPAGE',\n 0x0073: 'HPAGE',\n 0x0074: 'VSCROLL',\n 0x0075: 'HSCROLL',\n 0x0076: 'ALERT',\n 0x0077: 'NEW',\n 0x0078: 'CANCEL.COPY',\n 0x0079: 'SHOW.CLIPBOARD',\n 0x007A: 'MESSAGE',\n 0x007C: 'PASTE.LINK',\n 0x007D: 'APP.ACTIVATE',\n 0x007E: 'DELETE.ARROW',\n 0x007F: 'ROW.HEIGHT',\n 0x0080: 'FORMAT.MOVE',\n 0x0081: 'FORMAT.SIZE',\n 0x0082: 'FORMULA.REPLACE',\n 0x0083: 'SEND.KEYS',\n 0x0084: 'SELECT.SPECIAL',\n 0x0085: 'APPLY.NAMES',\n 0x0086: 'REPLACE.FONT',\n 0x0087: 'FREEZE.PANES',\n 0x0088: 'SHOW.INFO',\n 0x0089: 'SPLIT',\n 0x008A: 'ON.WINDOW',\n 0x008B: 'ON.DATA',\n 0x008C: 'DISABLE.INPUT',\n 0x008E: 'OUTLINE',\n 0x008F: 'LIST.NAMES',\n 0x0090: 'FILE.CLOSE',\n 0x0091: 'SAVE.WORKBOOK',\n 0x0092: 'DATA.FORM',\n 0x0093: 'COPY.CHART',\n 0x0094: 'ON.TIME',\n 0x0095: 'WAIT',\n 0x0096: 'FORMAT.FONT',\n 0x0097: 'FILL.UP',\n 0x0098: 'FILL.LEFT',\n 0x0099: 'DELETE.OVERLAY',\n 0x009B: 'SHORT.MENUS',\n 0x009F: 'SET.UPDATE.STATUS',\n 0x00A1: 'COLOR.PALETTE',\n 0x00A2: 'DELETE.STYLE',\n 0x00A3: 'WINDOW.RESTORE',\n 0x00A4: 'WINDOW.MAXIMIZE',\n 0x00A6: 'CHANGE.LINK',\n 0x00A7: 'CALCULATE.DOCUMENT',\n 0x00A8: 'ON.KEY',\n 0x00A9: 'APP.RESTORE',\n 0x00AA: 'APP.MOVE',\n 0x00AB: 'APP.SIZE',\n 0x00AC: 'APP.MINIMIZE',\n 0x00AD: 'APP.MAXIMIZE',\n 0x00AE: 'BRING.TO.FRONT',\n 0x00AF: 'SEND.TO.BACK',\n 0x00B9: 'MAIN.CHART.TYPE',\n 0x00BA: 'OVERLAY.CHART.TYPE',\n 0x00BB: 'SELECT.END',\n 0x00BC: 'OPEN.MAIL',\n 0x00BD: 'SEND.MAIL',\n 0x00BE: 'STANDARD.FONT',\n 0x00BF: 'CONSOLIDATE',\n 0x00C0: 'SORT.SPECIAL',\n 0x00C1: 'GALLERY.3D.AREA',\n 0x00C2: 'GALLERY.3D.COLUMN',\n 0x00C3: 'GALLERY.3D.LINE',\n 0x00C4: 'GALLERY.3D.PIE',\n 0x00C5: 'VIEW.3D',\n 0x00C6: 'GOAL.SEEK',\n 0x00C7: 'WORKGROUP',\n 0x00C8: 'FILL.GROUP',\n 0x00C9: 'UPDATE.LINK',\n 0x00CA: 'PROMOTE',\n 0x00CB: 'DEMOTE',\n 0x00CC: 'SHOW.DETAIL',\n 0x00CE: 'UNGROUP',\n 0x00CF: 'OBJECT.PROPERTIES',\n 0x00D0: 'SAVE.NEW.OBJECT',\n 0x00D1: 'SHARE',\n 0x00D2: 'SHARE.NAME',\n 0x00D3: 'DUPLICATE',\n 0x00D4: 'APPLY.STYLE',\n 0x00D5: 'ASSIGN.TO.OBJECT',\n 0x00D6: 'OBJECT.PROTECTION',\n 0x00D7: 'HIDE.OBJECT',\n 0x00D8: 'SET.EXTRACT',\n 0x00D9: 'CREATE.PUBLISHER',\n 0x00DA: 'SUBSCRIBE.TO',\n 0x00DB: 'ATTRIBUTES',\n 0x00DC: 'SHOW.TOOLBAR',\n 0x00DE: 'PRINT.PREVIEW',\n 0x00DF: 'EDIT.COLOR',\n 0x00E0: 'SHOW.LEVELS',\n 0x00E1: 'FORMAT.MAIN',\n 0x00E2: 'FORMAT.OVERLAY',\n 0x00E3: 'ON.RECALC',\n 0x00E4: 'EDIT.SERIES',\n 0x00E5: 'DEFINE.STYLE',\n 0x00F0: 'LINE.PRINT',\n 0x00F3: 'ENTER.DATA',\n 0x00F9: 'GALLERY.RADAR',\n 0x00FA: 'MERGE.STYLES',\n 0x00FB: 'EDITION.OPTIONS',\n 0x00FC: 'PASTE.PICTURE',\n 0x00FD: 'PASTE.PICTURE.LINK',\n 0x00FE: 'SPELLING',\n 0x0100: 'ZOOM',\n 0x0103: 'INSERT.OBJECT',\n 0x0104: 'WINDOW.MINIMIZE',\n 0x0109: 'SOUND.NOTE',\n 0x010A: 'SOUND.PLAY',\n 0x010B: 'FORMAT.SHAPE',\n 0x010C: 'EXTEND.POLYGON',\n 0x010D: 'FORMAT.AUTO',\n 0x0110: 'GALLERY.3D.BAR',\n 0x0111: 'GALLERY.3D.SURFACE',\n 0x0112: 'FILL.AUTO',\n 0x0114: 'CUSTOMIZE.TOOLBAR',\n 0x0115: 'ADD.TOOL',\n 0x0116: 'EDIT.OBJECT',\n 0x0117: 'ON.DOUBLECLICK',\n 0x0118: 'ON.ENTRY',\n 0x0119: 'WORKBOOK.ADD',\n 0x011A: 'WORKBOOK.MOVE',\n 0x011B: 'WORKBOOK.COPY',\n 0x011C: 'WORKBOOK.OPTIONS',\n 0x011D: 'SAVE.WORKSPACE',\n 0x0120: 'CHART.WIZARD',\n 0x0121: 'DELETE.TOOL',\n 0x0122: 'MOVE.TOOL',\n 0x0123: 'WORKBOOK.SELECT',\n 0x0124: 'WORKBOOK.ACTIVATE',\n 0x0125: 'ASSIGN.TO.TOOL',\n 0x0127: 'COPY.TOOL',\n 0x0128: 'RESET.TOOL',\n 0x0129: 'CONSTRAIN.NUMERIC',\n 0x012A: 'PASTE.TOOL',\n 0x012E: 'WORKBOOK.NEW',\n 0x0131: 'SCENARIO.CELLS',\n 0x0132: 'SCENARIO.DELETE',\n 0x0133: 'SCENARIO.ADD',\n 0x0134: 'SCENARIO.EDIT',\n 0x0135: 'SCENARIO.SHOW',\n 0x0136: 'SCENARIO.SHOW.NEXT',\n 0x0137: 'SCENARIO.SUMMARY',\n 0x0138: 'PIVOT.TABLE.WIZARD',\n 0x0139: 'PIVOT.FIELD.PROPERTIES',\n 0x013A: 'PIVOT.FIELD',\n 0x013B: 'PIVOT.ITEM',\n 0x013C: 'PIVOT.ADD.FIELDS',\n 0x013E: 'OPTIONS.CALCULATION',\n 0x013F: 'OPTIONS.EDIT',\n 0x0140: 'OPTIONS.VIEW',\n 0x0141: 'ADDIN.MANAGER',\n 0x0142: 'MENU.EDITOR',\n 0x0143: 'ATTACH.TOOLBARS',\n 0x0144: 'VBAActivate',\n 0x0145: 'OPTIONS.CHART',\n 0x0148: 'VBA.INSERT.FILE',\n 0x014A: 'VBA.PROCEDURE.DEFINITION',\n 0x0150: 'ROUTING.SLIP',\n 0x0152: 'ROUTE.DOCUMENT',\n 0x0153: 'MAIL.LOGON',\n 0x0156: 'INSERT.PICTURE',\n 0x0157: 'EDIT.TOOL',\n 0x0158: 'GALLERY.DOUGHNUT',\n 0x015E: 'CHART.TREND',\n 0x0160: 'PIVOT.ITEM.PROPERTIES',\n 0x0162: 'WORKBOOK.INSERT',\n 0x0163: 'OPTIONS.TRANSITION',\n 0x0164: 'OPTIONS.GENERAL',\n 0x0172: 'FILTER.ADVANCED',\n 0x0175: 'MAIL.ADD.MAILER',\n 0x0176: 'MAIL.DELETE.MAILER',\n 0x0177: 'MAIL.REPLY',\n 0x0178: 'MAIL.REPLY.ALL',\n 0x0179: 'MAIL.FORWARD',\n 0x017A: 'MAIL.NEXT.LETTER',\n 0x017B: 'DATA.LABEL',\n 0x017C: 'INSERT.TITLE',\n 0x017D: 'FONT.PROPERTIES',\n 0x017E: 'MACRO.OPTIONS',\n 0x017F: 'WORKBOOK.HIDE',\n 0x0180: 'WORKBOOK.UNHIDE',\n 0x0181: 'WORKBOOK.DELETE',\n 0x0182: 'WORKBOOK.NAME',\n 0x0184: 'GALLERY.CUSTOM',\n 0x0186: 'ADD.CHART.AUTOFORMAT',\n 0x0187: 'DELETE.CHART.AUTOFORMAT',\n 0x0188: 'CHART.ADD.DATA',\n 0x0189: 'AUTO.OUTLINE',\n 0x018A: 'TAB.ORDER',\n 0x018B: 'SHOW.DIALOG',\n 0x018C: 'SELECT.ALL',\n 0x018D: 'UNGROUP.SHEETS',\n 0x018E: 'SUBTOTAL.CREATE',\n 0x018F: 'SUBTOTAL.REMOVE',\n 0x0190: 'RENAME.OBJECT',\n 0x019C: 'WORKBOOK.SCROLL',\n 0x019D: 'WORKBOOK.NEXT',\n 0x019E: 'WORKBOOK.PREV',\n 0x019F: 'WORKBOOK.TAB.SPLIT',\n 0x01A0: 'FULL.SCREEN',\n 0x01A1: 'WORKBOOK.PROTECT',\n 0x01A4: 'SCROLLBAR.PROPERTIES',\n 0x01A5: 'PIVOT.SHOW.PAGES',\n 0x01A6: 'TEXT.TO.COLUMNS',\n 0x01A7: 'FORMAT.CHARTTYPE',\n 0x01A8: 'LINK.FORMAT',\n 0x01A9: 'TRACER.DISPLAY',\n 0x01AE: 'TRACER.NAVIGATE',\n 0x01AF: 'TRACER.CLEAR',\n 0x01B0: 'TRACER.ERROR',\n 0x01B1: 'PIVOT.FIELD.GROUP',\n 0x01B2: 'PIVOT.FIELD.UNGROUP',\n 0x01B3: 'CHECKBOX.PROPERTIES',\n 0x01B4: 'LABEL.PROPERTIES',\n 0x01B5: 'LISTBOX.PROPERTIES',\n 0x01B6: 'EDITBOX.PROPERTIES',\n 0x01B7: 'PIVOT.REFRESH',\n 0x01B8: 'LINK.COMBO',\n 0x01B9: 'OPEN.TEXT',\n 0x01BA: 'HIDE.DIALOG',\n 0x01BB: 'SET.DIALOG.FOCUS',\n 0x01BC: 'ENABLE.OBJECT',\n 0x01BD: 'PUSHBUTTON.PROPERTIES',\n 0x01BE: 'SET.DIALOG.DEFAULT',\n 0x01BF: 'FILTER',\n 0x01C0: 'FILTER.SHOW.ALL',\n 0x01C1: 'CLEAR.OUTLINE',\n 0x01C2: 'FUNCTION.WIZARD',\n 0x01C3: 'ADD.LIST.ITEM',\n 0x01C4: 'SET.LIST.ITEM',\n 0x01C5: 'REMOVE.LIST.ITEM',\n 0x01C6: 'SELECT.LIST.ITEM',\n 0x01C7: 'SET.CONTROL.VALUE',\n 0x01C8: 'SAVE.COPY.AS',\n 0x01CA: 'OPTIONS.LISTS.ADD',\n 0x01CB: 'OPTIONS.LISTS.DELETE',\n 0x01CC: 'SERIES.AXES',\n 0x01CD: 'SERIES.X',\n 0x01CE: 'SERIES.Y',\n 0x01CF: 'ERRORBAR.X',\n 0x01D0: 'ERRORBAR.Y',\n 0x01D1: 'FORMAT.CHART',\n 0x01D2: 'SERIES.ORDER',\n 0x01D3: 'MAIL.LOGOFF',\n 0x01D4: 'CLEAR.ROUTING.SLIP',\n 0x01D5: 'APP.ACTIVATE.MICROSOFT',\n 0x01D6: 'MAIL.EDIT.MAILER',\n 0x01D7: 'ON.SHEET',\n 0x01D8: 'STANDARD.WIDTH',\n 0x01D9: 'SCENARIO.MERGE',\n 0x01DA: 'SUMMARY.INFO',\n 0x01DB: 'FIND.FILE',\n 0x01DC: 'ACTIVE.CELL.FONT',\n 0x01DD: 'ENABLE.TIPWIZARD',\n 0x01DE: 'VBA.MAKE.ADDIN',\n 0x01E0: 'INSERTDATATABLE',\n 0x01E1: 'WORKGROUP.OPTIONS',\n 0x01E2: 'MAIL.SEND.MAILER',\n 0x01E5: 'AUTOCORRECT',\n 0x01E9: 'POST.DOCUMENT',\n 0x01EB: 'PICKLIST',\n 0x01ED: 'VIEW.SHOW',\n 0x01EE: 'VIEW.DEFINE',\n 0x01EF: 'VIEW.DELETE',\n 0x01FD: 'SHEET.BACKGROUND',\n 0x01FE: 'INSERT.MAP.OBJECT',\n 0x01FF: 'OPTIONS.MENONO',\n 0x0205: 'MSOCHECKS',\n 0x0206: 'NORMAL',\n 0x0207: 'LAYOUT',\n 0x0208: 'RM.PRINT.AREA',\n 0x0209: 'CLEAR.PRINT.AREA',\n 0x020A: 'ADD.PRINT.AREA',\n 0x020B: 'MOVE.BRK',\n 0x0221: 'HIDECURR.NOTE',\n 0x0222: 'HIDEALL.NOTES',\n 0x0223: 'DELETE.NOTE',\n 0x0224: 'TRAVERSE.NOTES',\n 0x0225: 'ACTIVATE.NOTES',\n 0x026C: 'PROTECT.REVISIONS',\n 0x026D: 'UNPROTECT.REVISIONS',\n 0x0287: 'OPTIONS.ME',\n 0x028D: 'WEB.PUBLISH',\n 0x029B: 'NEWWEBQUERY',\n 0x02A1: 'PIVOT.TABLE.CHART',\n 0x02F1: 'OPTIONS.SAVE',\n 0x02F3: 'OPTIONS.SPELL',\n 0x0328: 'HIDEALL.INKANNOTS'\n };\n /* [MS-XLS] 2.5.198.17 */\n\n /* [MS-XLSB] 2.5.97.10 */\n\n var Ftab = {\n 0x0000: 'COUNT',\n 0x0001: 'IF',\n 0x0002: 'ISNA',\n 0x0003: 'ISERROR',\n 0x0004: 'SUM',\n 0x0005: 'AVERAGE',\n 0x0006: 'MIN',\n 0x0007: 'MAX',\n 0x0008: 'ROW',\n 0x0009: 'COLUMN',\n 0x000A: 'NA',\n 0x000B: 'NPV',\n 0x000C: 'STDEV',\n 0x000D: 'DOLLAR',\n 0x000E: 'FIXED',\n 0x000F: 'SIN',\n 0x0010: 'COS',\n 0x0011: 'TAN',\n 0x0012: 'ATAN',\n 0x0013: 'PI',\n 0x0014: 'SQRT',\n 0x0015: 'EXP',\n 0x0016: 'LN',\n 0x0017: 'LOG10',\n 0x0018: 'ABS',\n 0x0019: 'INT',\n 0x001A: 'SIGN',\n 0x001B: 'ROUND',\n 0x001C: 'LOOKUP',\n 0x001D: 'INDEX',\n 0x001E: 'REPT',\n 0x001F: 'MID',\n 0x0020: 'LEN',\n 0x0021: 'VALUE',\n 0x0022: 'TRUE',\n 0x0023: 'FALSE',\n 0x0024: 'AND',\n 0x0025: 'OR',\n 0x0026: 'NOT',\n 0x0027: 'MOD',\n 0x0028: 'DCOUNT',\n 0x0029: 'DSUM',\n 0x002A: 'DAVERAGE',\n 0x002B: 'DMIN',\n 0x002C: 'DMAX',\n 0x002D: 'DSTDEV',\n 0x002E: 'VAR',\n 0x002F: 'DVAR',\n 0x0030: 'TEXT',\n 0x0031: 'LINEST',\n 0x0032: 'TREND',\n 0x0033: 'LOGEST',\n 0x0034: 'GROWTH',\n 0x0035: 'GOTO',\n 0x0036: 'HALT',\n 0x0037: 'RETURN',\n 0x0038: 'PV',\n 0x0039: 'FV',\n 0x003A: 'NPER',\n 0x003B: 'PMT',\n 0x003C: 'RATE',\n 0x003D: 'MIRR',\n 0x003E: 'IRR',\n 0x003F: 'RAND',\n 0x0040: 'MATCH',\n 0x0041: 'DATE',\n 0x0042: 'TIME',\n 0x0043: 'DAY',\n 0x0044: 'MONTH',\n 0x0045: 'YEAR',\n 0x0046: 'WEEKDAY',\n 0x0047: 'HOUR',\n 0x0048: 'MINUTE',\n 0x0049: 'SECOND',\n 0x004A: 'NOW',\n 0x004B: 'AREAS',\n 0x004C: 'ROWS',\n 0x004D: 'COLUMNS',\n 0x004E: 'OFFSET',\n 0x004F: 'ABSREF',\n 0x0050: 'RELREF',\n 0x0051: 'ARGUMENT',\n 0x0052: 'SEARCH',\n 0x0053: 'TRANSPOSE',\n 0x0054: 'ERROR',\n 0x0055: 'STEP',\n 0x0056: 'TYPE',\n 0x0057: 'ECHO',\n 0x0058: 'SET.NAME',\n 0x0059: 'CALLER',\n 0x005A: 'DEREF',\n 0x005B: 'WINDOWS',\n 0x005C: 'SERIES',\n 0x005D: 'DOCUMENTS',\n 0x005E: 'ACTIVE.CELL',\n 0x005F: 'SELECTION',\n 0x0060: 'RESULT',\n 0x0061: 'ATAN2',\n 0x0062: 'ASIN',\n 0x0063: 'ACOS',\n 0x0064: 'CHOOSE',\n 0x0065: 'HLOOKUP',\n 0x0066: 'VLOOKUP',\n 0x0067: 'LINKS',\n 0x0068: 'INPUT',\n 0x0069: 'ISREF',\n 0x006A: 'GET.FORMULA',\n 0x006B: 'GET.NAME',\n 0x006C: 'SET.VALUE',\n 0x006D: 'LOG',\n 0x006E: 'EXEC',\n 0x006F: 'CHAR',\n 0x0070: 'LOWER',\n 0x0071: 'UPPER',\n 0x0072: 'PROPER',\n 0x0073: 'LEFT',\n 0x0074: 'RIGHT',\n 0x0075: 'EXACT',\n 0x0076: 'TRIM',\n 0x0077: 'REPLACE',\n 0x0078: 'SUBSTITUTE',\n 0x0079: 'CODE',\n 0x007A: 'NAMES',\n 0x007B: 'DIRECTORY',\n 0x007C: 'FIND',\n 0x007D: 'CELL',\n 0x007E: 'ISERR',\n 0x007F: 'ISTEXT',\n 0x0080: 'ISNUMBER',\n 0x0081: 'ISBLANK',\n 0x0082: 'T',\n 0x0083: 'N',\n 0x0084: 'FOPEN',\n 0x0085: 'FCLOSE',\n 0x0086: 'FSIZE',\n 0x0087: 'FREADLN',\n 0x0088: 'FREAD',\n 0x0089: 'FWRITELN',\n 0x008A: 'FWRITE',\n 0x008B: 'FPOS',\n 0x008C: 'DATEVALUE',\n 0x008D: 'TIMEVALUE',\n 0x008E: 'SLN',\n 0x008F: 'SYD',\n 0x0090: 'DDB',\n 0x0091: 'GET.DEF',\n 0x0092: 'REFTEXT',\n 0x0093: 'TEXTREF',\n 0x0094: 'INDIRECT',\n 0x0095: 'REGISTER',\n 0x0096: 'CALL',\n 0x0097: 'ADD.BAR',\n 0x0098: 'ADD.MENU',\n 0x0099: 'ADD.COMMAND',\n 0x009A: 'ENABLE.COMMAND',\n 0x009B: 'CHECK.COMMAND',\n 0x009C: 'RENAME.COMMAND',\n 0x009D: 'SHOW.BAR',\n 0x009E: 'DELETE.MENU',\n 0x009F: 'DELETE.COMMAND',\n 0x00A0: 'GET.CHART.ITEM',\n 0x00A1: 'DIALOG.BOX',\n 0x00A2: 'CLEAN',\n 0x00A3: 'MDETERM',\n 0x00A4: 'MINVERSE',\n 0x00A5: 'MMULT',\n 0x00A6: 'FILES',\n 0x00A7: 'IPMT',\n 0x00A8: 'PPMT',\n 0x00A9: 'COUNTA',\n 0x00AA: 'CANCEL.KEY',\n 0x00AB: 'FOR',\n 0x00AC: 'WHILE',\n 0x00AD: 'BREAK',\n 0x00AE: 'NEXT',\n 0x00AF: 'INITIATE',\n 0x00B0: 'REQUEST',\n 0x00B1: 'POKE',\n 0x00B2: 'EXECUTE',\n 0x00B3: 'TERMINATE',\n 0x00B4: 'RESTART',\n 0x00B5: 'HELP',\n 0x00B6: 'GET.BAR',\n 0x00B7: 'PRODUCT',\n 0x00B8: 'FACT',\n 0x00B9: 'GET.CELL',\n 0x00BA: 'GET.WORKSPACE',\n 0x00BB: 'GET.WINDOW',\n 0x00BC: 'GET.DOCUMENT',\n 0x00BD: 'DPRODUCT',\n 0x00BE: 'ISNONTEXT',\n 0x00BF: 'GET.NOTE',\n 0x00C0: 'NOTE',\n 0x00C1: 'STDEVP',\n 0x00C2: 'VARP',\n 0x00C3: 'DSTDEVP',\n 0x00C4: 'DVARP',\n 0x00C5: 'TRUNC',\n 0x00C6: 'ISLOGICAL',\n 0x00C7: 'DCOUNTA',\n 0x00C8: 'DELETE.BAR',\n 0x00C9: 'UNREGISTER',\n 0x00CC: 'USDOLLAR',\n 0x00CD: 'FINDB',\n 0x00CE: 'SEARCHB',\n 0x00CF: 'REPLACEB',\n 0x00D0: 'LEFTB',\n 0x00D1: 'RIGHTB',\n 0x00D2: 'MIDB',\n 0x00D3: 'LENB',\n 0x00D4: 'ROUNDUP',\n 0x00D5: 'ROUNDDOWN',\n 0x00D6: 'ASC',\n 0x00D7: 'DBCS',\n 0x00D8: 'RANK',\n 0x00DB: 'ADDRESS',\n 0x00DC: 'DAYS360',\n 0x00DD: 'TODAY',\n 0x00DE: 'VDB',\n 0x00DF: 'ELSE',\n 0x00E0: 'ELSE.IF',\n 0x00E1: 'END.IF',\n 0x00E2: 'FOR.CELL',\n 0x00E3: 'MEDIAN',\n 0x00E4: 'SUMPRODUCT',\n 0x00E5: 'SINH',\n 0x00E6: 'COSH',\n 0x00E7: 'TANH',\n 0x00E8: 'ASINH',\n 0x00E9: 'ACOSH',\n 0x00EA: 'ATANH',\n 0x00EB: 'DGET',\n 0x00EC: 'CREATE.OBJECT',\n 0x00ED: 'VOLATILE',\n 0x00EE: 'LAST.ERROR',\n 0x00EF: 'CUSTOM.UNDO',\n 0x00F0: 'CUSTOM.REPEAT',\n 0x00F1: 'FORMULA.CONVERT',\n 0x00F2: 'GET.LINK.INFO',\n 0x00F3: 'TEXT.BOX',\n 0x00F4: 'INFO',\n 0x00F5: 'GROUP',\n 0x00F6: 'GET.OBJECT',\n 0x00F7: 'DB',\n 0x00F8: 'PAUSE',\n 0x00FB: 'RESUME',\n 0x00FC: 'FREQUENCY',\n 0x00FD: 'ADD.TOOLBAR',\n 0x00FE: 'DELETE.TOOLBAR',\n 0x00FF: 'User',\n 0x0100: 'RESET.TOOLBAR',\n 0x0101: 'EVALUATE',\n 0x0102: 'GET.TOOLBAR',\n 0x0103: 'GET.TOOL',\n 0x0104: 'SPELLING.CHECK',\n 0x0105: 'ERROR.TYPE',\n 0x0106: 'APP.TITLE',\n 0x0107: 'WINDOW.TITLE',\n 0x0108: 'SAVE.TOOLBAR',\n 0x0109: 'ENABLE.TOOL',\n 0x010A: 'PRESS.TOOL',\n 0x010B: 'REGISTER.ID',\n 0x010C: 'GET.WORKBOOK',\n 0x010D: 'AVEDEV',\n 0x010E: 'BETADIST',\n 0x010F: 'GAMMALN',\n 0x0110: 'BETAINV',\n 0x0111: 'BINOMDIST',\n 0x0112: 'CHIDIST',\n 0x0113: 'CHIINV',\n 0x0114: 'COMBIN',\n 0x0115: 'CONFIDENCE',\n 0x0116: 'CRITBINOM',\n 0x0117: 'EVEN',\n 0x0118: 'EXPONDIST',\n 0x0119: 'FDIST',\n 0x011A: 'FINV',\n 0x011B: 'FISHER',\n 0x011C: 'FISHERINV',\n 0x011D: 'FLOOR',\n 0x011E: 'GAMMADIST',\n 0x011F: 'GAMMAINV',\n 0x0120: 'CEILING',\n 0x0121: 'HYPGEOMDIST',\n 0x0122: 'LOGNORMDIST',\n 0x0123: 'LOGINV',\n 0x0124: 'NEGBINOMDIST',\n 0x0125: 'NORMDIST',\n 0x0126: 'NORMSDIST',\n 0x0127: 'NORMINV',\n 0x0128: 'NORMSINV',\n 0x0129: 'STANDARDIZE',\n 0x012A: 'ODD',\n 0x012B: 'PERMUT',\n 0x012C: 'POISSON',\n 0x012D: 'TDIST',\n 0x012E: 'WEIBULL',\n 0x012F: 'SUMXMY2',\n 0x0130: 'SUMX2MY2',\n 0x0131: 'SUMX2PY2',\n 0x0132: 'CHITEST',\n 0x0133: 'CORREL',\n 0x0134: 'COVAR',\n 0x0135: 'FORECAST',\n 0x0136: 'FTEST',\n 0x0137: 'INTERCEPT',\n 0x0138: 'PEARSON',\n 0x0139: 'RSQ',\n 0x013A: 'STEYX',\n 0x013B: 'SLOPE',\n 0x013C: 'TTEST',\n 0x013D: 'PROB',\n 0x013E: 'DEVSQ',\n 0x013F: 'GEOMEAN',\n 0x0140: 'HARMEAN',\n 0x0141: 'SUMSQ',\n 0x0142: 'KURT',\n 0x0143: 'SKEW',\n 0x0144: 'ZTEST',\n 0x0145: 'LARGE',\n 0x0146: 'SMALL',\n 0x0147: 'QUARTILE',\n 0x0148: 'PERCENTILE',\n 0x0149: 'PERCENTRANK',\n 0x014A: 'MODE',\n 0x014B: 'TRIMMEAN',\n 0x014C: 'TINV',\n 0x014E: 'MOVIE.COMMAND',\n 0x014F: 'GET.MOVIE',\n 0x0150: 'CONCATENATE',\n 0x0151: 'POWER',\n 0x0152: 'PIVOT.ADD.DATA',\n 0x0153: 'GET.PIVOT.TABLE',\n 0x0154: 'GET.PIVOT.FIELD',\n 0x0155: 'GET.PIVOT.ITEM',\n 0x0156: 'RADIANS',\n 0x0157: 'DEGREES',\n 0x0158: 'SUBTOTAL',\n 0x0159: 'SUMIF',\n 0x015A: 'COUNTIF',\n 0x015B: 'COUNTBLANK',\n 0x015C: 'SCENARIO.GET',\n 0x015D: 'OPTIONS.LISTS.GET',\n 0x015E: 'ISPMT',\n 0x015F: 'DATEDIF',\n 0x0160: 'DATESTRING',\n 0x0161: 'NUMBERSTRING',\n 0x0162: 'ROMAN',\n 0x0163: 'OPEN.DIALOG',\n 0x0164: 'SAVE.DIALOG',\n 0x0165: 'VIEW.GET',\n 0x0166: 'GETPIVOTDATA',\n 0x0167: 'HYPERLINK',\n 0x0168: 'PHONETIC',\n 0x0169: 'AVERAGEA',\n 0x016A: 'MAXA',\n 0x016B: 'MINA',\n 0x016C: 'STDEVPA',\n 0x016D: 'VARPA',\n 0x016E: 'STDEVA',\n 0x016F: 'VARA',\n 0x0170: 'BAHTTEXT',\n 0x0171: 'THAIDAYOFWEEK',\n 0x0172: 'THAIDIGIT',\n 0x0173: 'THAIMONTHOFYEAR',\n 0x0174: 'THAINUMSOUND',\n 0x0175: 'THAINUMSTRING',\n 0x0176: 'THAISTRINGLENGTH',\n 0x0177: 'ISTHAIDIGIT',\n 0x0178: 'ROUNDBAHTDOWN',\n 0x0179: 'ROUNDBAHTUP',\n 0x017A: 'THAIYEAR',\n 0x017B: 'RTD',\n 0x017C: 'CUBEVALUE',\n 0x017D: 'CUBEMEMBER',\n 0x017E: 'CUBEMEMBERPROPERTY',\n 0x017F: 'CUBERANKEDMEMBER',\n 0x0180: 'HEX2BIN',\n 0x0181: 'HEX2DEC',\n 0x0182: 'HEX2OCT',\n 0x0183: 'DEC2BIN',\n 0x0184: 'DEC2HEX',\n 0x0185: 'DEC2OCT',\n 0x0186: 'OCT2BIN',\n 0x0187: 'OCT2HEX',\n 0x0188: 'OCT2DEC',\n 0x0189: 'BIN2DEC',\n 0x018A: 'BIN2OCT',\n 0x018B: 'BIN2HEX',\n 0x018C: 'IMSUB',\n 0x018D: 'IMDIV',\n 0x018E: 'IMPOWER',\n 0x018F: 'IMABS',\n 0x0190: 'IMSQRT',\n 0x0191: 'IMLN',\n 0x0192: 'IMLOG2',\n 0x0193: 'IMLOG10',\n 0x0194: 'IMSIN',\n 0x0195: 'IMCOS',\n 0x0196: 'IMEXP',\n 0x0197: 'IMARGUMENT',\n 0x0198: 'IMCONJUGATE',\n 0x0199: 'IMAGINARY',\n 0x019A: 'IMREAL',\n 0x019B: 'COMPLEX',\n 0x019C: 'IMSUM',\n 0x019D: 'IMPRODUCT',\n 0x019E: 'SERIESSUM',\n 0x019F: 'FACTDOUBLE',\n 0x01A0: 'SQRTPI',\n 0x01A1: 'QUOTIENT',\n 0x01A2: 'DELTA',\n 0x01A3: 'GESTEP',\n 0x01A4: 'ISEVEN',\n 0x01A5: 'ISODD',\n 0x01A6: 'MROUND',\n 0x01A7: 'ERF',\n 0x01A8: 'ERFC',\n 0x01A9: 'BESSELJ',\n 0x01AA: 'BESSELK',\n 0x01AB: 'BESSELY',\n 0x01AC: 'BESSELI',\n 0x01AD: 'XIRR',\n 0x01AE: 'XNPV',\n 0x01AF: 'PRICEMAT',\n 0x01B0: 'YIELDMAT',\n 0x01B1: 'INTRATE',\n 0x01B2: 'RECEIVED',\n 0x01B3: 'DISC',\n 0x01B4: 'PRICEDISC',\n 0x01B5: 'YIELDDISC',\n 0x01B6: 'TBILLEQ',\n 0x01B7: 'TBILLPRICE',\n 0x01B8: 'TBILLYIELD',\n 0x01B9: 'PRICE',\n 0x01BA: 'YIELD',\n 0x01BB: 'DOLLARDE',\n 0x01BC: 'DOLLARFR',\n 0x01BD: 'NOMINAL',\n 0x01BE: 'EFFECT',\n 0x01BF: 'CUMPRINC',\n 0x01C0: 'CUMIPMT',\n 0x01C1: 'EDATE',\n 0x01C2: 'EOMONTH',\n 0x01C3: 'YEARFRAC',\n 0x01C4: 'COUPDAYBS',\n 0x01C5: 'COUPDAYS',\n 0x01C6: 'COUPDAYSNC',\n 0x01C7: 'COUPNCD',\n 0x01C8: 'COUPNUM',\n 0x01C9: 'COUPPCD',\n 0x01CA: 'DURATION',\n 0x01CB: 'MDURATION',\n 0x01CC: 'ODDLPRICE',\n 0x01CD: 'ODDLYIELD',\n 0x01CE: 'ODDFPRICE',\n 0x01CF: 'ODDFYIELD',\n 0x01D0: 'RANDBETWEEN',\n 0x01D1: 'WEEKNUM',\n 0x01D2: 'AMORDEGRC',\n 0x01D3: 'AMORLINC',\n 0x01D4: 'CONVERT',\n 0x02D4: 'SHEETJS',\n 0x01D5: 'ACCRINT',\n 0x01D6: 'ACCRINTM',\n 0x01D7: 'WORKDAY',\n 0x01D8: 'NETWORKDAYS',\n 0x01D9: 'GCD',\n 0x01DA: 'MULTINOMIAL',\n 0x01DB: 'LCM',\n 0x01DC: 'FVSCHEDULE',\n 0x01DD: 'CUBEKPIMEMBER',\n 0x01DE: 'CUBESET',\n 0x01DF: 'CUBESETCOUNT',\n 0x01E0: 'IFERROR',\n 0x01E1: 'COUNTIFS',\n 0x01E2: 'SUMIFS',\n 0x01E3: 'AVERAGEIF',\n 0x01E4: 'AVERAGEIFS'\n };\n var FtabArgc = {\n 0x0002: 1,\n\n /* ISNA */\n 0x0003: 1,\n\n /* ISERROR */\n 0x000A: 0,\n\n /* NA */\n 0x000F: 1,\n\n /* SIN */\n 0x0010: 1,\n\n /* COS */\n 0x0011: 1,\n\n /* TAN */\n 0x0012: 1,\n\n /* ATAN */\n 0x0013: 0,\n\n /* PI */\n 0x0014: 1,\n\n /* SQRT */\n 0x0015: 1,\n\n /* EXP */\n 0x0016: 1,\n\n /* LN */\n 0x0017: 1,\n\n /* LOG10 */\n 0x0018: 1,\n\n /* ABS */\n 0x0019: 1,\n\n /* INT */\n 0x001A: 1,\n\n /* SIGN */\n 0x001B: 2,\n\n /* ROUND */\n 0x001E: 2,\n\n /* REPT */\n 0x001F: 3,\n\n /* MID */\n 0x0020: 1,\n\n /* LEN */\n 0x0021: 1,\n\n /* VALUE */\n 0x0022: 0,\n\n /* TRUE */\n 0x0023: 0,\n\n /* FALSE */\n 0x0026: 1,\n\n /* NOT */\n 0x0027: 2,\n\n /* MOD */\n 0x0028: 3,\n\n /* DCOUNT */\n 0x0029: 3,\n\n /* DSUM */\n 0x002A: 3,\n\n /* DAVERAGE */\n 0x002B: 3,\n\n /* DMIN */\n 0x002C: 3,\n\n /* DMAX */\n 0x002D: 3,\n\n /* DSTDEV */\n 0x002F: 3,\n\n /* DVAR */\n 0x0030: 2,\n\n /* TEXT */\n 0x0035: 1,\n\n /* GOTO */\n 0x003D: 3,\n\n /* MIRR */\n 0x003F: 0,\n\n /* RAND */\n 0x0041: 3,\n\n /* DATE */\n 0x0042: 3,\n\n /* TIME */\n 0x0043: 1,\n\n /* DAY */\n 0x0044: 1,\n\n /* MONTH */\n 0x0045: 1,\n\n /* YEAR */\n 0x0046: 1,\n\n /* WEEKDAY */\n 0x0047: 1,\n\n /* HOUR */\n 0x0048: 1,\n\n /* MINUTE */\n 0x0049: 1,\n\n /* SECOND */\n 0x004A: 0,\n\n /* NOW */\n 0x004B: 1,\n\n /* AREAS */\n 0x004C: 1,\n\n /* ROWS */\n 0x004D: 1,\n\n /* COLUMNS */\n 0x004F: 2,\n\n /* ABSREF */\n 0x0050: 2,\n\n /* RELREF */\n 0x0053: 1,\n\n /* TRANSPOSE */\n 0x0055: 0,\n\n /* STEP */\n 0x0056: 1,\n\n /* TYPE */\n 0x0059: 0,\n\n /* CALLER */\n 0x005A: 1,\n\n /* DEREF */\n 0x005E: 0,\n\n /* ACTIVE.CELL */\n 0x005F: 0,\n\n /* SELECTION */\n 0x0061: 2,\n\n /* ATAN2 */\n 0x0062: 1,\n\n /* ASIN */\n 0x0063: 1,\n\n /* ACOS */\n 0x0065: 3,\n\n /* HLOOKUP */\n 0x0066: 3,\n\n /* VLOOKUP */\n 0x0069: 1,\n\n /* ISREF */\n 0x006A: 1,\n\n /* GET.FORMULA */\n 0x006C: 2,\n\n /* SET.VALUE */\n 0x006F: 1,\n\n /* CHAR */\n 0x0070: 1,\n\n /* LOWER */\n 0x0071: 1,\n\n /* UPPER */\n 0x0072: 1,\n\n /* PROPER */\n 0x0075: 2,\n\n /* EXACT */\n 0x0076: 1,\n\n /* TRIM */\n 0x0077: 4,\n\n /* REPLACE */\n 0x0079: 1,\n\n /* CODE */\n 0x007E: 1,\n\n /* ISERR */\n 0x007F: 1,\n\n /* ISTEXT */\n 0x0080: 1,\n\n /* ISNUMBER */\n 0x0081: 1,\n\n /* ISBLANK */\n 0x0082: 1,\n\n /* T */\n 0x0083: 1,\n\n /* N */\n 0x0085: 1,\n\n /* FCLOSE */\n 0x0086: 1,\n\n /* FSIZE */\n 0x0087: 1,\n\n /* FREADLN */\n 0x0088: 2,\n\n /* FREAD */\n 0x0089: 2,\n\n /* FWRITELN */\n 0x008A: 2,\n\n /* FWRITE */\n 0x008C: 1,\n\n /* DATEVALUE */\n 0x008D: 1,\n\n /* TIMEVALUE */\n 0x008E: 3,\n\n /* SLN */\n 0x008F: 4,\n\n /* SYD */\n 0x0090: 4,\n\n /* DDB */\n 0x00A1: 1,\n\n /* DIALOG.BOX */\n 0x00A2: 1,\n\n /* CLEAN */\n 0x00A3: 1,\n\n /* MDETERM */\n 0x00A4: 1,\n\n /* MINVERSE */\n 0x00A5: 2,\n\n /* MMULT */\n 0x00AC: 1,\n\n /* WHILE */\n 0x00AF: 2,\n\n /* INITIATE */\n 0x00B0: 2,\n\n /* REQUEST */\n 0x00B1: 3,\n\n /* POKE */\n 0x00B2: 2,\n\n /* EXECUTE */\n 0x00B3: 1,\n\n /* TERMINATE */\n 0x00B8: 1,\n\n /* FACT */\n 0x00BA: 1,\n\n /* GET.WORKSPACE */\n 0x00BD: 3,\n\n /* DPRODUCT */\n 0x00BE: 1,\n\n /* ISNONTEXT */\n 0x00C3: 3,\n\n /* DSTDEVP */\n 0x00C4: 3,\n\n /* DVARP */\n 0x00C5: 1,\n\n /* TRUNC */\n 0x00C6: 1,\n\n /* ISLOGICAL */\n 0x00C7: 3,\n\n /* DCOUNTA */\n 0x00C9: 1,\n\n /* UNREGISTER */\n 0x00CF: 4,\n\n /* REPLACEB */\n 0x00D2: 3,\n\n /* MIDB */\n 0x00D3: 1,\n\n /* LENB */\n 0x00D4: 2,\n\n /* ROUNDUP */\n 0x00D5: 2,\n\n /* ROUNDDOWN */\n 0x00D6: 1,\n\n /* ASC */\n 0x00D7: 1,\n\n /* DBCS */\n 0x00E1: 0,\n\n /* END.IF */\n 0x00E5: 1,\n\n /* SINH */\n 0x00E6: 1,\n\n /* COSH */\n 0x00E7: 1,\n\n /* TANH */\n 0x00E8: 1,\n\n /* ASINH */\n 0x00E9: 1,\n\n /* ACOSH */\n 0x00EA: 1,\n\n /* ATANH */\n 0x00EB: 3,\n\n /* DGET */\n 0x00F4: 1,\n\n /* INFO */\n 0x00F7: 4,\n\n /* DB */\n 0x00FC: 2,\n\n /* FREQUENCY */\n 0x0101: 1,\n\n /* EVALUATE */\n 0x0105: 1,\n\n /* ERROR.TYPE */\n 0x010F: 1,\n\n /* GAMMALN */\n 0x0111: 4,\n\n /* BINOMDIST */\n 0x0112: 2,\n\n /* CHIDIST */\n 0x0113: 2,\n\n /* CHIINV */\n 0x0114: 2,\n\n /* COMBIN */\n 0x0115: 3,\n\n /* CONFIDENCE */\n 0x0116: 3,\n\n /* CRITBINOM */\n 0x0117: 1,\n\n /* EVEN */\n 0x0118: 3,\n\n /* EXPONDIST */\n 0x0119: 3,\n\n /* FDIST */\n 0x011A: 3,\n\n /* FINV */\n 0x011B: 1,\n\n /* FISHER */\n 0x011C: 1,\n\n /* FISHERINV */\n 0x011D: 2,\n\n /* FLOOR */\n 0x011E: 4,\n\n /* GAMMADIST */\n 0x011F: 3,\n\n /* GAMMAINV */\n 0x0120: 2,\n\n /* CEILING */\n 0x0121: 4,\n\n /* HYPGEOMDIST */\n 0x0122: 3,\n\n /* LOGNORMDIST */\n 0x0123: 3,\n\n /* LOGINV */\n 0x0124: 3,\n\n /* NEGBINOMDIST */\n 0x0125: 4,\n\n /* NORMDIST */\n 0x0126: 1,\n\n /* NORMSDIST */\n 0x0127: 3,\n\n /* NORMINV */\n 0x0128: 1,\n\n /* NORMSINV */\n 0x0129: 3,\n\n /* STANDARDIZE */\n 0x012A: 1,\n\n /* ODD */\n 0x012B: 2,\n\n /* PERMUT */\n 0x012C: 3,\n\n /* POISSON */\n 0x012D: 3,\n\n /* TDIST */\n 0x012E: 4,\n\n /* WEIBULL */\n 0x012F: 2,\n\n /* SUMXMY2 */\n 0x0130: 2,\n\n /* SUMX2MY2 */\n 0x0131: 2,\n\n /* SUMX2PY2 */\n 0x0132: 2,\n\n /* CHITEST */\n 0x0133: 2,\n\n /* CORREL */\n 0x0134: 2,\n\n /* COVAR */\n 0x0135: 3,\n\n /* FORECAST */\n 0x0136: 2,\n\n /* FTEST */\n 0x0137: 2,\n\n /* INTERCEPT */\n 0x0138: 2,\n\n /* PEARSON */\n 0x0139: 2,\n\n /* RSQ */\n 0x013A: 2,\n\n /* STEYX */\n 0x013B: 2,\n\n /* SLOPE */\n 0x013C: 4,\n\n /* TTEST */\n 0x0145: 2,\n\n /* LARGE */\n 0x0146: 2,\n\n /* SMALL */\n 0x0147: 2,\n\n /* QUARTILE */\n 0x0148: 2,\n\n /* PERCENTILE */\n 0x014B: 2,\n\n /* TRIMMEAN */\n 0x014C: 2,\n\n /* TINV */\n 0x0151: 2,\n\n /* POWER */\n 0x0156: 1,\n\n /* RADIANS */\n 0x0157: 1,\n\n /* DEGREES */\n 0x015A: 2,\n\n /* COUNTIF */\n 0x015B: 1,\n\n /* COUNTBLANK */\n 0x015E: 4,\n\n /* ISPMT */\n 0x015F: 3,\n\n /* DATEDIF */\n 0x0160: 1,\n\n /* DATESTRING */\n 0x0161: 2,\n\n /* NUMBERSTRING */\n 0x0168: 1,\n\n /* PHONETIC */\n 0x0170: 1,\n\n /* BAHTTEXT */\n 0x0171: 1,\n\n /* THAIDAYOFWEEK */\n 0x0172: 1,\n\n /* THAIDIGIT */\n 0x0173: 1,\n\n /* THAIMONTHOFYEAR */\n 0x0174: 1,\n\n /* THAINUMSOUND */\n 0x0175: 1,\n\n /* THAINUMSTRING */\n 0x0176: 1,\n\n /* THAISTRINGLENGTH */\n 0x0177: 1,\n\n /* ISTHAIDIGIT */\n 0x0178: 1,\n\n /* ROUNDBAHTDOWN */\n 0x0179: 1,\n\n /* ROUNDBAHTUP */\n 0x017A: 1,\n\n /* THAIYEAR */\n 0x017E: 3,\n\n /* CUBEMEMBERPROPERTY */\n 0x0181: 1,\n\n /* HEX2DEC */\n 0x0188: 1,\n\n /* OCT2DEC */\n 0x0189: 1,\n\n /* BIN2DEC */\n 0x018C: 2,\n\n /* IMSUB */\n 0x018D: 2,\n\n /* IMDIV */\n 0x018E: 2,\n\n /* IMPOWER */\n 0x018F: 1,\n\n /* IMABS */\n 0x0190: 1,\n\n /* IMSQRT */\n 0x0191: 1,\n\n /* IMLN */\n 0x0192: 1,\n\n /* IMLOG2 */\n 0x0193: 1,\n\n /* IMLOG10 */\n 0x0194: 1,\n\n /* IMSIN */\n 0x0195: 1,\n\n /* IMCOS */\n 0x0196: 1,\n\n /* IMEXP */\n 0x0197: 1,\n\n /* IMARGUMENT */\n 0x0198: 1,\n\n /* IMCONJUGATE */\n 0x0199: 1,\n\n /* IMAGINARY */\n 0x019A: 1,\n\n /* IMREAL */\n 0x019E: 4,\n\n /* SERIESSUM */\n 0x019F: 1,\n\n /* FACTDOUBLE */\n 0x01A0: 1,\n\n /* SQRTPI */\n 0x01A1: 2,\n\n /* QUOTIENT */\n 0x01A4: 1,\n\n /* ISEVEN */\n 0x01A5: 1,\n\n /* ISODD */\n 0x01A6: 2,\n\n /* MROUND */\n 0x01A8: 1,\n\n /* ERFC */\n 0x01A9: 2,\n\n /* BESSELJ */\n 0x01AA: 2,\n\n /* BESSELK */\n 0x01AB: 2,\n\n /* BESSELY */\n 0x01AC: 2,\n\n /* BESSELI */\n 0x01AE: 3,\n\n /* XNPV */\n 0x01B6: 3,\n\n /* TBILLEQ */\n 0x01B7: 3,\n\n /* TBILLPRICE */\n 0x01B8: 3,\n\n /* TBILLYIELD */\n 0x01BB: 2,\n\n /* DOLLARDE */\n 0x01BC: 2,\n\n /* DOLLARFR */\n 0x01BD: 2,\n\n /* NOMINAL */\n 0x01BE: 2,\n\n /* EFFECT */\n 0x01BF: 6,\n\n /* CUMPRINC */\n 0x01C0: 6,\n\n /* CUMIPMT */\n 0x01C1: 2,\n\n /* EDATE */\n 0x01C2: 2,\n\n /* EOMONTH */\n 0x01D0: 2,\n\n /* RANDBETWEEN */\n 0x01D4: 3,\n\n /* CONVERT */\n 0x01DC: 2,\n\n /* FVSCHEDULE */\n 0x01DF: 1,\n\n /* CUBESETCOUNT */\n 0x01E0: 2,\n\n /* IFERROR */\n 0xFFFF: 0\n };\n /* [MS-XLSX] 2.2.3 Functions */\n\n /* [MS-XLSB] 2.5.97.10 Ftab */\n\n var XLSXFutureFunctions = {\n \"_xlfn.ACOT\": \"ACOT\",\n \"_xlfn.ACOTH\": \"ACOTH\",\n \"_xlfn.AGGREGATE\": \"AGGREGATE\",\n \"_xlfn.ARABIC\": \"ARABIC\",\n \"_xlfn.AVERAGEIF\": \"AVERAGEIF\",\n \"_xlfn.AVERAGEIFS\": \"AVERAGEIFS\",\n \"_xlfn.BASE\": \"BASE\",\n \"_xlfn.BETA.DIST\": \"BETA.DIST\",\n \"_xlfn.BETA.INV\": \"BETA.INV\",\n \"_xlfn.BINOM.DIST\": \"BINOM.DIST\",\n \"_xlfn.BINOM.DIST.RANGE\": \"BINOM.DIST.RANGE\",\n \"_xlfn.BINOM.INV\": \"BINOM.INV\",\n \"_xlfn.BITAND\": \"BITAND\",\n \"_xlfn.BITLSHIFT\": \"BITLSHIFT\",\n \"_xlfn.BITOR\": \"BITOR\",\n \"_xlfn.BITRSHIFT\": \"BITRSHIFT\",\n \"_xlfn.BITXOR\": \"BITXOR\",\n \"_xlfn.CEILING.MATH\": \"CEILING.MATH\",\n \"_xlfn.CEILING.PRECISE\": \"CEILING.PRECISE\",\n \"_xlfn.CHISQ.DIST\": \"CHISQ.DIST\",\n \"_xlfn.CHISQ.DIST.RT\": \"CHISQ.DIST.RT\",\n \"_xlfn.CHISQ.INV\": \"CHISQ.INV\",\n \"_xlfn.CHISQ.INV.RT\": \"CHISQ.INV.RT\",\n \"_xlfn.CHISQ.TEST\": \"CHISQ.TEST\",\n \"_xlfn.COMBINA\": \"COMBINA\",\n \"_xlfn.CONCAT\": \"CONCAT\",\n \"_xlfn.CONFIDENCE.NORM\": \"CONFIDENCE.NORM\",\n \"_xlfn.CONFIDENCE.T\": \"CONFIDENCE.T\",\n \"_xlfn.COT\": \"COT\",\n \"_xlfn.COTH\": \"COTH\",\n \"_xlfn.COUNTIFS\": \"COUNTIFS\",\n \"_xlfn.COVARIANCE.P\": \"COVARIANCE.P\",\n \"_xlfn.COVARIANCE.S\": \"COVARIANCE.S\",\n \"_xlfn.CSC\": \"CSC\",\n \"_xlfn.CSCH\": \"CSCH\",\n \"_xlfn.DAYS\": \"DAYS\",\n \"_xlfn.DECIMAL\": \"DECIMAL\",\n \"_xlfn.ECMA.CEILING\": \"ECMA.CEILING\",\n \"_xlfn.ERF.PRECISE\": \"ERF.PRECISE\",\n \"_xlfn.ERFC.PRECISE\": \"ERFC.PRECISE\",\n \"_xlfn.EXPON.DIST\": \"EXPON.DIST\",\n \"_xlfn.F.DIST\": \"F.DIST\",\n \"_xlfn.F.DIST.RT\": \"F.DIST.RT\",\n \"_xlfn.F.INV\": \"F.INV\",\n \"_xlfn.F.INV.RT\": \"F.INV.RT\",\n \"_xlfn.F.TEST\": \"F.TEST\",\n \"_xlfn.FILTERXML\": \"FILTERXML\",\n \"_xlfn.FLOOR.MATH\": \"FLOOR.MATH\",\n \"_xlfn.FLOOR.PRECISE\": \"FLOOR.PRECISE\",\n \"_xlfn.FORECAST.ETS\": \"FORECAST.ETS\",\n \"_xlfn.FORECAST.ETS.CONFINT\": \"FORECAST.ETS.CONFINT\",\n \"_xlfn.FORECAST.ETS.SEASONALITY\": \"FORECAST.ETS.SEASONALITY\",\n \"_xlfn.FORECAST.ETS.STAT\": \"FORECAST.ETS.STAT\",\n \"_xlfn.FORECAST.LINEAR\": \"FORECAST.LINEAR\",\n \"_xlfn.FORMULATEXT\": \"FORMULATEXT\",\n \"_xlfn.GAMMA\": \"GAMMA\",\n \"_xlfn.GAMMA.DIST\": \"GAMMA.DIST\",\n \"_xlfn.GAMMA.INV\": \"GAMMA.INV\",\n \"_xlfn.GAMMALN.PRECISE\": \"GAMMALN.PRECISE\",\n \"_xlfn.GAUSS\": \"GAUSS\",\n \"_xlfn.HYPGEOM.DIST\": \"HYPGEOM.DIST\",\n \"_xlfn.IFERROR\": \"IFERROR\",\n \"_xlfn.IFNA\": \"IFNA\",\n \"_xlfn.IFS\": \"IFS\",\n \"_xlfn.IMCOSH\": \"IMCOSH\",\n \"_xlfn.IMCOT\": \"IMCOT\",\n \"_xlfn.IMCSC\": \"IMCSC\",\n \"_xlfn.IMCSCH\": \"IMCSCH\",\n \"_xlfn.IMSEC\": \"IMSEC\",\n \"_xlfn.IMSECH\": \"IMSECH\",\n \"_xlfn.IMSINH\": \"IMSINH\",\n \"_xlfn.IMTAN\": \"IMTAN\",\n \"_xlfn.ISFORMULA\": \"ISFORMULA\",\n \"_xlfn.ISO.CEILING\": \"ISO.CEILING\",\n \"_xlfn.ISOWEEKNUM\": \"ISOWEEKNUM\",\n \"_xlfn.LOGNORM.DIST\": \"LOGNORM.DIST\",\n \"_xlfn.LOGNORM.INV\": \"LOGNORM.INV\",\n \"_xlfn.MAXIFS\": \"MAXIFS\",\n \"_xlfn.MINIFS\": \"MINIFS\",\n \"_xlfn.MODE.MULT\": \"MODE.MULT\",\n \"_xlfn.MODE.SNGL\": \"MODE.SNGL\",\n \"_xlfn.MUNIT\": \"MUNIT\",\n \"_xlfn.NEGBINOM.DIST\": \"NEGBINOM.DIST\",\n \"_xlfn.NETWORKDAYS.INTL\": \"NETWORKDAYS.INTL\",\n \"_xlfn.NIGBINOM\": \"NIGBINOM\",\n \"_xlfn.NORM.DIST\": \"NORM.DIST\",\n \"_xlfn.NORM.INV\": \"NORM.INV\",\n \"_xlfn.NORM.S.DIST\": \"NORM.S.DIST\",\n \"_xlfn.NORM.S.INV\": \"NORM.S.INV\",\n \"_xlfn.NUMBERVALUE\": \"NUMBERVALUE\",\n \"_xlfn.PDURATION\": \"PDURATION\",\n \"_xlfn.PERCENTILE.EXC\": \"PERCENTILE.EXC\",\n \"_xlfn.PERCENTILE.INC\": \"PERCENTILE.INC\",\n \"_xlfn.PERCENTRANK.EXC\": \"PERCENTRANK.EXC\",\n \"_xlfn.PERCENTRANK.INC\": \"PERCENTRANK.INC\",\n \"_xlfn.PERMUTATIONA\": \"PERMUTATIONA\",\n \"_xlfn.PHI\": \"PHI\",\n \"_xlfn.POISSON.DIST\": \"POISSON.DIST\",\n \"_xlfn.QUARTILE.EXC\": \"QUARTILE.EXC\",\n \"_xlfn.QUARTILE.INC\": \"QUARTILE.INC\",\n \"_xlfn.QUERYSTRING\": \"QUERYSTRING\",\n \"_xlfn.RANK.AVG\": \"RANK.AVG\",\n \"_xlfn.RANK.EQ\": \"RANK.EQ\",\n \"_xlfn.RRI\": \"RRI\",\n \"_xlfn.SEC\": \"SEC\",\n \"_xlfn.SECH\": \"SECH\",\n \"_xlfn.SHEET\": \"SHEET\",\n \"_xlfn.SHEETS\": \"SHEETS\",\n \"_xlfn.SKEW.P\": \"SKEW.P\",\n \"_xlfn.STDEV.P\": \"STDEV.P\",\n \"_xlfn.STDEV.S\": \"STDEV.S\",\n \"_xlfn.SUMIFS\": \"SUMIFS\",\n \"_xlfn.SWITCH\": \"SWITCH\",\n \"_xlfn.T.DIST\": \"T.DIST\",\n \"_xlfn.T.DIST.2T\": \"T.DIST.2T\",\n \"_xlfn.T.DIST.RT\": \"T.DIST.RT\",\n \"_xlfn.T.INV\": \"T.INV\",\n \"_xlfn.T.INV.2T\": \"T.INV.2T\",\n \"_xlfn.T.TEST\": \"T.TEST\",\n \"_xlfn.TEXTJOIN\": \"TEXTJOIN\",\n \"_xlfn.UNICHAR\": \"UNICHAR\",\n \"_xlfn.UNICODE\": \"UNICODE\",\n \"_xlfn.VAR.P\": \"VAR.P\",\n \"_xlfn.VAR.S\": \"VAR.S\",\n \"_xlfn.WEBSERVICE\": \"WEBSERVICE\",\n \"_xlfn.WEIBULL.DIST\": \"WEIBULL.DIST\",\n \"_xlfn.WORKDAY.INTL\": \"WORKDAY.INTL\",\n \"_xlfn.XOR\": \"XOR\",\n \"_xlfn.Z.TEST\": \"Z.TEST\"\n };\n /* Part 3 TODO: actually parse formulae */\n\n function ods_to_csf_formula(f) {\n if (f.slice(0, 3) == \"of:\") f = f.slice(3);\n /* 5.2 Basic Expressions */\n\n if (f.charCodeAt(0) == 61) {\n f = f.slice(1);\n if (f.charCodeAt(0) == 61) f = f.slice(1);\n }\n\n f = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n /* Part 3 Section 5.8 References */\n\n f = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function ($$, $1) {\n return $1.replace(/\\./g, \"\");\n });\n /* TODO: something other than this */\n\n f = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n return f.replace(/[;~]/g, \",\").replace(/\\|/g, \";\");\n }\n\n function csf_to_ods_formula(f) {\n var o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g, \":\");\n /* TODO: something other than this */\n\n return o.replace(/;/g, \"|\").replace(/,/g, \";\");\n }\n\n function ods_to_csf_3D(r) {\n var a = r.split(\":\");\n var s = a[0].split(\".\")[0];\n return [s, a[0].split(\".\")[1] + (a.length > 1 ? \":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0]) : \"\")];\n }\n\n function csf_to_ods_3D(r) {\n return r.replace(/\\./, \"!\");\n }\n\n var strs = {}; // shared strings\n\n var _ssfopts = {}; // spreadsheet formatting options\n\n RELS.WS = [\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\", \"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"];\n /*global Map */\n\n var browser_has_Map = typeof Map !== 'undefined';\n\n function get_sst_id(sst, str, rev) {\n var i = 0,\n len = sst.length;\n\n if (rev) {\n if (browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n var revarr = browser_has_Map ? rev.get(str) : rev[str];\n\n for (; i < revarr.length; ++i) {\n if (sst[revarr[i]].t === str) {\n sst.Count++;\n return revarr[i];\n }\n }\n }\n } else for (; i < len; ++i) {\n if (sst[i].t === str) {\n sst.Count++;\n return i;\n }\n }\n\n sst[len] = {\n t: str\n };\n sst.Count++;\n sst.Unique++;\n\n if (rev) {\n if (browser_has_Map) {\n if (!rev.has(str)) rev.set(str, []);\n rev.get(str).push(len);\n } else {\n if (!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n rev[str].push(len);\n }\n }\n\n return len;\n }\n\n function col_obj_w(C, col) {\n var p = {\n min: C + 1,\n max: C + 1\n };\n /* wch (chars), wpx (pixels) */\n\n var wch = -1;\n if (col.MDW) MDW = col.MDW;\n if (col.width != null) p.customWidth = 1;else if (col.wpx != null) wch = px2char(col.wpx);else if (col.wch != null) wch = col.wch;\n\n if (wch > -1) {\n p.width = char2width(wch);\n p.customWidth = 1;\n } else if (col.width != null) p.width = col.width;\n\n if (col.hidden) p.hidden = true;\n\n if (col.level != null) {\n p.outlineLevel = p.level = col.level;\n }\n\n return p;\n }\n\n function default_margins(margins, mode) {\n if (!margins) return;\n var defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n if (mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n if (margins.left == null) margins.left = defs[0];\n if (margins.right == null) margins.right = defs[1];\n if (margins.top == null) margins.top = defs[2];\n if (margins.bottom == null) margins.bottom = defs[3];\n if (margins.header == null) margins.header = defs[4];\n if (margins.footer == null) margins.footer = defs[5];\n }\n\n function get_cell_style(styles, cell, opts) {\n var z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n var i = 0x3c,\n len = styles.length;\n\n if (z == null && opts.ssf) {\n for (; i < 0x188; ++i) {\n if (opts.ssf[i] == null) {\n SSF.load(cell.z, i); // $FlowIgnore\n\n opts.ssf[i] = cell.z;\n opts.revssf[cell.z] = z = i;\n break;\n }\n }\n }\n\n for (i = 0; i != len; ++i) {\n if (styles[i].numFmtId === z) return i;\n }\n\n styles[len] = {\n numFmtId: z,\n fontId: 0,\n fillId: 0,\n borderId: 0,\n xfId: 0,\n applyNumberFormat: 1\n };\n return len;\n }\n\n function safe_format(p, fmtid, fillid, opts, themes, styles) {\n try {\n if (opts.cellNF) p.z = SSF._table[fmtid];\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (p.t === 'z' && !opts.cellStyles) return;\n if (p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n if ((!opts || opts.cellText !== false) && p.t !== 'z') try {\n if (SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || \"General\", fmtid);\n if (p.t === 'e') p.w = p.w || BErr[p.v];else if (fmtid === 0) {\n if (p.t === 'n') {\n if ((p.v | 0) === p.v) p.w = SSF._general_int(p.v);else p.w = SSF._general_num(p.v);\n } else if (p.t === 'd') {\n var dd = datenum(p.v);\n if ((dd | 0) === dd) p.w = SSF._general_int(dd);else p.w = SSF._general_num(dd);\n } else if (p.v === undefined) return \"\";else p.w = SSF._general(p.v, _ssfopts);\n } else if (p.t === 'd') p.w = SSF.format(fmtid, datenum(p.v), _ssfopts);else p.w = SSF.format(fmtid, p.v, _ssfopts);\n } catch (e) {\n if (opts.WTF) throw e;\n }\n if (!opts.cellStyles) return;\n if (fillid != null) try {\n p.s = styles.Fills[fillid];\n\n if (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n if (opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n }\n\n if (p.s.bgColor && p.s.bgColor.theme) {\n p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n if (opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n }\n } catch (e) {\n if (opts.WTF && styles.Fills) throw e;\n }\n }\n\n function check_ws(ws, sname, i) {\n if (ws && ws['!ref']) {\n var range = safe_decode_range(ws['!ref']);\n if (range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n }\n }\n\n function parse_ws_xml_dim(ws, s) {\n var d = safe_decode_range(s);\n if (d.s.r <= d.e.r && d.s.c <= d.e.c && d.s.r >= 0 && d.s.c >= 0) ws[\"!ref\"] = encode_range(d);\n }\n\n var mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\n var sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\n var hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\n var dimregex = /\"(\\w*:\\w*)\"/;\n var colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\n var afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\n var marginregex = /<(?:\\w:)?pageMargins[^>]*\\/>/g;\n var sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\n var sheetprregex2 = /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\n var svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n /* 18.3 Worksheets */\n\n function parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {\n if (!data) return data;\n if (!rels) rels = {\n '!id': {}\n };\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n /* 18.3.1.99 worksheet CT_Worksheet */\n\n var s = opts.dense ? [] : {};\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var data1 = \"\",\n data2 = \"\";\n var mtch = data.match(sheetdataregex);\n\n if (mtch) {\n data1 = data.slice(0, mtch.index);\n data2 = data.slice(mtch.index + mtch[0].length);\n } else data1 = data2 = data;\n /* 18.3.1.82 sheetPr CT_SheetPr */\n\n\n var sheetPr = data1.match(sheetprregex);\n if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);else if (sheetPr = data1.match(sheetprregex2)) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1] || \"\", s, wb, idx, styles, themes);\n /* 18.3.1.35 dimension CT_SheetDimension */\n\n var ridx = (data1.match(/<(?:\\w*:)?dimension/) || {\n index: -1\n }).index;\n\n if (ridx > 0) {\n var ref = data1.slice(ridx, ridx + 50).match(dimregex);\n if (ref) parse_ws_xml_dim(s, ref[1]);\n }\n /* 18.3.1.88 sheetViews CT_SheetViews */\n\n\n var svs = data1.match(svsregex);\n if (svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n /* 18.3.1.17 cols CT_Cols */\n\n var columns = [];\n\n if (opts.cellStyles) {\n /* 18.3.1.13 col CT_Col */\n var cols = data1.match(colregex);\n if (cols) parse_ws_xml_cols(columns, cols);\n }\n /* 18.3.1.80 sheetData CT_SheetData ? */\n\n\n if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n /* 18.3.1.2 autoFilter CT_AutoFilter */\n\n var afilter = data2.match(afregex);\n if (afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n /* 18.3.1.55 mergeCells CT_MergeCells */\n\n var merges = [];\n\n var _merge = data2.match(mergecregex);\n\n if (_merge) for (ridx = 0; ridx != _merge.length; ++ridx) {\n merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\") + 1));\n }\n /* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\n var hlink = data2.match(hlinkregex);\n if (hlink) parse_ws_xml_hlinks(s, hlink, rels);\n /* 18.3.1.62 pageMargins CT_PageMargins */\n\n var margins = data2.match(marginregex);\n if (margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n if (!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\n if (opts.sheetRows > 0 && s[\"!ref\"]) {\n var tmpref = safe_decode_range(s[\"!ref\"]);\n\n if (opts.sheetRows <= +tmpref.e.r) {\n tmpref.e.r = opts.sheetRows - 1;\n if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n s[\"!fullref\"] = s[\"!ref\"];\n s[\"!ref\"] = encode_range(tmpref);\n }\n }\n\n if (columns.length > 0) s[\"!cols\"] = columns;\n if (merges.length > 0) s[\"!merges\"] = merges;\n return s;\n }\n\n function write_ws_xml_merges(merges) {\n if (merges.length === 0) return \"\";\n var o = '';\n\n for (var i = 0; i != merges.length; ++i) {\n o += '';\n }\n\n return o + '';\n }\n /* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\n\n\n function parse_ws_xml_sheetpr(sheetPr, s, wb, idx) {\n var data = parsexmltag(sheetPr);\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n }\n\n function parse_ws_xml_sheetpr2(sheetPr, body, s, wb, idx, styles, themes) {\n parse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n }\n\n function write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n var needed = false;\n var props = {},\n payload = null;\n\n if (opts.bookType !== 'xlsx' && wb.vbaraw) {\n var cname = wb.SheetNames[idx];\n\n try {\n if (wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname;\n } catch (e) {}\n\n needed = true;\n props.codeName = utf8write(escapexml(cname));\n }\n\n if (ws && ws[\"!outline\"]) {\n var outlineprops = {\n summaryBelow: 1,\n summaryRight: 1\n };\n if (ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n if (ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n payload = (payload || \"\") + writextag('outlinePr', null, outlineprops);\n }\n\n if (!needed && !payload) return;\n o[o.length] = writextag('sheetPr', payload, props);\n }\n /* 18.3.1.85 sheetProtection CT_SheetProtection */\n\n\n var sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\n var sheetprot_deftrue = [\"formatColumns\", \"formatRows\", \"formatCells\", \"insertColumns\", \"insertRows\", \"insertHyperlinks\", \"deleteColumns\", \"deleteRows\", \"sort\", \"autoFilter\", \"pivotTables\"];\n\n function write_ws_xml_protection(sp) {\n // algorithmName, hashValue, saltValue, spinCount\n var o = {\n sheet: 1\n };\n sheetprot_deffalse.forEach(function (n) {\n if (sp[n] != null && sp[n]) o[n] = \"1\";\n });\n sheetprot_deftrue.forEach(function (n) {\n if (sp[n] != null && !sp[n]) o[n] = \"0\";\n });\n /* TODO: algorithm */\n\n if (sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n return writextag('sheetProtection', null, o);\n }\n\n function parse_ws_xml_hlinks(s, data, rels) {\n var dense = Array.isArray(s);\n\n for (var i = 0; i != data.length; ++i) {\n var val = parsexmltag(utf8read(data[i]), true);\n if (!val.ref) return;\n var rel = ((rels || {})['!id'] || [])[val.id];\n\n if (rel) {\n val.Target = rel.Target;\n if (val.location) val.Target += \"#\" + unescapexml(val.location);\n } else {\n val.Target = \"#\" + unescapexml(val.location);\n rel = {\n Target: val.Target,\n TargetMode: 'Internal'\n };\n }\n\n val.Rel = rel;\n\n if (val.tooltip) {\n val.Tooltip = val.tooltip;\n delete val.tooltip;\n }\n\n var rng = safe_decode_range(val.ref);\n\n for (var R = rng.s.r; R <= rng.e.r; ++R) {\n for (var C = rng.s.c; C <= rng.e.c; ++C) {\n var addr = encode_cell({\n c: C,\n r: R\n });\n\n if (dense) {\n if (!s[R]) s[R] = [];\n if (!s[R][C]) s[R][C] = {\n t: \"z\",\n v: undefined\n };\n s[R][C].l = val;\n } else {\n if (!s[addr]) s[addr] = {\n t: \"z\",\n v: undefined\n };\n s[addr].l = val;\n }\n }\n }\n }\n }\n\n function parse_ws_xml_margins(margin) {\n var o = {};\n [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function (k) {\n if (margin[k]) o[k] = parseFloat(margin[k]);\n });\n return o;\n }\n\n function write_ws_xml_margins(margin) {\n default_margins(margin);\n return writextag('pageMargins', null, margin);\n }\n\n function parse_ws_xml_cols(columns, cols) {\n var seencol = false;\n\n for (var coli = 0; coli != cols.length; ++coli) {\n var coll = parsexmltag(cols[coli], true);\n if (coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n var colm = parseInt(coll.min, 10) - 1,\n colM = parseInt(coll.max, 10) - 1;\n if (coll.outlineLevel) coll.level = +coll.outlineLevel || 0;\n delete coll.min;\n delete coll.max;\n coll.width = +coll.width;\n\n if (!seencol && coll.width) {\n seencol = true;\n find_mdw_colw(coll.width);\n }\n\n process_col(coll);\n\n while (colm <= colM) {\n columns[colm++] = dup(coll);\n }\n }\n }\n\n function write_ws_xml_cols(ws, cols) {\n var o = [\"\"],\n col;\n\n for (var i = 0; i != cols.length; ++i) {\n if (!(col = cols[i])) continue;\n o[o.length] = writextag('col', null, col_obj_w(i, col));\n }\n\n o[o.length] = \"\";\n return o.join(\"\");\n }\n\n function parse_ws_xml_autofilter(data) {\n var o = {\n ref: (data.match(/ref=\"([^\"]*)\"/) || [])[1]\n };\n return o;\n }\n\n function write_ws_xml_autofilter(data, ws, wb, idx) {\n var ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n if (!wb.Workbook) wb.Workbook = {\n Sheets: []\n };\n if (!wb.Workbook.Names) wb.Workbook.Names = [];\n var names = wb.Workbook.Names;\n var range = decode_range(ref);\n\n if (range.s.r == range.e.r) {\n range.e.r = decode_range(ws[\"!ref\"]).e.r;\n ref = encode_range(range);\n }\n\n for (var i = 0; i < names.length; ++i) {\n var name = names[i];\n if (name.Name != '_xlnm._FilterDatabase') continue;\n if (name.Sheet != idx) continue;\n name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n break;\n }\n\n if (i == names.length) names.push({\n Name: '_xlnm._FilterDatabase',\n Sheet: idx,\n Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n });\n return writextag(\"autoFilter\", null, {\n ref: ref\n });\n }\n /* 18.3.1.88 sheetViews CT_SheetViews */\n\n /* 18.3.1.87 sheetView CT_SheetView */\n\n\n var sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\n\n function parse_ws_xml_sheetviews(data, wb) {\n if (!wb.Views) wb.Views = [{}];\n (data.match(sviewregex) || []).forEach(function (r, i) {\n var tag = parsexmltag(r); // $FlowIgnore\n\n if (!wb.Views[i]) wb.Views[i] = {}; // $FlowIgnore\n\n if (+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale; // $FlowIgnore\n\n if (parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n });\n }\n\n function write_ws_xml_sheetviews(ws, opts, idx, wb) {\n var sview = {\n workbookViewId: \"0\"\n }; // $FlowIgnore\n\n if ((((wb || {}).Workbook || {}).Views || [])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n return writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n }\n\n function write_ws_xml_cell(cell, ref, ws, opts) {\n if (cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z') return \"\";\n var vv = \"\";\n var oldt = cell.t,\n oldv = cell.v;\n if (cell.t !== \"z\") switch (cell.t) {\n case 'b':\n vv = cell.v ? \"1\" : \"0\";\n break;\n\n case 'n':\n vv = '' + cell.v;\n break;\n\n case 'e':\n vv = BErr[cell.v];\n break;\n\n case 'd':\n if (opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();else {\n cell = dup(cell);\n cell.t = 'n';\n vv = '' + (cell.v = datenum(parseDate(cell.v)));\n }\n if (typeof cell.z === 'undefined') cell.z = SSF._table[14];\n break;\n\n default:\n vv = cell.v;\n break;\n }\n var v = writetag('v', escapexml(vv)),\n o = {\n r: ref\n };\n /* TODO: cell style */\n\n var os = get_cell_style(opts.cellXfs, cell, opts);\n if (os !== 0) o.s = os;\n\n switch (cell.t) {\n case 'n':\n break;\n\n case 'd':\n o.t = \"d\";\n break;\n\n case 'b':\n o.t = \"b\";\n break;\n\n case 'e':\n o.t = \"e\";\n break;\n\n case 'z':\n break;\n\n default:\n if (cell.v == null) {\n delete cell.t;\n break;\n }\n\n if (cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\n if (opts && opts.bookSST) {\n v = writetag('v', '' + get_sst_id(opts.Strings, cell.v, opts.revStrings));\n o.t = \"s\";\n break;\n }\n\n o.t = \"str\";\n break;\n }\n\n if (cell.t != oldt) {\n cell.t = oldt;\n cell.v = oldv;\n }\n\n if (typeof cell.f == \"string\" && cell.f) {\n var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {\n t: \"array\",\n ref: cell.F\n } : null;\n v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n }\n\n if (cell.l) ws['!links'].push([ref, cell.l]);\n if (cell.c) ws['!comments'].push([ref, cell.c]);\n return writextag('c', v, o);\n }\n\n var parse_ws_xml_data = function () {\n var cellregex = /<(?:\\w+:)?c[ \\/>]/,\n rowregex = /<\\/(?:\\w+:)?row>/;\n var rregex = /r=[\"']([^\"']*)[\"']/,\n isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n var refregex = /ref=[\"']([^\"']*)[\"']/;\n var match_v = matchtag(\"v\"),\n match_f = matchtag(\"f\");\n return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {\n var ri = 0,\n x = \"\",\n cells = [],\n cref = [],\n idx = 0,\n i = 0,\n cc = 0,\n d = \"\",\n p;\n var tag,\n tagr = 0,\n tagc = 0;\n var sstr, ftag;\n var fmtid = 0,\n fillid = 0;\n var do_format = Array.isArray(styles.CellXf),\n cf;\n var arrayf = [];\n var sharedf = [];\n var dense = Array.isArray(s);\n var rows = [],\n rowobj = {},\n rowrite = false;\n var sheetStubs = !!opts.sheetStubs;\n\n for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n x = marr[mt].trim();\n var xlen = x.length;\n if (xlen === 0) continue;\n /* 18.3.1.73 row CT_Row */\n\n var rstarti = 0;\n\n outa: for (ri = 0; ri < xlen; ++ri) {\n switch (\n /*x.charCodeAt(ri)*/\n x[ri]) {\n case \">\"\n /*62*/\n :\n if (\n /*x.charCodeAt(ri-1) != 47*/\n x[ri - 1] != \"/\") {\n ++ri;\n break outa;\n }\n\n if (opts && opts.cellStyles) {\n // TODO: avoid duplication\n tag = parsexmltag(x.slice(rstarti, ri), true);\n tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;\n tagc = -1;\n if (opts.sheetRows && opts.sheetRows < tagr) continue;\n rowobj = {};\n rowrite = false;\n\n if (tag.ht) {\n rowrite = true;\n rowobj.hpt = parseFloat(tag.ht);\n rowobj.hpx = pt2px(rowobj.hpt);\n }\n\n if (tag.hidden == \"1\") {\n rowrite = true;\n rowobj.hidden = true;\n }\n\n if (tag.outlineLevel != null) {\n rowrite = true;\n rowobj.level = +tag.outlineLevel;\n }\n\n if (rowrite) rows[tagr - 1] = rowobj;\n }\n\n break;\n\n case \"<\"\n /*60*/\n :\n rstarti = ri;\n break;\n }\n }\n\n if (rstarti >= ri) break;\n tag = parsexmltag(x.slice(rstarti, ri), true);\n tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;\n tagc = -1;\n if (opts.sheetRows && opts.sheetRows < tagr) continue;\n if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n if (opts && opts.cellStyles) {\n rowobj = {};\n rowrite = false;\n\n if (tag.ht) {\n rowrite = true;\n rowobj.hpt = parseFloat(tag.ht);\n rowobj.hpx = pt2px(rowobj.hpt);\n }\n\n if (tag.hidden == \"1\") {\n rowrite = true;\n rowobj.hidden = true;\n }\n\n if (tag.outlineLevel != null) {\n rowrite = true;\n rowobj.level = +tag.outlineLevel;\n }\n\n if (rowrite) rows[tagr - 1] = rowobj;\n }\n /* 18.3.1.4 c CT_Cell */\n\n\n cells = x.slice(ri).split(cellregex);\n\n for (var rslice = 0; rslice != cells.length; ++rslice) {\n if (cells[rslice].trim().charAt(0) != \"<\") break;\n }\n\n cells = cells.slice(rslice);\n\n for (ri = 0; ri != cells.length; ++ri) {\n x = cells[ri].trim();\n if (x.length === 0) continue;\n cref = x.match(rregex);\n idx = ri;\n i = 0;\n cc = 0;\n x = \"\" : \"\") + x;\n\n if (cref != null && cref.length === 2) {\n idx = 0;\n d = cref[1];\n\n for (i = 0; i != d.length; ++i) {\n if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n --idx;\n tagc = idx;\n } else ++tagc;\n\n for (i = 0; i != x.length; ++i) {\n if (x.charCodeAt(i) === 62) break;\n }\n\n ++i;\n tag = parsexmltag(x.slice(0, i), true);\n if (!tag.r) tag.r = encode_cell({\n r: tagr - 1,\n c: tagc\n });\n d = x.slice(i);\n p = {\n t: \"\"\n };\n if ((cref = d.match(match_v)) != null && cref[1] !== '') p.v = unescapexml(cref[1]);\n\n if (opts.cellFormula) {\n if ((cref = d.match(match_f)) != null && cref[1] !== '') {\n /* TODO: match against XLSXFutureFunctions */\n p.f = unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n if (!opts.xlfn) p.f = _xlfn(p.f);\n\n if (cref[0].indexOf('t=\"array\"') > -1) {\n p.F = (d.match(refregex) || [])[1];\n if (p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n } else if (cref[0].indexOf('t=\"shared\"') > -1) {\n // TODO: parse formula\n ftag = parsexmltag(cref[0]);\n\n var ___f = unescapexml(utf8read(cref[1]));\n\n if (!opts.xlfn) ___f = _xlfn(___f);\n sharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n }\n } else if (cref = d.match(/]*\\/>/)) {\n ftag = parsexmltag(cref[0]);\n if (sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]\n /*[0].ref*/\n , tag.r);\n }\n /* TODO: factor out contains logic */\n\n\n var _tag = decode_cell(tag.r);\n\n for (i = 0; i < arrayf.length; ++i) {\n if (_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r) if (_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c) p.F = arrayf[i][1];\n }\n }\n\n if (tag.t == null && p.v === undefined) {\n if (p.f || p.F) {\n p.v = 0;\n p.t = \"n\";\n } else if (!sheetStubs) continue;else p.t = \"z\";\n } else p.t = tag.t || \"n\";\n\n if (guess.s.c > tagc) guess.s.c = tagc;\n if (guess.e.c < tagc) guess.e.c = tagc;\n /* 18.18.11 t ST_CellType */\n\n switch (p.t) {\n case 'n':\n if (p.v == \"\" || p.v == null) {\n if (!sheetStubs) continue;\n p.t = 'z';\n } else p.v = parseFloat(p.v);\n\n break;\n\n case 's':\n if (typeof p.v == 'undefined') {\n if (!sheetStubs) continue;\n p.t = 'z';\n } else {\n sstr = strs[parseInt(p.v, 10)];\n p.v = sstr.t;\n p.r = sstr.r;\n if (opts.cellHTML) p.h = sstr.h;\n }\n\n break;\n\n case 'str':\n p.t = \"s\";\n p.v = p.v != null ? utf8read(p.v) : '';\n if (opts.cellHTML) p.h = escapehtml(p.v);\n break;\n\n case 'inlineStr':\n cref = d.match(isregex);\n p.t = 's';\n\n if (cref != null && (sstr = parse_si(cref[1]))) {\n p.v = sstr.t;\n if (opts.cellHTML) p.h = sstr.h;\n } else p.v = \"\";\n\n break;\n\n case 'b':\n p.v = parsexmlbool(p.v);\n break;\n\n case 'd':\n if (opts.cellDates) p.v = parseDate(p.v, 1);else {\n p.v = datenum(parseDate(p.v, 1));\n p.t = 'n';\n }\n break;\n\n /* error string in .w, number in .v */\n\n case 'e':\n if (!opts || opts.cellText !== false) p.w = p.v;\n p.v = RBErr[p.v];\n break;\n }\n /* formatting */\n\n\n fmtid = fillid = 0;\n cf = null;\n\n if (do_format && tag.s !== undefined) {\n cf = styles.CellXf[tag.s];\n\n if (cf != null) {\n if (cf.numFmtId != null) fmtid = cf.numFmtId;\n\n if (opts.cellStyles) {\n if (cf.fillId != null) fillid = cf.fillId;\n }\n }\n }\n\n safe_format(p, fmtid, fillid, opts, themes, styles);\n\n if (opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) {\n p.t = 'd';\n p.v = numdate(p.v);\n }\n\n if (dense) {\n var _r = decode_cell(tag.r);\n\n if (!s[_r.r]) s[_r.r] = [];\n s[_r.r][_r.c] = p;\n } else s[tag.r] = p;\n }\n }\n\n if (rows.length > 0) s['!rows'] = rows;\n };\n }();\n\n function write_ws_xml_data(ws, opts, idx, wb) {\n var o = [],\n r = [],\n range = safe_decode_range(ws['!ref']),\n cell = \"\",\n ref,\n rr = \"\",\n cols = [],\n R = 0,\n C = 0,\n rows = ws['!rows'];\n var dense = Array.isArray(ws);\n var params = {\n r: rr\n },\n row,\n height = -1;\n\n for (C = range.s.c; C <= range.e.c; ++C) {\n cols[C] = encode_col(C);\n }\n\n for (R = range.s.r; R <= range.e.r; ++R) {\n r = [];\n rr = encode_row(R);\n\n for (C = range.s.c; C <= range.e.c; ++C) {\n ref = cols[C] + rr;\n\n var _cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (_cell === undefined) continue;\n if ((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n }\n\n if (r.length > 0 || rows && rows[R]) {\n params = {\n r: rr\n };\n\n if (rows && rows[R]) {\n row = rows[R];\n if (row.hidden) params.hidden = 1;\n height = -1;\n if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n if (height > -1) {\n params.ht = height;\n params.customHeight = 1;\n }\n\n if (row.level) {\n params.outlineLevel = row.level;\n }\n }\n\n o[o.length] = writextag('row', r.join(\"\"), params);\n }\n }\n\n if (rows) for (; R < rows.length; ++R) {\n if (rows && rows[R]) {\n params = {\n r: R + 1\n };\n row = rows[R];\n if (row.hidden) params.hidden = 1;\n height = -1;\n if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n if (height > -1) {\n params.ht = height;\n params.customHeight = 1;\n }\n\n if (row.level) {\n params.outlineLevel = row.level;\n }\n\n o[o.length] = writextag('row', \"\", params);\n }\n }\n return o.join(\"\");\n }\n\n var WS_XML_ROOT = writextag('worksheet', null, {\n 'xmlns': XMLNS.main[0],\n 'xmlns:r': XMLNS.r\n });\n\n function write_ws_xml(idx, opts, wb, rels) {\n var o = [XML_HEADER, WS_XML_ROOT];\n var s = wb.SheetNames[idx],\n sidx = 0,\n rdata = \"\";\n var ws = wb.Sheets[s];\n if (ws == null) ws = {};\n var ref = ws['!ref'] || 'A1';\n var range = safe_decode_range(ref);\n\n if (range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n if (opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n range.e.c = Math.min(range.e.c, 0x3FFF);\n range.e.r = Math.min(range.e.c, 0xFFFFF);\n ref = encode_range(range);\n }\n\n if (!rels) rels = {};\n ws['!comments'] = [];\n var _drawing = [];\n write_ws_xml_sheetpr(ws, wb, idx, opts, o);\n o[o.length] = writextag('dimension', null, {\n 'ref': ref\n });\n o[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n /* TODO: store in WB, process styles */\n\n if (opts.sheetFormat) o[o.length] = writextag('sheetFormatPr', null, {\n defaultRowHeight: opts.sheetFormat.defaultRowHeight || '16',\n baseColWidth: opts.sheetFormat.baseColWidth || '10',\n outlineLevelRow: opts.sheetFormat.outlineLevelRow || '7'\n });\n if (ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = write_ws_xml_cols(ws, ws['!cols']);\n o[sidx = o.length] = '';\n ws['!links'] = [];\n\n if (ws['!ref'] != null) {\n rdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n if (rdata.length > 0) o[o.length] = rdata;\n }\n\n if (o.length > sidx + 1) {\n o[o.length] = '';\n o[sidx] = o[sidx].replace(\"/>\", \">\");\n }\n /* sheetCalcPr */\n\n\n if (ws['!protect'] != null) o[o.length] = write_ws_xml_protection(ws['!protect']);\n /* protectedRanges */\n\n /* scenarios */\n\n if (ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n /* sortState */\n\n /* dataConsolidate */\n\n /* customSheetViews */\n\n if (ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = write_ws_xml_merges(ws['!merges']);\n /* phoneticPr */\n\n /* conditionalFormatting */\n\n /* dataValidations */\n\n var relc = -1,\n rel,\n rId = -1;\n\n if (ws['!links'].length > 0) {\n o[o.length] = \"\";\n ws['!links'].forEach(function (l) {\n if (!l[1].Target) return;\n rel = {\n \"ref\": l[0]\n };\n\n if (l[1].Target.charAt(0) != \"#\") {\n rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n rel[\"r:id\"] = \"rId\" + rId;\n }\n\n if ((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc + 1));\n if (l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n o[o.length] = writextag(\"hyperlink\", null, rel);\n });\n o[o.length] = \"\";\n }\n\n delete ws['!links'];\n /* printOptions */\n\n if (ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n /* pageSetup */\n\n /* headerFooter */\n\n /* rowBreaks */\n\n /* colBreaks */\n\n /* customProperties */\n\n /* cellWatches */\n\n if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {\n numberStoredAsText: 1,\n sqref: ref\n }));\n /* smartTags */\n\n if (_drawing.length > 0) {\n rId = add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n o[o.length] = writextag(\"drawing\", null, {\n \"r:id\": \"rId\" + rId\n });\n ws['!drawing'] = _drawing;\n }\n\n if (ws['!comments'].length > 0) {\n rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n o[o.length] = writextag(\"legacyDrawing\", null, {\n \"r:id\": \"rId\" + rId\n });\n ws['!legacy'] = rId;\n }\n /* legacyDrawingHF */\n\n /* picture */\n\n /* oleObjects */\n\n /* controls */\n\n /* webPublishItems */\n\n /* tableParts */\n\n /* extLst */\n\n\n if (o.length > 1) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.726 BrtRowHdr */\n\n\n function parse_BrtRowHdr(data, length) {\n var z = {};\n var tgt = data.l + length;\n z.r = data.read_shift(4);\n data.l += 4; // TODO: ixfe\n\n var miyRw = data.read_shift(2);\n data.l += 1; // TODO: top/bot padding\n\n var flags = data.read_shift(1);\n data.l = tgt;\n if (flags & 0x07) z.level = flags & 0x07;\n if (flags & 0x10) z.hidden = true;\n if (flags & 0x20) z.hpt = miyRw / 20;\n return z;\n }\n\n function write_BrtRowHdr(R, range, ws) {\n var o = new_buf(17 + 8 * 16);\n var row = (ws['!rows'] || [])[R] || {};\n o.write_shift(4, R);\n o.write_shift(4, 0);\n /* TODO: ixfe */\n\n var miyRw = 0x0140;\n if (row.hpx) miyRw = px2pt(row.hpx) * 20;else if (row.hpt) miyRw = row.hpt * 20;\n o.write_shift(2, miyRw);\n o.write_shift(1, 0);\n /* top/bot padding */\n\n var flags = 0x0;\n if (row.level) flags |= row.level;\n if (row.hidden) flags |= 0x10;\n if (row.hpx || row.hpt) flags |= 0x20;\n o.write_shift(1, flags);\n o.write_shift(1, 0);\n /* phonetic guide */\n\n /* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\n var ncolspan = 0,\n lcs = o.l;\n o.l += 4;\n var caddr = {\n r: R,\n c: 0\n };\n\n for (var i = 0; i < 16; ++i) {\n if (range.s.c > i + 1 << 10 || range.e.c < i << 10) continue;\n var first = -1,\n last = -1;\n\n for (var j = i << 10; j < i + 1 << 10; ++j) {\n caddr.c = j;\n var cell = Array.isArray(ws) ? (ws[caddr.r] || [])[caddr.c] : ws[encode_cell(caddr)];\n\n if (cell) {\n if (first < 0) first = j;\n last = j;\n }\n }\n\n if (first < 0) continue;\n ++ncolspan;\n o.write_shift(4, first);\n o.write_shift(4, last);\n }\n\n var l = o.l;\n o.l = lcs;\n o.write_shift(4, ncolspan);\n o.l = l;\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n\n function write_row_header(ba, ws, range, R) {\n var o = write_BrtRowHdr(R, range, ws);\n if (o.length > 17 || (ws['!rows'] || [])[R]) write_record(ba, 'BrtRowHdr', o);\n }\n /* [MS-XLSB] 2.4.820 BrtWsDim */\n\n\n var parse_BrtWsDim = parse_UncheckedRfX;\n var write_BrtWsDim = write_UncheckedRfX;\n /* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\n\n function parse_BrtWsFmtInfo() {} //function write_BrtWsFmtInfo(ws, o) { }\n\n /* [MS-XLSB] 2.4.823 BrtWsProp */\n\n\n function parse_BrtWsProp(data, length) {\n var z = {};\n var f = data[data.l];\n ++data.l;\n z.above = !(f & 0x40);\n z.left = !(f & 0x80);\n /* TODO: pull flags */\n\n data.l += 18;\n z.name = parse_XLSBCodeName(data, length - 19);\n return z;\n }\n\n function write_BrtWsProp(str, outl, o) {\n if (o == null) o = new_buf(84 + 4 * str.length);\n var f = 0xC0;\n\n if (outl) {\n if (outl.above) f &= ~0x40;\n if (outl.left) f &= ~0x80;\n }\n\n o.write_shift(1, f);\n\n for (var i = 1; i < 3; ++i) {\n o.write_shift(1, 0);\n }\n\n write_BrtColor({\n auto: 1\n }, o);\n o.write_shift(-4, -1);\n o.write_shift(-4, -1);\n write_XLSBCodeName(str, o);\n return o.slice(0, o.l);\n }\n /* [MS-XLSB] 2.4.306 BrtCellBlank */\n\n\n function parse_BrtCellBlank(data) {\n var cell = parse_XLSBCell(data);\n return [cell];\n }\n\n function write_BrtCellBlank(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n return write_XLSBCell(ncell, o);\n }\n\n function parse_BrtShortBlank(data) {\n var cell = parse_XLSBShortCell(data);\n return [cell];\n }\n\n function write_BrtShortBlank(cell, ncell, o) {\n if (o == null) o = new_buf(4);\n return write_XLSBShortCell(ncell, o);\n }\n /* [MS-XLSB] 2.4.307 BrtCellBool */\n\n\n function parse_BrtCellBool(data) {\n var cell = parse_XLSBCell(data);\n var fBool = data.read_shift(1);\n return [cell, fBool, 'b'];\n }\n\n function write_BrtCellBool(cell, ncell, o) {\n if (o == null) o = new_buf(9);\n write_XLSBCell(ncell, o);\n o.write_shift(1, cell.v ? 1 : 0);\n return o;\n }\n\n function parse_BrtShortBool(data) {\n var cell = parse_XLSBShortCell(data);\n var fBool = data.read_shift(1);\n return [cell, fBool, 'b'];\n }\n\n function write_BrtShortBool(cell, ncell, o) {\n if (o == null) o = new_buf(5);\n write_XLSBShortCell(ncell, o);\n o.write_shift(1, cell.v ? 1 : 0);\n return o;\n }\n /* [MS-XLSB] 2.4.308 BrtCellError */\n\n\n function parse_BrtCellError(data) {\n var cell = parse_XLSBCell(data);\n var bError = data.read_shift(1);\n return [cell, bError, 'e'];\n }\n\n function write_BrtCellError(cell, ncell, o) {\n if (o == null) o = new_buf(9);\n write_XLSBCell(ncell, o);\n o.write_shift(1, cell.v);\n return o;\n }\n\n function parse_BrtShortError(data) {\n var cell = parse_XLSBShortCell(data);\n var bError = data.read_shift(1);\n return [cell, bError, 'e'];\n }\n\n function write_BrtShortError(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n write_XLSBShortCell(ncell, o);\n o.write_shift(1, cell.v);\n o.write_shift(2, 0);\n o.write_shift(1, 0);\n return o;\n }\n /* [MS-XLSB] 2.4.311 BrtCellIsst */\n\n\n function parse_BrtCellIsst(data) {\n var cell = parse_XLSBCell(data);\n var isst = data.read_shift(4);\n return [cell, isst, 's'];\n }\n\n function write_BrtCellIsst(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBCell(ncell, o);\n o.write_shift(4, ncell.v);\n return o;\n }\n\n function parse_BrtShortIsst(data) {\n var cell = parse_XLSBShortCell(data);\n var isst = data.read_shift(4);\n return [cell, isst, 's'];\n }\n\n function write_BrtShortIsst(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n write_XLSBShortCell(ncell, o);\n o.write_shift(4, ncell.v);\n return o;\n }\n /* [MS-XLSB] 2.4.313 BrtCellReal */\n\n\n function parse_BrtCellReal(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_Xnum(data);\n return [cell, value, 'n'];\n }\n\n function write_BrtCellReal(cell, ncell, o) {\n if (o == null) o = new_buf(16);\n write_XLSBCell(ncell, o);\n write_Xnum(cell.v, o);\n return o;\n }\n\n function parse_BrtShortReal(data) {\n var cell = parse_XLSBShortCell(data);\n var value = parse_Xnum(data);\n return [cell, value, 'n'];\n }\n\n function write_BrtShortReal(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBShortCell(ncell, o);\n write_Xnum(cell.v, o);\n return o;\n }\n /* [MS-XLSB] 2.4.314 BrtCellRk */\n\n\n function parse_BrtCellRk(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_RkNumber(data);\n return [cell, value, 'n'];\n }\n\n function write_BrtCellRk(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBCell(ncell, o);\n write_RkNumber(cell.v, o);\n return o;\n }\n\n function parse_BrtShortRk(data) {\n var cell = parse_XLSBShortCell(data);\n var value = parse_RkNumber(data);\n return [cell, value, 'n'];\n }\n\n function write_BrtShortRk(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n write_XLSBShortCell(ncell, o);\n write_RkNumber(cell.v, o);\n return o;\n }\n /* [MS-XLSB] 2.4.317 BrtCellSt */\n\n\n function parse_BrtCellSt(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_XLWideString(data);\n return [cell, value, 'str'];\n }\n\n function write_BrtCellSt(cell, ncell, o) {\n if (o == null) o = new_buf(12 + 4 * cell.v.length);\n write_XLSBCell(ncell, o);\n write_XLWideString(cell.v, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n\n function parse_BrtShortSt(data) {\n var cell = parse_XLSBShortCell(data);\n var value = parse_XLWideString(data);\n return [cell, value, 'str'];\n }\n\n function write_BrtShortSt(cell, ncell, o) {\n if (o == null) o = new_buf(8 + 4 * cell.v.length);\n write_XLSBShortCell(ncell, o);\n write_XLWideString(cell.v, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.653 BrtFmlaBool */\n\n\n function parse_BrtFmlaBool(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = data.read_shift(1);\n var o = [cell, value, 'b'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.654 BrtFmlaError */\n\n\n function parse_BrtFmlaError(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = data.read_shift(1);\n var o = [cell, value, 'e'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.655 BrtFmlaNum */\n\n\n function parse_BrtFmlaNum(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = parse_Xnum(data);\n var o = [cell, value, 'n'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.656 BrtFmlaString */\n\n\n function parse_BrtFmlaString(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = parse_XLWideString(data);\n var o = [cell, value, 'str'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.682 BrtMergeCell */\n\n\n var parse_BrtMergeCell = parse_UncheckedRfX;\n var write_BrtMergeCell = write_UncheckedRfX;\n /* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\n\n function write_BrtBeginMergeCells(cnt, o) {\n if (o == null) o = new_buf(4);\n o.write_shift(4, cnt);\n return o;\n }\n /* [MS-XLSB] 2.4.662 BrtHLink */\n\n\n function parse_BrtHLink(data, length) {\n var end = data.l + length;\n var rfx = parse_UncheckedRfX(data, 16);\n var relId = parse_XLNullableWideString(data);\n var loc = parse_XLWideString(data);\n var tooltip = parse_XLWideString(data);\n var display = parse_XLWideString(data);\n data.l = end;\n var o = {\n rfx: rfx,\n relId: relId,\n loc: loc,\n display: display\n };\n if (tooltip) o.Tooltip = tooltip;\n return o;\n }\n\n function write_BrtHLink(l, rId) {\n var o = new_buf(50 + 4 * (l[1].Target.length + (l[1].Tooltip || \"\").length));\n write_UncheckedRfX({\n s: decode_cell(l[0]),\n e: decode_cell(l[0])\n }, o);\n write_RelID(\"rId\" + rId, o);\n var locidx = l[1].Target.indexOf(\"#\");\n var loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx + 1);\n write_XLWideString(loc || \"\", o);\n write_XLWideString(l[1].Tooltip || \"\", o);\n write_XLWideString(\"\", o);\n return o.slice(0, o.l);\n }\n /* [MS-XLSB] 2.4.692 BrtPane */\n\n\n function parse_BrtPane() {}\n /* [MS-XLSB] 2.4.6 BrtArrFmla */\n\n\n function parse_BrtArrFmla(data, length, opts) {\n var end = data.l + length;\n var rfx = parse_RfX(data, 16);\n var fAlwaysCalc = data.read_shift(1);\n var o = [rfx];\n o[2] = fAlwaysCalc;\n\n if (opts.cellFormula) {\n var formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n o[1] = formula;\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.750 BrtShrFmla */\n\n\n function parse_BrtShrFmla(data, length, opts) {\n var end = data.l + length;\n var rfx = parse_UncheckedRfX(data, 16);\n var o = [rfx];\n\n if (opts.cellFormula) {\n var formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n o[1] = formula;\n data.l = end;\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.323 BrtColInfo */\n\n /* TODO: once XLS ColInfo is set, combine the functions */\n\n\n function write_BrtColInfo(C, col, o) {\n if (o == null) o = new_buf(18);\n var p = col_obj_w(C, col);\n o.write_shift(-4, C);\n o.write_shift(-4, C);\n o.write_shift(4, (p.width || 10) * 256);\n o.write_shift(4, 0\n /*ixfe*/\n ); // style\n\n var flags = 0;\n if (col.hidden) flags |= 0x01;\n if (typeof p.width == 'number') flags |= 0x02;\n if (col.level) flags |= col.level << 8;\n o.write_shift(2, flags); // bit flag\n\n return o;\n }\n /* [MS-XLSB] 2.4.678 BrtMargins */\n\n\n var BrtMarginKeys = [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"];\n\n function parse_BrtMargins(data) {\n var margins = {};\n BrtMarginKeys.forEach(function (k) {\n margins[k] = parse_Xnum(data, 8);\n });\n return margins;\n }\n\n function write_BrtMargins(margins, o) {\n if (o == null) o = new_buf(6 * 8);\n default_margins(margins);\n BrtMarginKeys.forEach(function (k) {\n write_Xnum(margins[k], o);\n });\n return o;\n }\n /* [MS-XLSB] 2.4.299 BrtBeginWsView */\n\n\n function parse_BrtBeginWsView(data) {\n var f = data.read_shift(2);\n data.l += 28;\n return {\n RTL: f & 0x20\n };\n }\n\n function write_BrtBeginWsView(ws, Workbook, o) {\n if (o == null) o = new_buf(30);\n var f = 0x39c;\n if ((((Workbook || {}).Views || [])[0] || {}).RTL) f |= 0x20;\n o.write_shift(2, f); // bit flag\n\n o.write_shift(4, 0);\n o.write_shift(4, 0); // view first row\n\n o.write_shift(4, 0); // view first col\n\n o.write_shift(1, 0); // gridline color ICV\n\n o.write_shift(1, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 100); // zoom scale\n\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(4, 0); // workbook view id\n\n return o;\n }\n /* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\n\n\n function write_BrtCellIgnoreEC(ref) {\n var o = new_buf(24);\n o.write_shift(4, 4);\n o.write_shift(4, 1);\n write_UncheckedRfX(ref, o);\n return o;\n }\n /* [MS-XLSB] 2.4.748 BrtSheetProtection */\n\n\n function write_BrtSheetProtection(sp, o) {\n if (o == null) o = new_buf(16 * 4 + 2);\n o.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n o.write_shift(4, 1); // this record should not be written if no protection\n\n [[\"objects\", false], // fObjects\n [\"scenarios\", false], // fScenarios\n [\"formatCells\", true], // fFormatCells\n [\"formatColumns\", true], // fFormatColumns\n [\"formatRows\", true], // fFormatRows\n [\"insertColumns\", true], // fInsertColumns\n [\"insertRows\", true], // fInsertRows\n [\"insertHyperlinks\", true], // fInsertHyperlinks\n [\"deleteColumns\", true], // fDeleteColumns\n [\"deleteRows\", true], // fDeleteRows\n [\"selectLockedCells\", false], // fSelLockedCells\n [\"sort\", true], // fSort\n [\"autoFilter\", true], // fAutoFilter\n [\"pivotTables\", true], // fPivotTables\n [\"selectUnlockedCells\", false] // fSelUnlockedCells\n ].forEach(function (n) {\n if (n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);else o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n });\n return o;\n }\n\n function parse_BrtDVal() {}\n\n function parse_BrtDVal14() {}\n /* [MS-XLSB] 2.1.7.61 Worksheet */\n\n\n function parse_ws_bin(data, _opts, idx, rels, wb, themes, styles) {\n if (!data) return data;\n var opts = _opts || {};\n if (!rels) rels = {\n '!id': {}\n };\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var s = opts.dense ? [] : {};\n var ref;\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var state = [];\n var pass = false,\n end = false;\n var row, p, cf, R, C, addr, sstr, rr, cell;\n var merges = [];\n opts.biff = 12;\n opts['!row'] = 0;\n var ai = 0,\n af = false;\n var arrayf = [];\n var sharedf = {};\n var supbooks = opts.supbooks || wb.supbooks || [[]];\n supbooks.sharedf = sharedf;\n supbooks.arrayf = arrayf;\n supbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function (x) {\n return x.name;\n });\n\n if (!opts.supbooks) {\n opts.supbooks = supbooks;\n if (wb.Names) for (var i = 0; i < wb.Names.length; ++i) {\n supbooks[0][i + 1] = wb.Names[i];\n }\n }\n\n var colinfo = [],\n rowinfo = [];\n var seencol = false;\n XLSBRecordEnum[0x0010] = {\n n: \"BrtShortReal\",\n f: parse_BrtShortReal\n };\n recordhopper(data, function ws_parse(val, R_n, RT) {\n if (end) return;\n\n switch (RT) {\n case 0x0094:\n /* 'BrtWsDim' */\n ref = val;\n break;\n\n case 0x0000:\n /* 'BrtRowHdr' */\n row = val;\n if (opts.sheetRows && opts.sheetRows <= row.r) end = true;\n rr = encode_row(R = row.r);\n opts['!row'] = row.r;\n\n if (val.hidden || val.hpt || val.level != null) {\n if (val.hpt) val.hpx = pt2px(val.hpt);\n rowinfo[val.r] = val;\n }\n\n break;\n\n case 0x0002:\n /* 'BrtCellRk' */\n\n case 0x0003:\n /* 'BrtCellError' */\n\n case 0x0004:\n /* 'BrtCellBool' */\n\n case 0x0005:\n /* 'BrtCellReal' */\n\n case 0x0006:\n /* 'BrtCellSt' */\n\n case 0x0007:\n /* 'BrtCellIsst' */\n\n case 0x0008:\n /* 'BrtFmlaString' */\n\n case 0x0009:\n /* 'BrtFmlaNum' */\n\n case 0x000A:\n /* 'BrtFmlaBool' */\n\n case 0x000B:\n /* 'BrtFmlaError' */\n\n case 0x000D:\n /* 'BrtShortRk' */\n\n case 0x000E:\n /* 'BrtShortError' */\n\n case 0x000F:\n /* 'BrtShortBool' */\n\n case 0x0010:\n /* 'BrtShortReal' */\n\n case 0x0011:\n /* 'BrtShortSt' */\n\n case 0x0012:\n /* 'BrtShortIsst' */\n p = {\n t: val[2]\n };\n\n switch (val[2]) {\n case 'n':\n p.v = val[1];\n break;\n\n case 's':\n sstr = strs[val[1]];\n p.v = sstr.t;\n p.r = sstr.r;\n break;\n\n case 'b':\n p.v = val[1] ? true : false;\n break;\n\n case 'e':\n p.v = val[1];\n if (opts.cellText !== false) p.w = BErr[p.v];\n break;\n\n case 'str':\n p.t = 's';\n p.v = val[1];\n break;\n }\n\n if (cf = styles.CellXf[val[0].iStyleRef]) safe_format(p, cf.numFmtId, null, opts, themes, styles);\n C = val[0].c == -1 ? C + 1 : val[0].c;\n\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n s[R][C] = p;\n } else s[encode_col(C) + rr] = p;\n\n if (opts.cellFormula) {\n af = false;\n\n for (ai = 0; ai < arrayf.length; ++ai) {\n var aii = arrayf[ai];\n if (row.r >= aii[0].s.r && row.r <= aii[0].e.r) if (C >= aii[0].s.c && C <= aii[0].e.c) {\n p.F = encode_range(aii[0]);\n af = true;\n }\n }\n\n if (!af && val.length > 3) p.f = val[3];\n }\n\n if (refguess.s.r > row.r) refguess.s.r = row.r;\n if (refguess.s.c > C) refguess.s.c = C;\n if (refguess.e.r < row.r) refguess.e.r = row.r;\n if (refguess.e.c < C) refguess.e.c = C;\n\n if (opts.cellDates && cf && p.t == 'n' && SSF.is_date(SSF._table[cf.numFmtId])) {\n var _d = SSF.parse_date_code(p.v);\n\n if (_d) {\n p.t = 'd';\n p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n\n break;\n\n case 0x0001:\n /* 'BrtCellBlank' */\n\n case 0x000C:\n /* 'BrtShortBlank' */\n if (!opts.sheetStubs || pass) break;\n p = {\n t: 'z',\n v: undefined\n };\n C = val[0].c == -1 ? C + 1 : val[0].c;\n\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n s[R][C] = p;\n } else s[encode_col(C) + rr] = p;\n\n if (refguess.s.r > row.r) refguess.s.r = row.r;\n if (refguess.s.c > C) refguess.s.c = C;\n if (refguess.e.r < row.r) refguess.e.r = row.r;\n if (refguess.e.c < C) refguess.e.c = C;\n break;\n\n case 0x00B0:\n /* 'BrtMergeCell' */\n merges.push(val);\n break;\n\n case 0x01EE:\n /* 'BrtHLink' */\n var rel = rels['!id'][val.relId];\n\n if (rel) {\n val.Target = rel.Target;\n if (val.loc) val.Target += \"#\" + val.loc;\n val.Rel = rel;\n } else if (val.relId == '') {\n val.Target = \"#\" + val.loc;\n }\n\n for (R = val.rfx.s.r; R <= val.rfx.e.r; ++R) {\n for (C = val.rfx.s.c; C <= val.rfx.e.c; ++C) {\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n if (!s[R][C]) s[R][C] = {\n t: 'z',\n v: undefined\n };\n s[R][C].l = val;\n } else {\n addr = encode_cell({\n c: C,\n r: R\n });\n if (!s[addr]) s[addr] = {\n t: 'z',\n v: undefined\n };\n s[addr].l = val;\n }\n }\n }\n\n break;\n\n case 0x01AA:\n /* 'BrtArrFmla' */\n if (!opts.cellFormula) break;\n arrayf.push(val);\n cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];\n cell.f = stringify_formula(val[1], refguess, {\n r: row.r,\n c: C\n }, supbooks, opts);\n cell.F = encode_range(val[0]);\n break;\n\n case 0x01AB:\n /* 'BrtShrFmla' */\n if (!opts.cellFormula) break;\n sharedf[encode_cell(val[0].s)] = val[1];\n cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];\n cell.f = stringify_formula(val[1], refguess, {\n r: row.r,\n c: C\n }, supbooks, opts);\n break;\n\n /* identical to 'ColInfo' in XLS */\n\n case 0x003C:\n /* 'BrtColInfo' */\n if (!opts.cellStyles) break;\n\n while (val.e >= val.s) {\n colinfo[val.e--] = {\n width: val.w / 256,\n hidden: !!(val.flags & 0x01),\n level: val.level\n };\n\n if (!seencol) {\n seencol = true;\n find_mdw_colw(val.w / 256);\n }\n\n process_col(colinfo[val.e + 1]);\n }\n\n break;\n\n case 0x00A1:\n /* 'BrtBeginAFilter' */\n s['!autofilter'] = {\n ref: encode_range(val)\n };\n break;\n\n case 0x01DC:\n /* 'BrtMargins' */\n s['!margins'] = val;\n break;\n\n case 0x0093:\n /* 'BrtWsProp' */\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (val.name) wb.Sheets[idx].CodeName = val.name;\n if (val.above || val.left) s['!outline'] = {\n above: val.above,\n left: val.left\n };\n break;\n\n case 0x0089:\n /* 'BrtBeginWsView' */\n if (!wb.Views) wb.Views = [{}];\n if (!wb.Views[0]) wb.Views[0] = {};\n if (val.RTL) wb.Views[0].RTL = true;\n break;\n\n case 0x01E5:\n /* 'BrtWsFmtInfo' */\n break;\n\n case 0x0040:\n /* 'BrtDVal' */\n\n case 0x041D:\n /* 'BrtDVal14' */\n break;\n\n case 0x0097:\n /* 'BrtPane' */\n break;\n\n case 0x0098:\n /* 'BrtSel' */\n\n case 0x00AF:\n /* 'BrtAFilterDateGroupItem' */\n\n case 0x0284:\n /* 'BrtActiveX' */\n\n case 0x0271:\n /* 'BrtBigName' */\n\n case 0x0232:\n /* 'BrtBkHim' */\n\n case 0x018C:\n /* 'BrtBrk' */\n\n case 0x0458:\n /* 'BrtCFIcon' */\n\n case 0x047A:\n /* 'BrtCFRuleExt' */\n\n case 0x01D7:\n /* 'BrtCFVO' */\n\n case 0x041A:\n /* 'BrtCFVO14' */\n\n case 0x0289:\n /* 'BrtCellIgnoreEC' */\n\n case 0x0451:\n /* 'BrtCellIgnoreEC14' */\n\n case 0x0031:\n /* 'BrtCellMeta' */\n\n case 0x024D:\n /* 'BrtCellSmartTagProperty' */\n\n case 0x025F:\n /* 'BrtCellWatch' */\n\n case 0x0234:\n /* 'BrtColor' */\n\n case 0x041F:\n /* 'BrtColor14' */\n\n case 0x00A8:\n /* 'BrtColorFilter' */\n\n case 0x00AE:\n /* 'BrtCustomFilter' */\n\n case 0x049C:\n /* 'BrtCustomFilter14' */\n\n case 0x01F3:\n /* 'BrtDRef' */\n\n case 0x01FB:\n /* 'BrtDXF' */\n\n case 0x0226:\n /* 'BrtDrawing' */\n\n case 0x00AB:\n /* 'BrtDynamicFilter' */\n\n case 0x00A7:\n /* 'BrtFilter' */\n\n case 0x0499:\n /* 'BrtFilter14' */\n\n case 0x00A9:\n /* 'BrtIconFilter' */\n\n case 0x049D:\n /* 'BrtIconFilter14' */\n\n case 0x0227:\n /* 'BrtLegacyDrawing' */\n\n case 0x0228:\n /* 'BrtLegacyDrawingHF' */\n\n case 0x0295:\n /* 'BrtListPart' */\n\n case 0x027F:\n /* 'BrtOleObject' */\n\n case 0x01DE:\n /* 'BrtPageSetup' */\n\n case 0x0219:\n /* 'BrtPhoneticInfo' */\n\n case 0x01DD:\n /* 'BrtPrintOptions' */\n\n case 0x0218:\n /* 'BrtRangeProtection' */\n\n case 0x044F:\n /* 'BrtRangeProtection14' */\n\n case 0x02A8:\n /* 'BrtRangeProtectionIso' */\n\n case 0x0450:\n /* 'BrtRangeProtectionIso14' */\n\n case 0x0400:\n /* 'BrtRwDescent' */\n\n case 0x0297:\n /* 'BrtSheetCalcProp' */\n\n case 0x0217:\n /* 'BrtSheetProtection' */\n\n case 0x02A6:\n /* 'BrtSheetProtectionIso' */\n\n case 0x01F8:\n /* 'BrtSlc' */\n\n case 0x0413:\n /* 'BrtSparkline' */\n\n case 0x01AC:\n /* 'BrtTable' */\n\n case 0x00AA:\n /* 'BrtTop10Filter' */\n\n case 0x0C00:\n /* 'BrtUid' */\n\n case 0x0032:\n /* 'BrtValueMeta' */\n\n case 0x0816:\n /* 'BrtWebExtension' */\n\n case 0x0415:\n /* 'BrtWsFmtInfoEx14' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n }, opts);\n delete opts.supbooks;\n delete opts['!row'];\n if (!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\n if (opts.sheetRows && s[\"!ref\"]) {\n var tmpref = safe_decode_range(s[\"!ref\"]);\n\n if (opts.sheetRows <= +tmpref.e.r) {\n tmpref.e.r = opts.sheetRows - 1;\n if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n s[\"!fullref\"] = s[\"!ref\"];\n s[\"!ref\"] = encode_range(tmpref);\n }\n }\n\n if (merges.length > 0) s[\"!merges\"] = merges;\n if (colinfo.length > 0) s[\"!cols\"] = colinfo;\n if (rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n return s;\n }\n /* TODO: something useful -- this is a stub */\n\n\n function write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen) {\n if (cell.v === undefined) return false;\n var vv = \"\";\n\n switch (cell.t) {\n case 'b':\n vv = cell.v ? \"1\" : \"0\";\n break;\n\n case 'd':\n // no BrtCellDate :(\n cell = dup(cell);\n cell.z = cell.z || SSF._table[14];\n cell.v = datenum(parseDate(cell.v));\n cell.t = 'n';\n break;\n\n /* falls through */\n\n case 'n':\n case 'e':\n vv = '' + cell.v;\n break;\n\n default:\n vv = cell.v;\n break;\n }\n\n var o = {\n r: R,\n c: C\n };\n /* TODO: cell style */\n\n o.s = get_cell_style(opts.cellXfs, cell, opts);\n if (cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n if (cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\n switch (cell.t) {\n case 's':\n case 'str':\n if (opts.bookSST) {\n vv = get_sst_id(opts.Strings, cell.v, opts.revStrings);\n o.t = \"s\";\n o.v = vv;\n if (last_seen) write_record(ba, \"BrtShortIsst\", write_BrtShortIsst(cell, o));else write_record(ba, \"BrtCellIsst\", write_BrtCellIsst(cell, o));\n } else {\n o.t = \"str\";\n if (last_seen) write_record(ba, \"BrtShortSt\", write_BrtShortSt(cell, o));else write_record(ba, \"BrtCellSt\", write_BrtCellSt(cell, o));\n }\n\n return true;\n\n case 'n':\n /* TODO: determine threshold for Real vs RK */\n if (cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n if (last_seen) write_record(ba, \"BrtShortRk\", write_BrtShortRk(cell, o));else write_record(ba, \"BrtCellRk\", write_BrtCellRk(cell, o));\n } else {\n if (last_seen) write_record(ba, \"BrtShortReal\", write_BrtShortReal(cell, o));else write_record(ba, \"BrtCellReal\", write_BrtCellReal(cell, o));\n }\n\n return true;\n\n case 'b':\n o.t = \"b\";\n if (last_seen) write_record(ba, \"BrtShortBool\", write_BrtShortBool(cell, o));else write_record(ba, \"BrtCellBool\", write_BrtCellBool(cell, o));\n return true;\n\n case 'e':\n o.t = \"e\";\n if (last_seen) write_record(ba, \"BrtShortError\", write_BrtShortError(cell, o));else write_record(ba, \"BrtCellError\", write_BrtCellError(cell, o));\n return true;\n }\n\n if (last_seen) write_record(ba, \"BrtShortBlank\", write_BrtShortBlank(cell, o));else write_record(ba, \"BrtCellBlank\", write_BrtCellBlank(cell, o));\n return true;\n }\n\n function write_CELLTABLE(ba, ws, idx, opts) {\n var range = safe_decode_range(ws['!ref'] || \"A1\"),\n ref,\n rr = \"\",\n cols = [];\n write_record(ba, 'BrtBeginSheetData');\n var dense = Array.isArray(ws);\n var cap = range.e.r;\n if (ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\n for (var R = range.s.r; R <= cap; ++R) {\n rr = encode_row(R);\n /* [ACCELLTABLE] */\n\n /* BrtRowHdr */\n\n write_row_header(ba, ws, range, R);\n var last_seen = false;\n if (R <= range.e.r) for (var C = range.s.c; C <= range.e.c; ++C) {\n /* *16384CELL */\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (!cell) {\n last_seen = false;\n continue;\n }\n /* write cell */\n\n\n last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n }\n }\n\n write_record(ba, 'BrtEndSheetData');\n }\n\n function write_MERGECELLS(ba, ws) {\n if (!ws || !ws['!merges']) return;\n write_record(ba, 'BrtBeginMergeCells', write_BrtBeginMergeCells(ws['!merges'].length));\n ws['!merges'].forEach(function (m) {\n write_record(ba, 'BrtMergeCell', write_BrtMergeCell(m));\n });\n write_record(ba, 'BrtEndMergeCells');\n }\n\n function write_COLINFOS(ba, ws) {\n if (!ws || !ws['!cols']) return;\n write_record(ba, 'BrtBeginColInfos');\n ws['!cols'].forEach(function (m, i) {\n if (m) write_record(ba, 'BrtColInfo', write_BrtColInfo(i, m));\n });\n write_record(ba, 'BrtEndColInfos');\n }\n\n function write_IGNOREECS(ba, ws) {\n if (!ws || !ws['!ref']) return;\n write_record(ba, 'BrtBeginCellIgnoreECs');\n write_record(ba, 'BrtCellIgnoreEC', write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n write_record(ba, 'BrtEndCellIgnoreECs');\n }\n\n function write_HLINKS(ba, ws, rels) {\n /* *BrtHLink */\n ws['!links'].forEach(function (l) {\n if (!l[1].Target) return;\n var rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n write_record(ba, \"BrtHLink\", write_BrtHLink(l, rId));\n });\n delete ws['!links'];\n }\n\n function write_LEGACYDRAWING(ba, ws, idx, rels) {\n /* [BrtLegacyDrawing] */\n if (ws['!comments'].length > 0) {\n var rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n write_record(ba, \"BrtLegacyDrawing\", write_RelID(\"rId\" + rId));\n ws['!legacy'] = rId;\n }\n }\n\n function write_AUTOFILTER(ba, ws, wb, idx) {\n if (!ws['!autofilter']) return;\n var data = ws['!autofilter'];\n var ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n /* Update FilterDatabase defined name for the worksheet */\n\n if (!wb.Workbook) wb.Workbook = {\n Sheets: []\n };\n if (!wb.Workbook.Names) wb.Workbook.Names = [];\n var names = wb.Workbook.Names;\n var range = decode_range(ref);\n\n if (range.s.r == range.e.r) {\n range.e.r = decode_range(ws[\"!ref\"]).e.r;\n ref = encode_range(range);\n }\n\n for (var i = 0; i < names.length; ++i) {\n var name = names[i];\n if (name.Name != '_xlnm._FilterDatabase') continue;\n if (name.Sheet != idx) continue;\n name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n break;\n }\n\n if (i == names.length) names.push({\n Name: '_xlnm._FilterDatabase',\n Sheet: idx,\n Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n });\n write_record(ba, \"BrtBeginAFilter\", write_UncheckedRfX(safe_decode_range(ref)));\n /* *FILTERCOLUMN */\n\n /* [SORTSTATE] */\n\n /* BrtEndAFilter */\n\n write_record(ba, \"BrtEndAFilter\");\n }\n\n function write_WSVIEWS2(ba, ws, Workbook) {\n write_record(ba, \"BrtBeginWsViews\");\n {\n /* 1*WSVIEW2 */\n\n /* [ACUID] */\n write_record(ba, \"BrtBeginWsView\", write_BrtBeginWsView(ws, Workbook));\n /* [BrtPane] */\n\n /* *4BrtSel */\n\n /* *4SXSELECT */\n\n /* *FRT */\n\n write_record(ba, \"BrtEndWsView\");\n }\n /* *FRT */\n\n write_record(ba, \"BrtEndWsViews\");\n }\n\n function write_WSFMTINFO() {\n /* [ACWSFMTINFO] */\n //write_record(ba, \"BrtWsFmtInfo\", write_BrtWsFmtInfo(ws));\n }\n\n function write_SHEETPROTECT(ba, ws) {\n if (!ws['!protect']) return;\n /* [BrtSheetProtectionIso] */\n\n write_record(ba, \"BrtSheetProtection\", write_BrtSheetProtection(ws['!protect']));\n }\n\n function write_ws_bin(idx, opts, wb, rels) {\n var ba = buf_array();\n var s = wb.SheetNames[idx],\n ws = wb.Sheets[s] || {};\n var c = s;\n\n try {\n if (wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c;\n } catch (e) {}\n\n var r = safe_decode_range(ws['!ref'] || \"A1\");\n\n if (r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n r.e.c = Math.min(r.e.c, 0x3FFF);\n r.e.r = Math.min(r.e.c, 0xFFFFF);\n }\n\n ws['!links'] = [];\n /* passed back to write_zip and removed there */\n\n ws['!comments'] = [];\n write_record(ba, \"BrtBeginSheet\");\n if (wb.vbaraw || ws['!outline']) write_record(ba, \"BrtWsProp\", write_BrtWsProp(c, ws['!outline']));\n write_record(ba, \"BrtWsDim\", write_BrtWsDim(r));\n write_WSVIEWS2(ba, ws, wb.Workbook);\n write_WSFMTINFO(ba, ws);\n write_COLINFOS(ba, ws, idx, opts, wb);\n write_CELLTABLE(ba, ws, idx, opts, wb);\n /* [BrtSheetCalcProp] */\n\n write_SHEETPROTECT(ba, ws);\n /* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\n /* [SCENMAN] */\n\n write_AUTOFILTER(ba, ws, wb, idx);\n /* [SORTSTATE] */\n\n /* [DCON] */\n\n /* [USERSHVIEWS] */\n\n write_MERGECELLS(ba, ws);\n /* [BrtPhoneticInfo] */\n\n /* *CONDITIONALFORMATTING */\n\n /* [DVALS] */\n\n write_HLINKS(ba, ws, rels);\n /* [BrtPrintOptions] */\n\n if (ws['!margins']) write_record(ba, \"BrtMargins\", write_BrtMargins(ws['!margins']));\n /* [BrtPageSetup] */\n\n /* [HEADERFOOTER] */\n\n /* [RWBRK] */\n\n /* [COLBRK] */\n\n /* *BrtBigName */\n\n /* [CELLWATCHES] */\n\n if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) write_IGNOREECS(ba, ws);\n /* [SMARTTAGS] */\n\n /* [BrtDrawing] */\n\n write_LEGACYDRAWING(ba, ws, idx, rels);\n /* [BrtLegacyDrawingHF] */\n\n /* [BrtBkHim] */\n\n /* [OLEOBJECTS] */\n\n /* [ACTIVEXCONTROLS] */\n\n /* [WEBPUBITEMS] */\n\n /* [LISTPARTS] */\n\n /* FRTWORKSHEET */\n\n write_record(ba, \"BrtEndSheet\");\n return ba.end();\n }\n\n RELS.CHART = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\";\n RELS.CHARTEX = \"http://schemas.microsoft.com/office/2014/relationships/chartEx\";\n\n function parse_Cache(data) {\n var col = [];\n var num = data.match(/^/);\n var f;\n /* 21.2.2.150 pt CT_NumVal */\n\n (data.match(/(.*?)<\\/c:pt>/mg) || []).forEach(function (pt) {\n var q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n if (!q) return;\n col[+q[1]] = num ? +q[2] : q[2];\n });\n /* 21.2.2.71 formatCode CT_Xstring */\n\n var nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\", \"General\"])[1]);\n (data.match(/(.*?)<\\/c:f>/mg) || []).forEach(function (F) {\n f = F.replace(/<.*?>/g, \"\");\n });\n return [col, nf, f];\n }\n /* 21.2 DrawingML - Charts */\n\n\n function parse_chart(data, name, opts, rels, wb, csheet) {\n var cs = csheet || {\n \"!type\": \"chart\"\n };\n if (!data) return csheet;\n /* 21.2.2.27 chart CT_Chart */\n\n var C = 0,\n R = 0,\n col = \"A\";\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n /* 21.2.2.120 numCache CT_NumData */\n\n (data.match(/[\\s\\S]*?<\\/c:numCache>/gm) || []).forEach(function (nc) {\n var cache = parse_Cache(nc);\n refguess.s.r = refguess.s.c = 0;\n refguess.e.c = C;\n col = encode_col(C);\n cache[0].forEach(function (n, i) {\n cs[col + encode_row(i)] = {\n t: 'n',\n v: n,\n z: cache[1]\n };\n R = i;\n });\n if (refguess.e.r < R) refguess.e.r = R;\n ++C;\n });\n if (C > 0) cs[\"!ref\"] = encode_range(refguess);\n return cs;\n }\n\n RELS.CS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\";\n var CS_XML_ROOT = writextag('chartsheet', null, {\n 'xmlns': XMLNS.main[0],\n 'xmlns:r': XMLNS.r\n });\n /* 18.3 Worksheets also covers Chartsheets */\n\n function parse_cs_xml(data, opts, idx, rels, wb) {\n if (!data) return data;\n /* 18.3.1.12 chartsheet CT_ChartSheet */\n\n if (!rels) rels = {\n '!id': {}\n };\n var s = {\n '!type': \"chart\",\n '!drawel': null,\n '!rel': \"\"\n };\n var m;\n /* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\n var sheetPr = data.match(sheetprregex);\n if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n /* 18.3.1.36 drawing CT_Drawing */\n\n if (m = data.match(/drawing r:id=\"(.*?)\"/)) s['!rel'] = m[1];\n if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n return s;\n }\n\n function write_cs_xml(idx, opts, wb, rels) {\n var o = [XML_HEADER, CS_XML_ROOT];\n o[o.length] = writextag(\"drawing\", null, {\n \"r:id\": \"rId1\"\n });\n add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.331 BrtCsProp */\n\n\n function parse_BrtCsProp(data, length) {\n data.l += 10;\n var name = parse_XLWideString(data, length - 10);\n return {\n name: name\n };\n }\n /* [MS-XLSB] 2.1.7.7 Chart Sheet */\n\n\n function parse_cs_bin(data, opts, idx, rels, wb) {\n if (!data) return data;\n if (!rels) rels = {\n '!id': {}\n };\n var s = {\n '!type': \"chart\",\n '!drawel': null,\n '!rel': \"\"\n };\n var state = [];\n var pass = false;\n recordhopper(data, function cs_parse(val, R_n, RT) {\n switch (RT) {\n case 0x0226:\n /* 'BrtDrawing' */\n s['!rel'] = val;\n break;\n\n case 0x028B:\n /* 'BrtCsProp' */\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (val.name) wb.Sheets[idx].CodeName = val.name;\n break;\n\n case 0x0232:\n /* 'BrtBkHim' */\n\n case 0x028C:\n /* 'BrtCsPageSetup' */\n\n case 0x029D:\n /* 'BrtCsProtection' */\n\n case 0x02A7:\n /* 'BrtCsProtectionIso' */\n\n case 0x0227:\n /* 'BrtLegacyDrawing' */\n\n case 0x0228:\n /* 'BrtLegacyDrawingHF' */\n\n case 0x01DC:\n /* 'BrtMargins' */\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) state.push(R_n);else if ((R_n || \"\").indexOf(\"End\") > 0) state.pop();else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n }\n }, opts);\n if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n return s;\n }\n\n function write_cs_bin() {\n var ba = buf_array();\n write_record(ba, \"BrtBeginSheet\");\n /* [BrtCsProp] */\n\n /* CSVIEWS */\n\n /* [[BrtCsProtectionIso] BrtCsProtection] */\n\n /* [USERCSVIEWS] */\n\n /* [BrtMargins] */\n\n /* [BrtCsPageSetup] */\n\n /* [HEADERFOOTER] */\n\n /* BrtDrawing */\n\n /* [BrtLegacyDrawing] */\n\n /* [BrtLegacyDrawingHF] */\n\n /* [BrtBkHim] */\n\n /* [WEBPUBITEMS] */\n\n /* FRTCHARTSHEET */\n\n write_record(ba, \"BrtEndSheet\");\n return ba.end();\n }\n /* 18.2.28 (CT_WorkbookProtection) Defaults */\n\n\n var WBPropsDef = [['allowRefreshQuery', false, \"bool\"], ['autoCompressPictures', true, \"bool\"], ['backupFile', false, \"bool\"], ['checkCompatibility', false, \"bool\"], ['CodeName', ''], ['date1904', false, \"bool\"], ['defaultThemeVersion', 0, \"int\"], ['filterPrivacy', false, \"bool\"], ['hidePivotFieldList', false, \"bool\"], ['promptedSolutions', false, \"bool\"], ['publishItems', false, \"bool\"], ['refreshAllConnections', false, \"bool\"], ['saveExternalLinkValues', true, \"bool\"], ['showBorderUnselectedTables', true, \"bool\"], ['showInkAnnotation', true, \"bool\"], ['showObjects', 'all'], ['showPivotChartFilter', false, \"bool\"], ['updateLinks', 'userSet']];\n /* 18.2.30 (CT_BookView) Defaults */\n\n var WBViewDef = [['activeTab', 0, \"int\"], ['autoFilterDateGrouping', true, \"bool\"], ['firstSheet', 0, \"int\"], ['minimized', false, \"bool\"], ['showHorizontalScroll', true, \"bool\"], ['showSheetTabs', true, \"bool\"], ['showVerticalScroll', true, \"bool\"], ['tabRatio', 600, \"int\"], ['visibility', 'visible'] //window{Height,Width}, {x,y}Window\n ];\n /* 18.2.19 (CT_Sheet) Defaults */\n\n var SheetDef = [//['state', 'visible']\n ];\n /* 18.2.2 (CT_CalcPr) Defaults */\n\n var CalcPrDef = [['calcCompleted', 'true'], ['calcMode', 'auto'], ['calcOnSave', 'true'], ['concurrentCalc', 'true'], ['fullCalcOnLoad', 'false'], ['fullPrecision', 'true'], ['iterate', 'false'], ['iterateCount', '100'], ['iterateDelta', '0.001'], ['refMode', 'A1']];\n /* 18.2.3 (CT_CustomWorkbookView) Defaults */\n\n /*var CustomWBViewDef = [\n \t['autoUpdate', 'false'],\n \t['changesSavedWin', 'false'],\n \t['includeHiddenRowCol', 'true'],\n \t['includePrintSettings', 'true'],\n \t['maximized', 'false'],\n \t['minimized', 'false'],\n \t['onlySync', 'false'],\n \t['personalView', 'false'],\n \t['showComments', 'commIndicator'],\n \t['showFormulaBar', 'true'],\n \t['showHorizontalScroll', 'true'],\n \t['showObjects', 'all'],\n \t['showSheetTabs', 'true'],\n \t['showStatusbar', 'true'],\n \t['showVerticalScroll', 'true'],\n \t['tabRatio', '600'],\n \t['xWindow', '0'],\n \t['yWindow', '0']\n ];*/\n\n function push_defaults_array(target, defaults) {\n for (var j = 0; j != target.length; ++j) {\n var w = target[j];\n\n for (var i = 0; i != defaults.length; ++i) {\n var z = defaults[i];\n if (w[z[0]] == null) w[z[0]] = z[1];else switch (z[2]) {\n case \"bool\":\n if (typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]);\n break;\n\n case \"int\":\n if (typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10);\n break;\n }\n }\n }\n }\n\n function push_defaults(target, defaults) {\n for (var i = 0; i != defaults.length; ++i) {\n var z = defaults[i];\n if (target[z[0]] == null) target[z[0]] = z[1];else switch (z[2]) {\n case \"bool\":\n if (typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]);\n break;\n\n case \"int\":\n if (typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10);\n break;\n }\n }\n }\n\n function parse_wb_defaults(wb) {\n push_defaults(wb.WBProps, WBPropsDef);\n push_defaults(wb.CalcPr, CalcPrDef);\n push_defaults_array(wb.WBView, WBViewDef);\n push_defaults_array(wb.Sheets, SheetDef);\n _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n }\n\n function safe1904(wb) {\n /* TODO: store date1904 somewhere else */\n if (!wb.Workbook) return \"false\";\n if (!wb.Workbook.WBProps) return \"false\";\n return parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n }\n\n var badchars = \"][*?\\/\\\\\".split(\"\");\n\n function check_ws_name(n, safe) {\n if (n.length > 31) {\n if (safe) return false;\n throw new Error(\"Sheet names cannot exceed 31 chars\");\n }\n\n var _good = true;\n badchars.forEach(function (c) {\n if (n.indexOf(c) == -1) return;\n if (!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n _good = false;\n });\n return _good;\n }\n\n function check_wb_names(N, S, codes) {\n N.forEach(function (n, i) {\n check_ws_name(n);\n\n for (var j = 0; j < i; ++j) {\n if (n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n }\n\n if (codes) {\n var cn = S && S[i] && S[i].CodeName || n;\n if (cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n }\n });\n }\n\n function check_wb(wb) {\n if (!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n if (!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n var Sheets = wb.Workbook && wb.Workbook.Sheets || [];\n check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n }\n /* TODO: validate workbook */\n\n }\n /* 18.2 Workbook */\n\n\n var wbnsregex = /<\\w+:workbook/;\n\n function parse_wb_xml(data, opts) {\n if (!data) throw new Error(\"Could not find file\");\n var wb = {\n AppVersion: {},\n WBProps: {},\n WBView: [],\n Sheets: [],\n CalcPr: {},\n Names: [],\n xmlns: \"\"\n };\n var pass = false,\n xmlns = \"xmlns\";\n var dname = {},\n dnstart = 0;\n data.replace(tagregex, function xml_wb(x, idx) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n /* 18.2.13 fileVersion CT_FileVersion ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.12 fileSharing CT_FileSharing ? */\n\n case '':\n break;\n\n /* 18.2.28 workbookPr CT_WorkbookPr ? */\n\n case '':\n WBPropsDef.forEach(function (w) {\n if (y[w[0]] == null) return;\n\n switch (w[2]) {\n case \"bool\":\n wb.WBProps[w[0]] = parsexmlbool(y[w[0]]);\n break;\n\n case \"int\":\n wb.WBProps[w[0]] = parseInt(y[w[0]], 10);\n break;\n\n default:\n wb.WBProps[w[0]] = y[w[0]];\n }\n });\n if (y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n break;\n\n case '':\n break;\n\n /* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\n case '':\n break;\n\n /* 18.2.1 bookViews CT_BookViews ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.30 workbookView CT_BookView + */\n\n case '':\n delete y[0];\n wb.WBView.push(y);\n break;\n\n case '':\n break;\n\n /* 18.2.20 sheets CT_Sheets 1 */\n\n case '':\n case '':\n break;\n // aggregate sheet\n\n /* 18.2.19 sheet CT_Sheet + */\n\n case '':\n break;\n\n /* 18.2.15 functionGroups CT_FunctionGroups ? */\n\n case '':\n break;\n\n /* 18.2.14 functionGroup CT_FunctionGroup + */\n\n case '':\n case '':\n break;\n\n /* 18.2.8 externalReference CT_ExternalReference + */\n\n case '':\n break;\n\n case '':\n case '':\n pass = false;\n break;\n\n /* 18.2.5 definedName CT_DefinedName + */\n\n case '':\n {\n dname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n wb.Names.push(dname);\n }\n break;\n\n case '':\n break;\n\n /* 18.2.2 calcPr CT_CalcPr ? */\n\n case '':\n delete y[0];\n wb.CalcPr = y;\n break;\n\n case '':\n break;\n\n /* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.18 pivotCaches CT_PivotCaches ? */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.22 smartTagType CT_SmartTagType ? */\n\n case '':\n break;\n\n /* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\n case '':\n break;\n\n /* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.7 ext CT_Extension + */\n\n case '':\n pass = false;\n break;\n\n /* Others */\n\n case '':\n pass = true;\n break;\n\n case '':\n pass = false;\n break;\n\n /* TODO */\n\n case ' 0;\n /* fileVersion */\n\n /* fileSharing */\n\n var workbookPr = {\n codeName: \"ThisWorkbook\"\n };\n\n if (wb.Workbook && wb.Workbook.WBProps) {\n WBPropsDef.forEach(function (x) {\n if (wb.Workbook.WBProps[x[0]] == null) return;\n if (wb.Workbook.WBProps[x[0]] == x[1]) return;\n workbookPr[x[0]] = wb.Workbook.WBProps[x[0]];\n });\n\n if (wb.Workbook.WBProps.CodeName) {\n workbookPr.codeName = wb.Workbook.WBProps.CodeName;\n delete workbookPr.CodeName;\n }\n }\n\n o[o.length] = writextag('workbookPr', null, workbookPr);\n /* workbookProtection */\n\n var sheets = wb.Workbook && wb.Workbook.Sheets || [];\n var i = 0;\n /* bookViews only written if first worksheet is hidden */\n\n if (sheets && sheets[0] && !!sheets[0].Hidden) {\n o[o.length] = \"\";\n\n for (i = 0; i != wb.SheetNames.length; ++i) {\n if (!sheets[i]) break;\n if (!sheets[i].Hidden) break;\n }\n\n if (i == wb.SheetNames.length) i = 0;\n o[o.length] = '';\n o[o.length] = \"\";\n }\n\n o[o.length] = \"\";\n\n for (i = 0; i != wb.SheetNames.length; ++i) {\n var sht = {\n name: escapexml(wb.SheetNames[i].slice(0, 31))\n };\n sht.sheetId = \"\" + (i + 1);\n sht[\"r:id\"] = \"rId\" + (i + 1);\n if (sheets[i]) switch (sheets[i].Hidden) {\n case 1:\n sht.state = \"hidden\";\n break;\n\n case 2:\n sht.state = \"veryHidden\";\n break;\n }\n o[o.length] = writextag('sheet', null, sht);\n }\n\n o[o.length] = \"\";\n /* functionGroups */\n\n /* externalReferences */\n\n if (write_names) {\n o[o.length] = \"\";\n if (wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function (n) {\n var d = {\n name: n.Name\n };\n if (n.Comment) d.comment = n.Comment;\n if (n.Sheet != null) d.localSheetId = \"\" + n.Sheet;\n if (n.Hidden) d.hidden = \"1\";\n if (!n.Ref) return;\n o[o.length] = writextag('definedName', escapexml(n.Ref), d);\n });\n o[o.length] = \"\";\n }\n /* calcPr */\n\n /* oleSize */\n\n /* customWorkbookViews */\n\n /* pivotCaches */\n\n /* smartTagPr */\n\n /* smartTagTypes */\n\n /* webPublishing */\n\n /* fileRecoveryPr */\n\n /* webPublishObjects */\n\n /* extLst */\n\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.304 BrtBundleSh */\n\n\n function parse_BrtBundleSh(data, length) {\n var z = {};\n z.Hidden = data.read_shift(4); //hsState ST_SheetState\n\n z.iTabID = data.read_shift(4);\n z.strRelID = parse_RelID(data, length - 8);\n z.name = parse_XLWideString(data);\n return z;\n }\n\n function write_BrtBundleSh(data, o) {\n if (!o) o = new_buf(127);\n o.write_shift(4, data.Hidden);\n o.write_shift(4, data.iTabID);\n write_RelID(data.strRelID, o);\n write_XLWideString(data.name.slice(0, 31), o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.815 BrtWbProp */\n\n\n function parse_BrtWbProp(data, length) {\n var o = {};\n var flags = data.read_shift(4);\n o.defaultThemeVersion = data.read_shift(4);\n var strName = length > 8 ? parse_XLWideString(data) : \"\";\n if (strName.length > 0) o.CodeName = strName;\n o.autoCompressPictures = !!(flags & 0x10000);\n o.backupFile = !!(flags & 0x40);\n o.checkCompatibility = !!(flags & 0x1000);\n o.date1904 = !!(flags & 0x01);\n o.filterPrivacy = !!(flags & 0x08);\n o.hidePivotFieldList = !!(flags & 0x400);\n o.promptedSolutions = !!(flags & 0x10);\n o.publishItems = !!(flags & 0x800);\n o.refreshAllConnections = !!(flags & 0x40000);\n o.saveExternalLinkValues = !!(flags & 0x80);\n o.showBorderUnselectedTables = !!(flags & 0x04);\n o.showInkAnnotation = !!(flags & 0x20);\n o.showObjects = [\"all\", \"placeholders\", \"none\"][flags >> 13 & 0x03];\n o.showPivotChartFilter = !!(flags & 0x8000);\n o.updateLinks = [\"userSet\", \"never\", \"always\"][flags >> 8 & 0x03];\n return o;\n }\n\n function write_BrtWbProp(data, o) {\n if (!o) o = new_buf(72);\n var flags = 0;\n\n if (data) {\n /* TODO: mirror parse_BrtWbProp fields */\n if (data.filterPrivacy) flags |= 0x08;\n }\n\n o.write_shift(4, flags);\n o.write_shift(4, 0);\n write_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n return o.slice(0, o.l);\n }\n\n function parse_BrtFRTArchID$(data, length) {\n var o = {};\n data.read_shift(4);\n o.ArchID = data.read_shift(4);\n data.l += length - 8;\n return o;\n }\n /* [MS-XLSB] 2.4.687 BrtName */\n\n\n function parse_BrtName(data, length, opts) {\n var end = data.l + length;\n data.l += 4; //var flags = data.read_shift(4);\n\n data.l += 1; //var chKey = data.read_shift(1);\n\n var itab = data.read_shift(4);\n var name = parse_XLNameWideString(data);\n var formula = parse_XLSBNameParsedFormula(data, 0, opts);\n var comment = parse_XLNullableWideString(data); //if(0 /* fProc */) {\n // unusedstring1: XLNullableWideString\n // description: XLNullableWideString\n // helpTopic: XLNullableWideString\n // unusedstring2: XLNullableWideString\n //}\n\n data.l = end;\n var out = {\n Name: name,\n Ptg: formula\n };\n if (itab < 0xFFFFFFF) out.Sheet = itab;\n if (comment) out.Comment = comment;\n return out;\n }\n /* [MS-XLSB] 2.1.7.61 Workbook */\n\n\n function parse_wb_bin(data, opts) {\n var wb = {\n AppVersion: {},\n WBProps: {},\n WBView: [],\n Sheets: [],\n CalcPr: {},\n xmlns: \"\"\n };\n var state = [];\n var pass = false;\n if (!opts) opts = {};\n opts.biff = 12;\n var Names = [];\n var supbooks = [[]];\n supbooks.SheetNames = [];\n supbooks.XTI = [];\n XLSBRecordEnum[0x0010] = {\n n: \"BrtFRTArchID$\",\n f: parse_BrtFRTArchID$\n };\n recordhopper(data, function hopper_wb(val, R_n, RT) {\n switch (RT) {\n case 0x009C:\n /* 'BrtBundleSh' */\n supbooks.SheetNames.push(val.name);\n wb.Sheets.push(val);\n break;\n\n case 0x0099:\n /* 'BrtWbProp' */\n wb.WBProps = val;\n break;\n\n case 0x0027:\n /* 'BrtName' */\n if (val.Sheet != null) opts.SID = val.Sheet;\n val.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n delete opts.SID;\n delete val.Ptg;\n Names.push(val);\n break;\n\n case 0x040C:\n /* 'BrtNameExt' */\n break;\n\n case 0x0165:\n /* 'BrtSupSelf' */\n\n case 0x0166:\n /* 'BrtSupSame' */\n\n case 0x0163:\n /* 'BrtSupBookSrc' */\n\n case 0x029B:\n /* 'BrtSupAddin' */\n if (!supbooks[0].length) supbooks[0] = [RT, val];else supbooks.push([RT, val]);\n supbooks[supbooks.length - 1].XTI = [];\n break;\n\n case 0x016A:\n /* 'BrtExternSheet' */\n if (supbooks.length === 0) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n supbooks.XTI = supbooks.XTI.concat(val);\n break;\n\n case 0x0169:\n /* 'BrtPlaceholderName' */\n break;\n\n case 0x0817:\n /* 'BrtAbsPath15' */\n\n case 0x009E:\n /* 'BrtBookView' */\n\n case 0x008F:\n /* 'BrtBeginBundleShs' */\n\n case 0x0298:\n /* 'BrtBeginFnGroup' */\n\n case 0x0161:\n /* 'BrtBeginExternals' */\n break;\n\n /* case 'BrtModelTimeGroupingCalcCol' */\n\n case 0x0C00:\n /* 'BrtUid' */\n\n case 0x0C01:\n /* 'BrtRevisionPtr' */\n\n case 0x0216:\n /* 'BrtBookProtection' */\n\n case 0x02A5:\n /* 'BrtBookProtectionIso' */\n\n case 0x009D:\n /* 'BrtCalcProp' */\n\n case 0x0262:\n /* 'BrtCrashRecErr' */\n\n case 0x0802:\n /* 'BrtDecoupledPivotCacheID' */\n\n case 0x009B:\n /* 'BrtFileRecover' */\n\n case 0x0224:\n /* 'BrtFileSharing' */\n\n case 0x02A4:\n /* 'BrtFileSharingIso' */\n\n case 0x0080:\n /* 'BrtFileVersion' */\n\n case 0x0299:\n /* 'BrtFnGroup' */\n\n case 0x0850:\n /* 'BrtModelRelationship' */\n\n case 0x084D:\n /* 'BrtModelTable' */\n\n case 0x0225:\n /* 'BrtOleSize' */\n\n case 0x0805:\n /* 'BrtPivotTableRef' */\n\n case 0x0254:\n /* 'BrtSmartTagType' */\n\n case 0x081C:\n /* 'BrtTableSlicerCacheID' */\n\n case 0x081B:\n /* 'BrtTableSlicerCacheIDs' */\n\n case 0x0822:\n /* 'BrtTimelineCachePivotCacheID' */\n\n case 0x018D:\n /* 'BrtUserBookView' */\n\n case 0x009A:\n /* 'BrtWbFactoid' */\n\n case 0x045D:\n /* 'BrtWbProp14' */\n\n case 0x0229:\n /* 'BrtWebOpt' */\n\n case 0x082B:\n /* 'BrtWorkBookPr15' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n state.pop();\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n case 0x0010:\n /* 'BrtFRTArchID$' */\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF && state[state.length - 1] != \"BrtACBegin\" && state[state.length - 1] != \"BrtFRTBegin\") throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n }, opts);\n parse_wb_defaults(wb); // $FlowIgnore\n\n wb.Names = Names;\n wb.supbooks = supbooks;\n return wb;\n }\n\n function write_BUNDLESHS(ba, wb) {\n write_record(ba, \"BrtBeginBundleShs\");\n\n for (var idx = 0; idx != wb.SheetNames.length; ++idx) {\n var viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n var d = {\n Hidden: viz,\n iTabID: idx + 1,\n strRelID: 'rId' + (idx + 1),\n name: wb.SheetNames[idx]\n };\n write_record(ba, \"BrtBundleSh\", write_BrtBundleSh(d));\n }\n\n write_record(ba, \"BrtEndBundleShs\");\n }\n /* [MS-XLSB] 2.4.649 BrtFileVersion */\n\n\n function write_BrtFileVersion(data, o) {\n if (!o) o = new_buf(127);\n\n for (var i = 0; i != 4; ++i) {\n o.write_shift(4, 0);\n }\n\n write_XLWideString(\"SheetJS\", o);\n write_XLWideString(XLSX.version, o);\n write_XLWideString(XLSX.version, o);\n write_XLWideString(\"7262\", o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.301 BrtBookView */\n\n\n function write_BrtBookView(idx, o) {\n if (!o) o = new_buf(29);\n o.write_shift(-4, 0);\n o.write_shift(-4, 460);\n o.write_shift(4, 28800);\n o.write_shift(4, 17600);\n o.write_shift(4, 500);\n o.write_shift(4, idx);\n o.write_shift(4, idx);\n var flags = 0x78;\n o.write_shift(1, flags);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n\n function write_BOOKVIEWS(ba, wb) {\n /* required if hidden tab appears before visible tab */\n if (!wb.Workbook || !wb.Workbook.Sheets) return;\n var sheets = wb.Workbook.Sheets;\n var i = 0,\n vistab = -1,\n hidden = -1;\n\n for (; i < sheets.length; ++i) {\n if (!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;else if (sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n }\n\n if (hidden > vistab) return;\n write_record(ba, \"BrtBeginBookViews\");\n write_record(ba, \"BrtBookView\", write_BrtBookView(vistab));\n /* 1*(BrtBookView *FRT) */\n\n write_record(ba, \"BrtEndBookViews\");\n }\n /* [MS-XLSB] 2.4.305 BrtCalcProp */\n\n /*function write_BrtCalcProp(data, o) {\n \tif(!o) o = new_buf(26);\n \to.write_shift(4,0); // force recalc\n \to.write_shift(4,1);\n \to.write_shift(4,0);\n \twrite_Xnum(0, o);\n \to.write_shift(-4, 1023);\n \to.write_shift(1, 0x33);\n \to.write_shift(1, 0x00);\n \treturn o;\n }*/\n\n /* [MS-XLSB] 2.4.646 BrtFileRecover */\n\n /*function write_BrtFileRecover(data, o) {\n \tif(!o) o = new_buf(1);\n \to.write_shift(1,0);\n \treturn o;\n }*/\n\n /* [MS-XLSB] 2.1.7.61 Workbook */\n\n\n function write_wb_bin(wb, opts) {\n var ba = buf_array();\n write_record(ba, \"BrtBeginBook\");\n write_record(ba, \"BrtFileVersion\", write_BrtFileVersion());\n /* [[BrtFileSharingIso] BrtFileSharing] */\n\n write_record(ba, \"BrtWbProp\", write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n /* [ACABSPATH] */\n\n /* [[BrtBookProtectionIso] BrtBookProtection] */\n\n write_BOOKVIEWS(ba, wb, opts);\n write_BUNDLESHS(ba, wb, opts);\n /* [FNGROUP] */\n\n /* [EXTERNALS] */\n\n /* *BrtName */\n\n /* write_record(ba, \"BrtCalcProp\", write_BrtCalcProp()); */\n\n /* [BrtOleSize] */\n\n /* *(BrtUserBookView *FRT) */\n\n /* [PIVOTCACHEIDS] */\n\n /* [BrtWbFactoid] */\n\n /* [SMARTTAGTYPES] */\n\n /* [BrtWebOpt] */\n\n /* write_record(ba, \"BrtFileRecover\", write_BrtFileRecover()); */\n\n /* [WEBPUBITEMS] */\n\n /* [CRERRS] */\n\n /* FRTWORKBOOK */\n\n write_record(ba, \"BrtEndBook\");\n return ba.end();\n }\n\n function parse_wb(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_wb_bin(data, opts);\n return parse_wb_xml(data, opts);\n }\n\n function parse_ws(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_ws_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_ws_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_cs(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_cs_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_cs_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_ms(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_ms_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_ms_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_ds(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_ds_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_ds_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_sty(data, name, themes, opts) {\n if (name.slice(-4) === \".bin\") return parse_sty_bin(data, themes, opts);\n return parse_sty_xml(data, themes, opts);\n }\n\n function parse_theme(data, name, opts) {\n return parse_theme_xml(data, opts);\n }\n\n function parse_sst(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_sst_bin(data, opts);\n return parse_sst_xml(data, opts);\n }\n\n function parse_cmnt(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_comments_bin(data, opts);\n return parse_comments_xml(data, opts);\n }\n\n function parse_cc(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_cc_bin(data, name, opts);\n return parse_cc_xml(data, name, opts);\n }\n\n function parse_xlink(data, rel, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_xlink_bin(data, rel, name, opts);\n return parse_xlink_xml(data, rel, name, opts);\n }\n\n function write_wb(wb, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n }\n\n function write_ws(data, name, opts, wb, rels) {\n return (name.slice(-4) === \".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n } // eslint-disable-next-line no-unused-vars\n\n\n function write_cs(data, name, opts, wb, rels) {\n return (name.slice(-4) === \".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n }\n\n function write_sty(data, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n }\n\n function write_sst(data, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n }\n\n function write_cmnt(data, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n }\n /*\n function write_cc(data, name:string, opts) {\n \treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n }\n */\n\n\n var attregexg2 = /([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\n var attregex2 = /([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\n\n function xlml_parsexmltag(tag, skip_root) {\n var words = tag.split(/\\s+/);\n var z = [];\n if (!skip_root) z[0] = words[0];\n if (words.length === 1) return z;\n var m = tag.match(attregexg2),\n y,\n j,\n w,\n i;\n if (m) for (i = 0; i != m.length; ++i) {\n y = m[i].match(attregex2);\n if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n z[w] = y[2].slice(1, y[2].length - 1);\n }\n }\n return z;\n }\n\n function xlml_parsexmltagobj(tag) {\n var words = tag.split(/\\s+/);\n var z = {};\n if (words.length === 1) return z;\n var m = tag.match(attregexg2),\n y,\n j,\n w,\n i;\n if (m) for (i = 0; i != m.length; ++i) {\n y = m[i].match(attregex2);\n if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n z[w] = y[2].slice(1, y[2].length - 1);\n }\n }\n return z;\n } // ----\n\n\n function xlml_format(format, value) {\n var fmt = XLMLFormatMap[format] || unescapexml(format);\n if (fmt === \"General\") return SSF._general(value);\n return SSF.format(fmt, value);\n }\n\n function xlml_set_custprop(Custprops, key, cp, val) {\n var oval = val;\n\n switch ((cp[0].match(/dt:dt=\"([\\w.]+)\"/) || [\"\", \"\"])[1]) {\n case \"boolean\":\n oval = parsexmlbool(val);\n break;\n\n case \"i2\":\n case \"int\":\n oval = parseInt(val, 10);\n break;\n\n case \"r4\":\n case \"float\":\n oval = parseFloat(val);\n break;\n\n case \"date\":\n case \"dateTime.tz\":\n oval = parseDate(val);\n break;\n\n case \"i8\":\n case \"string\":\n case \"fixed\":\n case \"uuid\":\n case \"bin.base64\":\n break;\n\n default:\n throw new Error(\"bad custprop:\" + cp[0]);\n }\n\n Custprops[unescapexml(key)] = oval;\n }\n\n function safe_format_xlml(cell, nf, o) {\n if (cell.t === 'z') return;\n if (!o || o.cellText !== false) try {\n if (cell.t === 'e') {\n cell.w = cell.w || BErr[cell.v];\n } else if (nf === \"General\") {\n if (cell.t === 'n') {\n if ((cell.v | 0) === cell.v) cell.w = SSF._general_int(cell.v);else cell.w = SSF._general_num(cell.v);\n } else cell.w = SSF._general(cell.v);\n } else cell.w = xlml_format(nf || \"General\", cell.v);\n } catch (e) {\n if (o.WTF) throw e;\n }\n\n try {\n var z = XLMLFormatMap[nf] || nf || \"General\";\n if (o.cellNF) cell.z = z;\n\n if (o.cellDates && cell.t == 'n' && SSF.is_date(z)) {\n var _d = SSF.parse_date_code(cell.v);\n\n if (_d) {\n cell.t = 'd';\n cell.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n } catch (e) {\n if (o.WTF) throw e;\n }\n }\n\n function process_style_xlml(styles, stag, opts) {\n if (opts.cellStyles) {\n if (stag.Interior) {\n var I = stag.Interior;\n if (I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n }\n }\n\n styles[stag.ID] = stag;\n }\n /* TODO: there must exist some form of OSP-blessed spec */\n\n\n function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o) {\n var nf = \"General\",\n sid = cell.StyleID,\n S = {};\n o = o || {};\n var interiors = [];\n var i = 0;\n if (sid === undefined && row) sid = row.StyleID;\n if (sid === undefined && csty) sid = csty.StyleID;\n\n while (styles[sid] !== undefined) {\n if (styles[sid].nf) nf = styles[sid].nf;\n if (styles[sid].Interior) interiors.push(styles[sid].Interior);\n if (!styles[sid].Parent) break;\n sid = styles[sid].Parent;\n }\n\n switch (data.Type) {\n case 'Boolean':\n cell.t = 'b';\n cell.v = parsexmlbool(xml);\n break;\n\n case 'String':\n cell.t = 's';\n cell.r = xlml_fixstr(unescapexml(xml));\n cell.v = xml.indexOf(\"<\") > -1 ? unescapexml(ss || xml).replace(/<.*?>/g, \"\") : cell.r; // todo: BR etc\n\n break;\n\n case 'DateTime':\n if (xml.slice(-1) != \"Z\") xml += \"Z\";\n cell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n if (cell.v !== cell.v) cell.v = unescapexml(xml);else if (cell.v < 60) cell.v = cell.v - 1;\n if (!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\n /* falls through */\n\n case 'Number':\n if (cell.v === undefined) cell.v = +xml;\n if (!cell.t) cell.t = 'n';\n break;\n\n case 'Error':\n cell.t = 'e';\n cell.v = RBErr[xml];\n if (o.cellText !== false) cell.w = xml;\n break;\n\n default:\n if (xml == \"\" && ss == \"\") {\n cell.t = 'z';\n } else {\n cell.t = 's';\n cell.v = xlml_fixstr(ss || xml);\n }\n\n break;\n }\n\n safe_format_xlml(cell, nf, o);\n\n if (o.cellFormula !== false) {\n if (cell.Formula) {\n var fstr = unescapexml(cell.Formula);\n /* strictly speaking, the leading = is required but some writers omit */\n\n if (fstr.charCodeAt(0) == 61\n /* = */\n ) fstr = fstr.slice(1);\n cell.f = rc_to_a1(fstr, base);\n delete cell.Formula;\n if (cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);else if (cell.ArrayRange) {\n cell.F = rc_to_a1(cell.ArrayRange, base);\n arrayf.push([safe_decode_range(cell.F), cell.F]);\n }\n } else {\n for (i = 0; i < arrayf.length; ++i) {\n if (base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r) if (base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c) cell.F = arrayf[i][1];\n }\n }\n }\n\n if (o.cellStyles) {\n interiors.forEach(function (x) {\n if (!S.patternType && x.patternType) S.patternType = x.patternType;\n });\n cell.s = S;\n }\n\n if (cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n }\n\n function xlml_clean_comment(comment) {\n comment.t = comment.v || \"\";\n comment.t = comment.t.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n comment.v = comment.w = comment.ixfe = undefined;\n }\n\n function xlml_normalize(d) {\n if (has_buf && Buffer.isBuffer(d)) return d.toString('utf8');\n if (typeof d === 'string') return d;\n /* duktape */\n\n if (typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n throw new Error(\"Bad input format: expected Buffer or string\");\n }\n /* TODO: Everything */\n\n /* UOS uses CJK in tags */\n\n\n var xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg; //var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\n function parse_xlml_xml(d, _opts) {\n var opts = _opts || {};\n make_ssf(SSF);\n var str = debom(xlml_normalize(d));\n\n if (opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n if (typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str));else str = utf8read(str);\n }\n\n var opening = str.slice(0, 1024).toLowerCase(),\n ishtml = false;\n\n if ((opening.indexOf(\">\") & 1023) > Math.min(opening.indexOf(\",\") & 1023, opening.indexOf(\";\") & 1023)) {\n var _o = dup(opts);\n\n _o.type = \"string\";\n return PRN.to_workbook(str, _o);\n }\n\n if (opening.indexOf(\"= 0) ishtml = true;\n });\n if (ishtml) return HTML_.to_workbook(str, opts);\n var Rn;\n var state = [],\n tmp;\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var sheets = {},\n sheetnames = [],\n cursheet = opts.dense ? [] : {},\n sheetname = \"\";\n var table = {},\n cell = {},\n row = {}; // eslint-disable-line no-unused-vars\n\n var dtag = xlml_parsexmltag(''),\n didx = 0;\n var c = 0,\n r = 0;\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var styles = {},\n stag = {};\n var ss = \"\",\n fidx = 0;\n var merges = [];\n var Props = {},\n Custprops = {},\n pidx = 0,\n cp = [];\n var comments = [],\n comment = {};\n var cstys = [],\n csty,\n seencol = false;\n var arrayf = [];\n var rowinfo = [],\n rowobj = {},\n cc = 0,\n rr = 0;\n var Workbook = {\n Sheets: [],\n WBProps: {\n date1904: false\n }\n },\n wsprops = {};\n xlmlregex.lastIndex = 0;\n str = str.replace(//mg, \"\");\n var raw_Rn3 = \"\";\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase()) {\n case 'data'\n /*case 'Data'*/\n :\n if (raw_Rn3 == \"data\") {\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n }\n\n if (state[state.length - 1][1]) break;\n if (Rn[1] === '/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length - 1][0] ==\n /*\"Comment\"*/\n \"comment\" ? comment : cell, {\n c: c,\n r: r\n }, styles, cstys[c], row, arrayf, opts);else {\n ss = \"\";\n dtag = xlml_parsexmltag(Rn[0]);\n didx = Rn.index + Rn[0].length;\n }\n break;\n\n case 'cell'\n /*case 'Cell'*/\n :\n if (Rn[1] === '/') {\n if (comments.length > 0) cell.c = comments;\n\n if ((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n if (opts.dense) {\n if (!cursheet[r]) cursheet[r] = [];\n cursheet[r][c] = cell;\n } else cursheet[encode_col(c) + encode_row(r)] = cell;\n }\n\n if (cell.HRef) {\n cell.l = {\n Target: unescapexml(cell.HRef)\n };\n if (cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n delete cell.HRef;\n delete cell.HRefScreenTip;\n }\n\n if (cell.MergeAcross || cell.MergeDown) {\n cc = c + (parseInt(cell.MergeAcross, 10) | 0);\n rr = r + (parseInt(cell.MergeDown, 10) | 0);\n merges.push({\n s: {\n c: c,\n r: r\n },\n e: {\n c: cc,\n r: rr\n }\n });\n }\n\n if (!opts.sheetStubs) {\n if (cell.MergeAcross) c = cc + 1;else ++c;\n } else if (cell.MergeAcross || cell.MergeDown) {\n for (var cma = c; cma <= cc; ++cma) {\n for (var cmd = r; cmd <= rr; ++cmd) {\n if (cma > c || cmd > r) {\n if (opts.dense) {\n if (!cursheet[cmd]) cursheet[cmd] = [];\n cursheet[cmd][cma] = {\n t: 'z'\n };\n } else cursheet[encode_col(cma) + encode_row(cmd)] = {\n t: 'z'\n };\n }\n }\n }\n\n c = cc + 1;\n } else ++c;\n } else {\n cell = xlml_parsexmltagobj(Rn[0]);\n if (cell.Index) c = +cell.Index - 1;\n if (c < refguess.s.c) refguess.s.c = c;\n if (c > refguess.e.c) refguess.e.c = c;\n if (Rn[0].slice(-2) === \"/>\") ++c;\n comments = [];\n }\n\n break;\n\n case 'row'\n /*case 'Row'*/\n :\n if (Rn[1] === '/' || Rn[0].slice(-2) === \"/>\") {\n if (r < refguess.s.r) refguess.s.r = r;\n if (r > refguess.e.r) refguess.e.r = r;\n\n if (Rn[0].slice(-2) === \"/>\") {\n row = xlml_parsexmltag(Rn[0]);\n if (row.Index) r = +row.Index - 1;\n }\n\n c = 0;\n ++r;\n } else {\n row = xlml_parsexmltag(Rn[0]);\n if (row.Index) r = +row.Index - 1;\n rowobj = {};\n\n if (row.AutoFitHeight == \"0\" || row.Height) {\n rowobj.hpx = parseInt(row.Height, 10);\n rowobj.hpt = px2pt(rowobj.hpx);\n rowinfo[r] = rowobj;\n }\n\n if (row.Hidden == \"1\") {\n rowobj.hidden = true;\n rowinfo[r] = rowobj;\n }\n }\n\n break;\n\n case 'worksheet'\n /*case 'Worksheet'*/\n :\n /* TODO: read range from FullRows/FullColumns */\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n sheetnames.push(sheetname);\n\n if (refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n cursheet[\"!ref\"] = encode_range(refguess);\n\n if (opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n cursheet[\"!fullref\"] = cursheet[\"!ref\"];\n refguess.e.r = opts.sheetRows - 1;\n cursheet[\"!ref\"] = encode_range(refguess);\n }\n }\n\n if (merges.length) cursheet[\"!merges\"] = merges;\n if (cstys.length > 0) cursheet[\"!cols\"] = cstys;\n if (rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n sheets[sheetname] = cursheet;\n } else {\n refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n r = c = 0;\n state.push([Rn[3], false]);\n tmp = xlml_parsexmltag(Rn[0]);\n sheetname = unescapexml(tmp.Name);\n cursheet = opts.dense ? [] : {};\n merges = [];\n arrayf = [];\n rowinfo = [];\n wsprops = {\n name: sheetname,\n Hidden: 0\n };\n Workbook.Sheets.push(wsprops);\n }\n\n break;\n\n case 'table'\n /*case 'Table'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].slice(-2) == \"/>\") break;else {\n table = xlml_parsexmltag(Rn[0]);\n state.push([Rn[3], false]);\n cstys = [];\n seencol = false;\n }\n\n break;\n\n case 'style'\n /*case 'Style'*/\n :\n if (Rn[1] === '/') process_style_xlml(styles, stag, opts);else stag = xlml_parsexmltag(Rn[0]);\n break;\n\n case 'numberformat'\n /*case 'NumberFormat'*/\n :\n stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n if (XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\n for (var ssfidx = 0; ssfidx != 0x188; ++ssfidx) {\n if (SSF._table[ssfidx] == stag.nf) break;\n }\n\n if (ssfidx == 0x188) for (ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) {\n if (SSF._table[ssfidx] == null) {\n SSF.load(stag.nf, ssfidx);\n break;\n }\n }\n break;\n\n case 'column'\n /*case 'Column'*/\n :\n if (state[state.length - 1][0] !==\n /*'Table'*/\n 'table') break;\n csty = xlml_parsexmltag(Rn[0]);\n\n if (csty.Hidden) {\n csty.hidden = true;\n delete csty.Hidden;\n }\n\n if (csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\n if (!seencol && csty.wpx > 10) {\n seencol = true;\n MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\n for (var _col = 0; _col < cstys.length; ++_col) {\n if (cstys[_col]) process_col(cstys[_col]);\n }\n }\n\n if (seencol) process_col(csty);\n cstys[csty.Index - 1 || cstys.length] = csty;\n\n for (var i = 0; i < +csty.Span; ++i) {\n cstys[cstys.length] = dup(csty);\n }\n\n break;\n\n case 'namedrange'\n /*case 'NamedRange'*/\n :\n if (Rn[1] === '/') break;\n if (!Workbook.Names) Workbook.Names = [];\n\n var _NamedRange = parsexmltag(Rn[0]);\n\n var _DefinedName = {\n Name: _NamedRange.Name,\n Ref: rc_to_a1(_NamedRange.RefersTo.slice(1), {\n r: 0,\n c: 0\n })\n };\n if (Workbook.Sheets.length > 0) _DefinedName.Sheet = Workbook.Sheets.length - 1;\n Workbook.Names.push(_DefinedName);\n break;\n\n case 'namedcell'\n /*case 'NamedCell'*/\n :\n break;\n\n case 'b'\n /*case 'B'*/\n :\n break;\n\n case 'i'\n /*case 'I'*/\n :\n break;\n\n case 'u'\n /*case 'U'*/\n :\n break;\n\n case 's'\n /*case 'S'*/\n :\n break;\n\n case 'em'\n /*case 'EM'*/\n :\n break;\n\n case 'h2'\n /*case 'H2'*/\n :\n break;\n\n case 'h3'\n /*case 'H3'*/\n :\n break;\n\n case 'sub'\n /*case 'Sub'*/\n :\n break;\n\n case 'sup'\n /*case 'Sup'*/\n :\n break;\n\n case 'span'\n /*case 'Span'*/\n :\n break;\n\n case 'alignment'\n /*case 'Alignment'*/\n :\n break;\n\n case 'borders'\n /*case 'Borders'*/\n :\n break;\n\n case 'border'\n /*case 'Border'*/\n :\n break;\n\n case 'font'\n /*case 'Font'*/\n :\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") ss += str.slice(fidx, Rn.index);else fidx = Rn.index + Rn[0].length;\n break;\n\n case 'interior'\n /*case 'Interior'*/\n :\n if (!opts.cellStyles) break;\n stag.Interior = xlml_parsexmltag(Rn[0]);\n break;\n\n case 'protection'\n /*case 'Protection'*/\n :\n break;\n\n case 'author'\n /*case 'Author'*/\n :\n case 'title'\n /*case 'Title'*/\n :\n case 'description'\n /*case 'Description'*/\n :\n case 'created'\n /*case 'Created'*/\n :\n case 'keywords'\n /*case 'Keywords'*/\n :\n case 'subject'\n /*case 'Subject'*/\n :\n case 'category'\n /*case 'Category'*/\n :\n case 'company'\n /*case 'Company'*/\n :\n case 'lastauthor'\n /*case 'LastAuthor'*/\n :\n case 'lastsaved'\n /*case 'LastSaved'*/\n :\n case 'lastprinted'\n /*case 'LastPrinted'*/\n :\n case 'version'\n /*case 'Version'*/\n :\n case 'revision'\n /*case 'Revision'*/\n :\n case 'totaltime'\n /*case 'TotalTime'*/\n :\n case 'hyperlinkbase'\n /*case 'HyperlinkBase'*/\n :\n case 'manager'\n /*case 'Manager'*/\n :\n case 'contentstatus'\n /*case 'ContentStatus'*/\n :\n case 'identifier'\n /*case 'Identifier'*/\n :\n case 'language'\n /*case 'Language'*/\n :\n case 'appname'\n /*case 'AppName'*/\n :\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));else pidx = Rn.index + Rn[0].length;\n break;\n\n case 'paragraphs'\n /*case 'Paragraphs'*/\n :\n break;\n\n case 'styles'\n /*case 'Styles'*/\n :\n case 'workbook'\n /*case 'Workbook'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else state.push([Rn[3], false]);\n\n break;\n\n case 'comment'\n /*case 'Comment'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n xlml_clean_comment(comment);\n comments.push(comment);\n } else {\n state.push([Rn[3], false]);\n tmp = xlml_parsexmltag(Rn[0]);\n comment = {\n a: tmp.Author\n };\n }\n\n break;\n\n case 'autofilter'\n /*case 'AutoFilter'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n var AutoFilter = xlml_parsexmltag(Rn[0]);\n cursheet['!autofilter'] = {\n ref: rc_to_a1(AutoFilter.Range).replace(/\\$/g, \"\")\n };\n state.push([Rn[3], true]);\n }\n\n break;\n\n case 'name'\n /*case 'Name'*/\n :\n break;\n\n case 'datavalidation'\n /*case 'DataValidation'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else {\n if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n }\n\n break;\n\n case 'pixelsperinch'\n /*case 'PixelsPerInch'*/\n :\n break;\n\n case 'componentoptions'\n /*case 'ComponentOptions'*/\n :\n case 'documentproperties'\n /*case 'DocumentProperties'*/\n :\n case 'customdocumentproperties'\n /*case 'CustomDocumentProperties'*/\n :\n case 'officedocumentsettings'\n /*case 'OfficeDocumentSettings'*/\n :\n case 'pivottable'\n /*case 'PivotTable'*/\n :\n case 'pivotcache'\n /*case 'PivotCache'*/\n :\n case 'names'\n /*case 'Names'*/\n :\n case 'mapinfo'\n /*case 'MapInfo'*/\n :\n case 'pagebreaks'\n /*case 'PageBreaks'*/\n :\n case 'querytable'\n /*case 'QueryTable'*/\n :\n case 'sorting'\n /*case 'Sorting'*/\n :\n case 'schema'\n /*case 'Schema'*/\n : //case 'data' /*case 'data'*/:\n\n case 'conditionalformatting'\n /*case 'ConditionalFormatting'*/\n :\n case 'smarttagtype'\n /*case 'SmartTagType'*/\n :\n case 'smarttags'\n /*case 'SmartTags'*/\n :\n case 'excelworkbook'\n /*case 'ExcelWorkbook'*/\n :\n case 'workbookoptions'\n /*case 'WorkbookOptions'*/\n :\n case 'worksheetoptions'\n /*case 'WorksheetOptions'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n\n default:\n /* FODS file root is */\n if (state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n /* UOS file root is */\n\n if (state.length == 0 && Rn[3] == \"uof\"\n /*\"UOF\"*/\n ) return parse_fods(str, opts);\n var seen = true;\n\n switch (state[state.length - 1][0]) {\n /* OfficeDocumentSettings */\n case 'officedocumentsettings'\n /*case 'OfficeDocumentSettings'*/\n :\n switch (Rn[3]) {\n case 'allowpng'\n /*case 'AllowPNG'*/\n :\n break;\n\n case 'removepersonalinformation'\n /*case 'RemovePersonalInformation'*/\n :\n break;\n\n case 'downloadcomponents'\n /*case 'DownloadComponents'*/\n :\n break;\n\n case 'locationofcomponents'\n /*case 'LocationOfComponents'*/\n :\n break;\n\n case 'colors'\n /*case 'Colors'*/\n :\n break;\n\n case 'color'\n /*case 'Color'*/\n :\n break;\n\n case 'index'\n /*case 'Index'*/\n :\n break;\n\n case 'rgb'\n /*case 'RGB'*/\n :\n break;\n\n case 'targetscreensize'\n /*case 'TargetScreenSize'*/\n :\n break;\n\n case 'readonlyrecommended'\n /*case 'ReadOnlyRecommended'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* ComponentOptions */\n\n case 'componentoptions'\n /*case 'ComponentOptions'*/\n :\n switch (Rn[3]) {\n case 'toolbar'\n /*case 'Toolbar'*/\n :\n break;\n\n case 'hideofficelogo'\n /*case 'HideOfficeLogo'*/\n :\n break;\n\n case 'spreadsheetautofit'\n /*case 'SpreadsheetAutoFit'*/\n :\n break;\n\n case 'label'\n /*case 'Label'*/\n :\n break;\n\n case 'caption'\n /*case 'Caption'*/\n :\n break;\n\n case 'maxheight'\n /*case 'MaxHeight'*/\n :\n break;\n\n case 'maxwidth'\n /*case 'MaxWidth'*/\n :\n break;\n\n case 'nextsheetnumber'\n /*case 'NextSheetNumber'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* ExcelWorkbook */\n\n case 'excelworkbook'\n /*case 'ExcelWorkbook'*/\n :\n switch (Rn[3]) {\n case 'date1904'\n /*case 'Date1904'*/\n :\n Workbook.WBProps.date1904 = true;\n break;\n\n case 'windowheight'\n /*case 'WindowHeight'*/\n :\n break;\n\n case 'windowwidth'\n /*case 'WindowWidth'*/\n :\n break;\n\n case 'windowtopx'\n /*case 'WindowTopX'*/\n :\n break;\n\n case 'windowtopy'\n /*case 'WindowTopY'*/\n :\n break;\n\n case 'tabratio'\n /*case 'TabRatio'*/\n :\n break;\n\n case 'protectstructure'\n /*case 'ProtectStructure'*/\n :\n break;\n\n case 'protectwindow'\n /*case 'ProtectWindow'*/\n :\n break;\n\n case 'protectwindows'\n /*case 'ProtectWindows'*/\n :\n break;\n\n case 'activesheet'\n /*case 'ActiveSheet'*/\n :\n break;\n\n case 'displayinknotes'\n /*case 'DisplayInkNotes'*/\n :\n break;\n\n case 'firstvisiblesheet'\n /*case 'FirstVisibleSheet'*/\n :\n break;\n\n case 'supbook'\n /*case 'SupBook'*/\n :\n break;\n\n case 'sheetname'\n /*case 'SheetName'*/\n :\n break;\n\n case 'sheetindex'\n /*case 'SheetIndex'*/\n :\n break;\n\n case 'sheetindexfirst'\n /*case 'SheetIndexFirst'*/\n :\n break;\n\n case 'sheetindexlast'\n /*case 'SheetIndexLast'*/\n :\n break;\n\n case 'dll'\n /*case 'Dll'*/\n :\n break;\n\n case 'acceptlabelsinformulas'\n /*case 'AcceptLabelsInFormulas'*/\n :\n break;\n\n case 'donotsavelinkvalues'\n /*case 'DoNotSaveLinkValues'*/\n :\n break;\n\n case 'iteration'\n /*case 'Iteration'*/\n :\n break;\n\n case 'maxiterations'\n /*case 'MaxIterations'*/\n :\n break;\n\n case 'maxchange'\n /*case 'MaxChange'*/\n :\n break;\n\n case 'path'\n /*case 'Path'*/\n :\n break;\n\n case 'xct'\n /*case 'Xct'*/\n :\n break;\n\n case 'count'\n /*case 'Count'*/\n :\n break;\n\n case 'selectedsheets'\n /*case 'SelectedSheets'*/\n :\n break;\n\n case 'calculation'\n /*case 'Calculation'*/\n :\n break;\n\n case 'uncalced'\n /*case 'Uncalced'*/\n :\n break;\n\n case 'startupprompt'\n /*case 'StartupPrompt'*/\n :\n break;\n\n case 'crn'\n /*case 'Crn'*/\n :\n break;\n\n case 'externname'\n /*case 'ExternName'*/\n :\n break;\n\n case 'formula'\n /*case 'Formula'*/\n :\n break;\n\n case 'colfirst'\n /*case 'ColFirst'*/\n :\n break;\n\n case 'collast'\n /*case 'ColLast'*/\n :\n break;\n\n case 'wantadvise'\n /*case 'WantAdvise'*/\n :\n break;\n\n case 'boolean'\n /*case 'Boolean'*/\n :\n break;\n\n case 'error'\n /*case 'Error'*/\n :\n break;\n\n case 'text'\n /*case 'Text'*/\n :\n break;\n\n case 'ole'\n /*case 'OLE'*/\n :\n break;\n\n case 'noautorecover'\n /*case 'NoAutoRecover'*/\n :\n break;\n\n case 'publishobjects'\n /*case 'PublishObjects'*/\n :\n break;\n\n case 'donotcalculatebeforesave'\n /*case 'DoNotCalculateBeforeSave'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'refmoder1c1'\n /*case 'RefModeR1C1'*/\n :\n break;\n\n case 'embedsavesmarttags'\n /*case 'EmbedSaveSmartTags'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* WorkbookOptions */\n\n case 'workbookoptions'\n /*case 'WorkbookOptions'*/\n :\n switch (Rn[3]) {\n case 'owcversion'\n /*case 'OWCVersion'*/\n :\n break;\n\n case 'height'\n /*case 'Height'*/\n :\n break;\n\n case 'width'\n /*case 'Width'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* WorksheetOptions */\n\n case 'worksheetoptions'\n /*case 'WorksheetOptions'*/\n :\n switch (Rn[3]) {\n case 'visible'\n /*case 'Visible'*/\n :\n if (Rn[0].slice(-2) === \"/>\") {\n /* empty */\n } else if (Rn[1] === \"/\") switch (str.slice(pidx, Rn.index)) {\n case \"SheetHidden\":\n wsprops.Hidden = 1;\n break;\n\n case \"SheetVeryHidden\":\n wsprops.Hidden = 2;\n break;\n } else pidx = Rn.index + Rn[0].length;\n\n break;\n\n case 'header'\n /*case 'Header'*/\n :\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n cursheet['!margins'].header = parsexmltag(Rn[0]).Margin;\n break;\n\n case 'footer'\n /*case 'Footer'*/\n :\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n cursheet['!margins'].footer = parsexmltag(Rn[0]).Margin;\n break;\n\n case 'pagemargins'\n /*case 'PageMargins'*/\n :\n var pagemargins = parsexmltag(Rn[0]);\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n if (pagemargins.Top) cursheet['!margins'].top = pagemargins.Top;\n if (pagemargins.Left) cursheet['!margins'].left = pagemargins.Left;\n if (pagemargins.Right) cursheet['!margins'].right = pagemargins.Right;\n if (pagemargins.Bottom) cursheet['!margins'].bottom = pagemargins.Bottom;\n break;\n\n case 'displayrighttoleft'\n /*case 'DisplayRightToLeft'*/\n :\n if (!Workbook.Views) Workbook.Views = [];\n if (!Workbook.Views[0]) Workbook.Views[0] = {};\n Workbook.Views[0].RTL = true;\n break;\n\n case 'freezepanes'\n /*case 'FreezePanes'*/\n :\n break;\n\n case 'frozennosplit'\n /*case 'FrozenNoSplit'*/\n :\n break;\n\n case 'splithorizontal'\n /*case 'SplitHorizontal'*/\n :\n case 'splitvertical'\n /*case 'SplitVertical'*/\n :\n break;\n\n case 'donotdisplaygridlines'\n /*case 'DoNotDisplayGridlines'*/\n :\n break;\n\n case 'activerow'\n /*case 'ActiveRow'*/\n :\n break;\n\n case 'activecol'\n /*case 'ActiveCol'*/\n :\n break;\n\n case 'toprowbottompane'\n /*case 'TopRowBottomPane'*/\n :\n break;\n\n case 'leftcolumnrightpane'\n /*case 'LeftColumnRightPane'*/\n :\n break;\n\n case 'unsynced'\n /*case 'Unsynced'*/\n :\n break;\n\n case 'print'\n /*case 'Print'*/\n :\n break;\n\n case 'printerrors'\n /*case 'PrintErrors'*/\n :\n break;\n\n case 'panes'\n /*case 'Panes'*/\n :\n break;\n\n case 'scale'\n /*case 'Scale'*/\n :\n break;\n\n case 'pane'\n /*case 'Pane'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'layout'\n /*case 'Layout'*/\n :\n break;\n\n case 'pagesetup'\n /*case 'PageSetup'*/\n :\n break;\n\n case 'selected'\n /*case 'Selected'*/\n :\n break;\n\n case 'protectobjects'\n /*case 'ProtectObjects'*/\n :\n break;\n\n case 'enableselection'\n /*case 'EnableSelection'*/\n :\n break;\n\n case 'protectscenarios'\n /*case 'ProtectScenarios'*/\n :\n break;\n\n case 'validprinterinfo'\n /*case 'ValidPrinterInfo'*/\n :\n break;\n\n case 'horizontalresolution'\n /*case 'HorizontalResolution'*/\n :\n break;\n\n case 'verticalresolution'\n /*case 'VerticalResolution'*/\n :\n break;\n\n case 'numberofcopies'\n /*case 'NumberofCopies'*/\n :\n break;\n\n case 'activepane'\n /*case 'ActivePane'*/\n :\n break;\n\n case 'toprowvisible'\n /*case 'TopRowVisible'*/\n :\n break;\n\n case 'leftcolumnvisible'\n /*case 'LeftColumnVisible'*/\n :\n break;\n\n case 'fittopage'\n /*case 'FitToPage'*/\n :\n break;\n\n case 'rangeselection'\n /*case 'RangeSelection'*/\n :\n break;\n\n case 'papersizeindex'\n /*case 'PaperSizeIndex'*/\n :\n break;\n\n case 'pagelayoutzoom'\n /*case 'PageLayoutZoom'*/\n :\n break;\n\n case 'pagebreakzoom'\n /*case 'PageBreakZoom'*/\n :\n break;\n\n case 'filteron'\n /*case 'FilterOn'*/\n :\n break;\n\n case 'fitwidth'\n /*case 'FitWidth'*/\n :\n break;\n\n case 'fitheight'\n /*case 'FitHeight'*/\n :\n break;\n\n case 'commentslayout'\n /*case 'CommentsLayout'*/\n :\n break;\n\n case 'zoom'\n /*case 'Zoom'*/\n :\n break;\n\n case 'lefttoright'\n /*case 'LeftToRight'*/\n :\n break;\n\n case 'gridlines'\n /*case 'Gridlines'*/\n :\n break;\n\n case 'allowsort'\n /*case 'AllowSort'*/\n :\n break;\n\n case 'allowfilter'\n /*case 'AllowFilter'*/\n :\n break;\n\n case 'allowinsertrows'\n /*case 'AllowInsertRows'*/\n :\n break;\n\n case 'allowdeleterows'\n /*case 'AllowDeleteRows'*/\n :\n break;\n\n case 'allowinsertcols'\n /*case 'AllowInsertCols'*/\n :\n break;\n\n case 'allowdeletecols'\n /*case 'AllowDeleteCols'*/\n :\n break;\n\n case 'allowinserthyperlinks'\n /*case 'AllowInsertHyperlinks'*/\n :\n break;\n\n case 'allowformatcells'\n /*case 'AllowFormatCells'*/\n :\n break;\n\n case 'allowsizecols'\n /*case 'AllowSizeCols'*/\n :\n break;\n\n case 'allowsizerows'\n /*case 'AllowSizeRows'*/\n :\n break;\n\n case 'nosummaryrowsbelowdetail'\n /*case 'NoSummaryRowsBelowDetail'*/\n :\n if (!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n cursheet[\"!outline\"].above = true;\n break;\n\n case 'tabcolorindex'\n /*case 'TabColorIndex'*/\n :\n break;\n\n case 'donotdisplayheadings'\n /*case 'DoNotDisplayHeadings'*/\n :\n break;\n\n case 'showpagelayoutzoom'\n /*case 'ShowPageLayoutZoom'*/\n :\n break;\n\n case 'nosummarycolumnsrightdetail'\n /*case 'NoSummaryColumnsRightDetail'*/\n :\n if (!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n cursheet[\"!outline\"].left = true;\n break;\n\n case 'blackandwhite'\n /*case 'BlackAndWhite'*/\n :\n break;\n\n case 'donotdisplayzeros'\n /*case 'DoNotDisplayZeros'*/\n :\n break;\n\n case 'displaypagebreak'\n /*case 'DisplayPageBreak'*/\n :\n break;\n\n case 'rowcolheadings'\n /*case 'RowColHeadings'*/\n :\n break;\n\n case 'donotdisplayoutline'\n /*case 'DoNotDisplayOutline'*/\n :\n break;\n\n case 'noorientation'\n /*case 'NoOrientation'*/\n :\n break;\n\n case 'allowusepivottables'\n /*case 'AllowUsePivotTables'*/\n :\n break;\n\n case 'zeroheight'\n /*case 'ZeroHeight'*/\n :\n break;\n\n case 'viewablerange'\n /*case 'ViewableRange'*/\n :\n break;\n\n case 'selection'\n /*case 'Selection'*/\n :\n break;\n\n case 'protectcontents'\n /*case 'ProtectContents'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* PivotTable */\n\n case 'pivottable'\n /*case 'PivotTable'*/\n :\n case 'pivotcache'\n /*case 'PivotCache'*/\n :\n switch (Rn[3]) {\n case 'immediateitemsondrop'\n /*case 'ImmediateItemsOnDrop'*/\n :\n break;\n\n case 'showpagemultipleitemlabel'\n /*case 'ShowPageMultipleItemLabel'*/\n :\n break;\n\n case 'compactrowindent'\n /*case 'CompactRowIndent'*/\n :\n break;\n\n case 'location'\n /*case 'Location'*/\n :\n break;\n\n case 'pivotfield'\n /*case 'PivotField'*/\n :\n break;\n\n case 'orientation'\n /*case 'Orientation'*/\n :\n break;\n\n case 'layoutform'\n /*case 'LayoutForm'*/\n :\n break;\n\n case 'layoutsubtotallocation'\n /*case 'LayoutSubtotalLocation'*/\n :\n break;\n\n case 'layoutcompactrow'\n /*case 'LayoutCompactRow'*/\n :\n break;\n\n case 'position'\n /*case 'Position'*/\n :\n break;\n\n case 'pivotitem'\n /*case 'PivotItem'*/\n :\n break;\n\n case 'datatype'\n /*case 'DataType'*/\n :\n break;\n\n case 'datafield'\n /*case 'DataField'*/\n :\n break;\n\n case 'sourcename'\n /*case 'SourceName'*/\n :\n break;\n\n case 'parentfield'\n /*case 'ParentField'*/\n :\n break;\n\n case 'ptlineitems'\n /*case 'PTLineItems'*/\n :\n break;\n\n case 'ptlineitem'\n /*case 'PTLineItem'*/\n :\n break;\n\n case 'countofsameitems'\n /*case 'CountOfSameItems'*/\n :\n break;\n\n case 'item'\n /*case 'Item'*/\n :\n break;\n\n case 'itemtype'\n /*case 'ItemType'*/\n :\n break;\n\n case 'ptsource'\n /*case 'PTSource'*/\n :\n break;\n\n case 'cacheindex'\n /*case 'CacheIndex'*/\n :\n break;\n\n case 'consolidationreference'\n /*case 'ConsolidationReference'*/\n :\n break;\n\n case 'filename'\n /*case 'FileName'*/\n :\n break;\n\n case 'reference'\n /*case 'Reference'*/\n :\n break;\n\n case 'nocolumngrand'\n /*case 'NoColumnGrand'*/\n :\n break;\n\n case 'norowgrand'\n /*case 'NoRowGrand'*/\n :\n break;\n\n case 'blanklineafteritems'\n /*case 'BlankLineAfterItems'*/\n :\n break;\n\n case 'hidden'\n /*case 'Hidden'*/\n :\n break;\n\n case 'subtotal'\n /*case 'Subtotal'*/\n :\n break;\n\n case 'basefield'\n /*case 'BaseField'*/\n :\n break;\n\n case 'mapchilditems'\n /*case 'MapChildItems'*/\n :\n break;\n\n case 'function'\n /*case 'Function'*/\n :\n break;\n\n case 'refreshonfileopen'\n /*case 'RefreshOnFileOpen'*/\n :\n break;\n\n case 'printsettitles'\n /*case 'PrintSetTitles'*/\n :\n break;\n\n case 'mergelabels'\n /*case 'MergeLabels'*/\n :\n break;\n\n case 'defaultversion'\n /*case 'DefaultVersion'*/\n :\n break;\n\n case 'refreshname'\n /*case 'RefreshName'*/\n :\n break;\n\n case 'refreshdate'\n /*case 'RefreshDate'*/\n :\n break;\n\n case 'refreshdatecopy'\n /*case 'RefreshDateCopy'*/\n :\n break;\n\n case 'versionlastrefresh'\n /*case 'VersionLastRefresh'*/\n :\n break;\n\n case 'versionlastupdate'\n /*case 'VersionLastUpdate'*/\n :\n break;\n\n case 'versionupdateablemin'\n /*case 'VersionUpdateableMin'*/\n :\n break;\n\n case 'versionrefreshablemin'\n /*case 'VersionRefreshableMin'*/\n :\n break;\n\n case 'calculation'\n /*case 'Calculation'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* PageBreaks */\n\n case 'pagebreaks'\n /*case 'PageBreaks'*/\n :\n switch (Rn[3]) {\n case 'colbreaks'\n /*case 'ColBreaks'*/\n :\n break;\n\n case 'colbreak'\n /*case 'ColBreak'*/\n :\n break;\n\n case 'rowbreaks'\n /*case 'RowBreaks'*/\n :\n break;\n\n case 'rowbreak'\n /*case 'RowBreak'*/\n :\n break;\n\n case 'colstart'\n /*case 'ColStart'*/\n :\n break;\n\n case 'colend'\n /*case 'ColEnd'*/\n :\n break;\n\n case 'rowend'\n /*case 'RowEnd'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* AutoFilter */\n\n case 'autofilter'\n /*case 'AutoFilter'*/\n :\n switch (Rn[3]) {\n case 'autofiltercolumn'\n /*case 'AutoFilterColumn'*/\n :\n break;\n\n case 'autofiltercondition'\n /*case 'AutoFilterCondition'*/\n :\n break;\n\n case 'autofilterand'\n /*case 'AutoFilterAnd'*/\n :\n break;\n\n case 'autofilteror'\n /*case 'AutoFilterOr'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* QueryTable */\n\n case 'querytable'\n /*case 'QueryTable'*/\n :\n switch (Rn[3]) {\n case 'id'\n /*case 'Id'*/\n :\n break;\n\n case 'autoformatfont'\n /*case 'AutoFormatFont'*/\n :\n break;\n\n case 'autoformatpattern'\n /*case 'AutoFormatPattern'*/\n :\n break;\n\n case 'querysource'\n /*case 'QuerySource'*/\n :\n break;\n\n case 'querytype'\n /*case 'QueryType'*/\n :\n break;\n\n case 'enableredirections'\n /*case 'EnableRedirections'*/\n :\n break;\n\n case 'refreshedinxl9'\n /*case 'RefreshedInXl9'*/\n :\n break;\n\n case 'urlstring'\n /*case 'URLString'*/\n :\n break;\n\n case 'htmltables'\n /*case 'HTMLTables'*/\n :\n break;\n\n case 'connection'\n /*case 'Connection'*/\n :\n break;\n\n case 'commandtext'\n /*case 'CommandText'*/\n :\n break;\n\n case 'refreshinfo'\n /*case 'RefreshInfo'*/\n :\n break;\n\n case 'notitles'\n /*case 'NoTitles'*/\n :\n break;\n\n case 'nextid'\n /*case 'NextId'*/\n :\n break;\n\n case 'columninfo'\n /*case 'ColumnInfo'*/\n :\n break;\n\n case 'overwritecells'\n /*case 'OverwriteCells'*/\n :\n break;\n\n case 'donotpromptforfile'\n /*case 'DoNotPromptForFile'*/\n :\n break;\n\n case 'textwizardsettings'\n /*case 'TextWizardSettings'*/\n :\n break;\n\n case 'source'\n /*case 'Source'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'decimal'\n /*case 'Decimal'*/\n :\n break;\n\n case 'thousandseparator'\n /*case 'ThousandSeparator'*/\n :\n break;\n\n case 'trailingminusnumbers'\n /*case 'TrailingMinusNumbers'*/\n :\n break;\n\n case 'formatsettings'\n /*case 'FormatSettings'*/\n :\n break;\n\n case 'fieldtype'\n /*case 'FieldType'*/\n :\n break;\n\n case 'delimiters'\n /*case 'Delimiters'*/\n :\n break;\n\n case 'tab'\n /*case 'Tab'*/\n :\n break;\n\n case 'comma'\n /*case 'Comma'*/\n :\n break;\n\n case 'autoformatname'\n /*case 'AutoFormatName'*/\n :\n break;\n\n case 'versionlastedit'\n /*case 'VersionLastEdit'*/\n :\n break;\n\n case 'versionlastrefresh'\n /*case 'VersionLastRefresh'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n case 'datavalidation'\n /*case 'DataValidation'*/\n :\n switch (Rn[3]) {\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'type'\n /*case 'Type'*/\n :\n break;\n\n case 'min'\n /*case 'Min'*/\n :\n break;\n\n case 'max'\n /*case 'Max'*/\n :\n break;\n\n case 'sort'\n /*case 'Sort'*/\n :\n break;\n\n case 'descending'\n /*case 'Descending'*/\n :\n break;\n\n case 'order'\n /*case 'Order'*/\n :\n break;\n\n case 'casesensitive'\n /*case 'CaseSensitive'*/\n :\n break;\n\n case 'value'\n /*case 'Value'*/\n :\n break;\n\n case 'errorstyle'\n /*case 'ErrorStyle'*/\n :\n break;\n\n case 'errormessage'\n /*case 'ErrorMessage'*/\n :\n break;\n\n case 'errortitle'\n /*case 'ErrorTitle'*/\n :\n break;\n\n case 'inputmessage'\n /*case 'InputMessage'*/\n :\n break;\n\n case 'inputtitle'\n /*case 'InputTitle'*/\n :\n break;\n\n case 'combohide'\n /*case 'ComboHide'*/\n :\n break;\n\n case 'inputhide'\n /*case 'InputHide'*/\n :\n break;\n\n case 'condition'\n /*case 'Condition'*/\n :\n break;\n\n case 'qualifier'\n /*case 'Qualifier'*/\n :\n break;\n\n case 'useblank'\n /*case 'UseBlank'*/\n :\n break;\n\n case 'value1'\n /*case 'Value1'*/\n :\n break;\n\n case 'value2'\n /*case 'Value2'*/\n :\n break;\n\n case 'format'\n /*case 'Format'*/\n :\n break;\n\n case 'cellrangelist'\n /*case 'CellRangeList'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n case 'sorting'\n /*case 'Sorting'*/\n :\n case 'conditionalformatting'\n /*case 'ConditionalFormatting'*/\n :\n switch (Rn[3]) {\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'type'\n /*case 'Type'*/\n :\n break;\n\n case 'min'\n /*case 'Min'*/\n :\n break;\n\n case 'max'\n /*case 'Max'*/\n :\n break;\n\n case 'sort'\n /*case 'Sort'*/\n :\n break;\n\n case 'descending'\n /*case 'Descending'*/\n :\n break;\n\n case 'order'\n /*case 'Order'*/\n :\n break;\n\n case 'casesensitive'\n /*case 'CaseSensitive'*/\n :\n break;\n\n case 'value'\n /*case 'Value'*/\n :\n break;\n\n case 'errorstyle'\n /*case 'ErrorStyle'*/\n :\n break;\n\n case 'errormessage'\n /*case 'ErrorMessage'*/\n :\n break;\n\n case 'errortitle'\n /*case 'ErrorTitle'*/\n :\n break;\n\n case 'cellrangelist'\n /*case 'CellRangeList'*/\n :\n break;\n\n case 'inputmessage'\n /*case 'InputMessage'*/\n :\n break;\n\n case 'inputtitle'\n /*case 'InputTitle'*/\n :\n break;\n\n case 'combohide'\n /*case 'ComboHide'*/\n :\n break;\n\n case 'inputhide'\n /*case 'InputHide'*/\n :\n break;\n\n case 'condition'\n /*case 'Condition'*/\n :\n break;\n\n case 'qualifier'\n /*case 'Qualifier'*/\n :\n break;\n\n case 'useblank'\n /*case 'UseBlank'*/\n :\n break;\n\n case 'value1'\n /*case 'Value1'*/\n :\n break;\n\n case 'value2'\n /*case 'Value2'*/\n :\n break;\n\n case 'format'\n /*case 'Format'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* MapInfo (schema) */\n\n case 'mapinfo'\n /*case 'MapInfo'*/\n :\n case 'schema'\n /*case 'Schema'*/\n :\n case 'data'\n /*case 'data'*/\n :\n switch (Rn[3]) {\n case 'map'\n /*case 'Map'*/\n :\n break;\n\n case 'entry'\n /*case 'Entry'*/\n :\n break;\n\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'xpath'\n /*case 'XPath'*/\n :\n break;\n\n case 'field'\n /*case 'Field'*/\n :\n break;\n\n case 'xsdtype'\n /*case 'XSDType'*/\n :\n break;\n\n case 'filteron'\n /*case 'FilterOn'*/\n :\n break;\n\n case 'aggregate'\n /*case 'Aggregate'*/\n :\n break;\n\n case 'elementtype'\n /*case 'ElementType'*/\n :\n break;\n\n case 'attributetype'\n /*case 'AttributeType'*/\n :\n break;\n\n /* These are from xsd (XML Schema Definition) */\n\n case 'schema'\n /*case 'schema'*/\n :\n case 'element'\n /*case 'element'*/\n :\n case 'complextype'\n /*case 'complexType'*/\n :\n case 'datatype'\n /*case 'datatype'*/\n :\n case 'all'\n /*case 'all'*/\n :\n case 'attribute'\n /*case 'attribute'*/\n :\n case 'extends'\n /*case 'extends'*/\n :\n break;\n\n case 'row'\n /*case 'row'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* SmartTags (can be anything) */\n\n case 'smarttags'\n /*case 'SmartTags'*/\n :\n break;\n\n default:\n seen = false;\n break;\n }\n\n if (seen) break;\n /* CustomDocumentProperties */\n\n if (Rn[3].match(/!\\[CDATA/)) break;\n if (!state[state.length - 1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\n if (state[state.length - 1][0] ===\n /*'CustomDocumentProperties'*/\n 'customdocumentproperties') {\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));else {\n cp = Rn;\n pidx = Rn.index + Rn[0].length;\n }\n break;\n }\n\n if (opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n }\n }\n\n var out = {};\n if (!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n out.SheetNames = sheetnames;\n out.Workbook = Workbook;\n out.SSF = SSF.get_table();\n out.Props = Props;\n out.Custprops = Custprops;\n return out;\n }\n\n function parse_xlml(data, opts) {\n fix_read_opts(opts = opts || {});\n\n switch (opts.type || \"base64\") {\n case \"base64\":\n return parse_xlml_xml(Base64.decode(data), opts);\n\n case \"binary\":\n case \"buffer\":\n case \"file\":\n return parse_xlml_xml(data, opts);\n\n case \"array\":\n return parse_xlml_xml(a2s(data), opts);\n }\n }\n /* TODO */\n\n\n function write_props_xlml(wb, opts) {\n var o = [];\n /* DocumentProperties */\n\n if (wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n /* CustomDocumentProperties */\n\n if (wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n return o.join(\"\");\n }\n /* TODO */\n\n\n function write_wb_xlml() {\n /* OfficeDocumentSettings */\n\n /* ExcelWorkbook */\n return \"\";\n }\n /* TODO */\n\n\n function write_sty_xlml(wb, opts) {\n /* Styles */\n var styles = [''];\n opts.cellXfs.forEach(function (xf, id) {\n var payload = [];\n payload.push(writextag('NumberFormat', null, {\n \"ss:Format\": escapexml(SSF._table[xf.numFmtId])\n }));\n var o = {\n \"ss:ID\": \"s\" + (21 + id)\n };\n styles.push(writextag('Style', payload.join(\"\"), o));\n });\n return writextag(\"Styles\", styles.join(\"\"));\n }\n\n function write_name_xlml(n) {\n return writextag(\"NamedRange\", null, {\n \"ss:Name\": n.Name,\n \"ss:RefersTo\": \"=\" + a1_to_rc(n.Ref, {\n r: 0,\n c: 0\n })\n });\n }\n\n function write_names_xlml(wb) {\n if (!((wb || {}).Workbook || {}).Names) return \"\";\n var names = wb.Workbook.Names;\n var out = [];\n\n for (var i = 0; i < names.length; ++i) {\n var n = names[i];\n if (n.Sheet != null) continue;\n if (n.Name.match(/^_xlfn\\./)) continue;\n out.push(write_name_xlml(n));\n }\n\n return writextag(\"Names\", out.join(\"\"));\n }\n\n function write_ws_xlml_names(ws, opts, idx, wb) {\n if (!ws) return \"\";\n if (!((wb || {}).Workbook || {}).Names) return \"\";\n var names = wb.Workbook.Names;\n var out = [];\n\n for (var i = 0; i < names.length; ++i) {\n var n = names[i];\n if (n.Sheet != idx) continue;\n /*switch(n.Name) {\n \tcase \"_\": continue;\n }*/\n\n if (n.Name.match(/^_xlfn\\./)) continue;\n out.push(write_name_xlml(n));\n }\n\n return out.join(\"\");\n }\n /* WorksheetOptions */\n\n\n function write_ws_xlml_wsopts(ws, opts, idx, wb) {\n if (!ws) return \"\";\n var o = [];\n /* NOTE: spec technically allows any order, but stick with implied order */\n\n /* FitToPage */\n\n /* DoNotDisplayColHeaders */\n\n /* DoNotDisplayRowHeaders */\n\n /* ViewableRange */\n\n /* Selection */\n\n /* GridlineColor */\n\n /* Name */\n\n /* ExcelWorksheetType */\n\n /* IntlMacro */\n\n /* Unsynced */\n\n /* Selected */\n\n /* CodeName */\n\n if (ws['!margins']) {\n o.push(\"\");\n if (ws['!margins'].header) o.push(writextag(\"Header\", null, {\n 'x:Margin': ws['!margins'].header\n }));\n if (ws['!margins'].footer) o.push(writextag(\"Footer\", null, {\n 'x:Margin': ws['!margins'].footer\n }));\n o.push(writextag(\"PageMargins\", null, {\n 'x:Bottom': ws['!margins'].bottom || \"0.75\",\n 'x:Left': ws['!margins'].left || \"0.7\",\n 'x:Right': ws['!margins'].right || \"0.7\",\n 'x:Top': ws['!margins'].top || \"0.75\"\n }));\n o.push(\"\");\n }\n /* PageSetup */\n\n /* DisplayPageBreak */\n\n /* TransitionExpressionEvaluation */\n\n /* TransitionFormulaEntry */\n\n /* Print */\n\n /* Zoom */\n\n /* PageLayoutZoom */\n\n /* PageBreakZoom */\n\n /* ShowPageBreakZoom */\n\n /* DefaultRowHeight */\n\n /* DefaultColumnWidth */\n\n /* StandardWidth */\n\n\n if (wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n /* Visible */\n if (wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\", {}));else {\n /* Selected */\n for (var i = 0; i < idx; ++i) {\n if (wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n }\n\n if (i == idx) o.push(\"\");\n }\n }\n /* LeftColumnVisible */\n\n\n if (((((wb || {}).Workbook || {}).Views || [])[0] || {}).RTL) o.push(\"\");\n /* GridlineColorIndex */\n\n /* DisplayFormulas */\n\n /* DoNotDisplayGridlines */\n\n /* DoNotDisplayHeadings */\n\n /* DoNotDisplayOutline */\n\n /* ApplyAutomaticOutlineStyles */\n\n /* NoSummaryRowsBelowDetail */\n\n /* NoSummaryColumnsRightDetail */\n\n /* DoNotDisplayZeros */\n\n /* ActiveRow */\n\n /* ActiveColumn */\n\n /* FilterOn */\n\n /* RangeSelection */\n\n /* TopRowVisible */\n\n /* TopRowBottomPane */\n\n /* LeftColumnRightPane */\n\n /* ActivePane */\n\n /* SplitHorizontal */\n\n /* SplitVertical */\n\n /* FreezePanes */\n\n /* FrozenNoSplit */\n\n /* TabColorIndex */\n\n /* Panes */\n\n /* NOTE: Password not supported in XLML Format */\n\n if (ws['!protect']) {\n o.push(writetag(\"ProtectContents\", \"True\"));\n if (ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n if (ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n if (ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));else if (ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n [[\"formatCells\", \"AllowFormatCells\"], [\"formatColumns\", \"AllowSizeCols\"], [\"formatRows\", \"AllowSizeRows\"], [\"insertColumns\", \"AllowInsertCols\"], [\"insertRows\", \"AllowInsertRows\"], [\"insertHyperlinks\", \"AllowInsertHyperlinks\"], [\"deleteColumns\", \"AllowDeleteCols\"], [\"deleteRows\", \"AllowDeleteRows\"], [\"sort\", \"AllowSort\"], [\"autoFilter\", \"AllowFilter\"], [\"pivotTables\", \"AllowUsePivotTables\"]].forEach(function (x) {\n if (ws['!protect'][x[0]]) o.push(\"<\" + x[1] + \"/>\");\n });\n }\n\n if (o.length == 0) return \"\";\n return writextag(\"WorksheetOptions\", o.join(\"\"), {\n xmlns: XLMLNS.x\n });\n }\n\n function write_ws_xlml_comment(comments) {\n return comments.map(function (c) {\n // TODO: formatted text\n var t = xlml_unfixstr(c.t || \"\");\n var d = writextag(\"ss:Data\", t, {\n \"xmlns\": \"http://www.w3.org/TR/REC-html40\"\n });\n return writextag(\"Comment\", d, {\n \"ss:Author\": c.a\n });\n }).join(\"\");\n }\n\n function write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr) {\n if (!cell || cell.v == undefined && cell.f == undefined) return \"\";\n var attr = {};\n if (cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\n if (cell.F && cell.F.slice(0, ref.length) == ref) {\n var end = decode_cell(cell.F.slice(ref.length + 1));\n attr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n }\n\n if (cell.l && cell.l.Target) {\n attr[\"ss:HRef\"] = escapexml(cell.l.Target);\n if (cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n }\n\n if (ws['!merges']) {\n var marr = ws['!merges'];\n\n for (var mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n if (marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n if (marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n }\n }\n\n var t = \"\",\n p = \"\";\n\n switch (cell.t) {\n case 'z':\n if (!opts.sheetStubs) return \"\";\n break;\n\n case 'n':\n t = 'Number';\n p = String(cell.v);\n break;\n\n case 'b':\n t = 'Boolean';\n p = cell.v ? \"1\" : \"0\";\n break;\n\n case 'e':\n t = 'Error';\n p = BErr[cell.v];\n break;\n\n case 'd':\n t = 'DateTime';\n p = new Date(cell.v).toISOString();\n if (cell.z == null) cell.z = cell.z || SSF._table[14];\n break;\n\n case 's':\n t = 'String';\n p = escapexlml(cell.v || \"\");\n break;\n }\n /* TODO: cell style */\n\n\n var os = get_cell_style(opts.cellXfs, cell, opts);\n attr[\"ss:StyleID\"] = \"s\" + (21 + os);\n attr[\"ss:Index\"] = addr.c + 1;\n\n var _v = cell.v != null ? p : \"\";\n\n var m = cell.t == 'z' ? \"\" : '' + _v + '';\n if ((cell.c || []).length > 0) m += write_ws_xlml_comment(cell.c);\n return writextag(\"Cell\", m, attr);\n }\n\n function write_ws_xlml_row(R, row) {\n var o = '';\n }\n /* TODO */\n\n\n function write_ws_xlml_table(ws, opts, idx, wb) {\n if (!ws['!ref']) return \"\";\n var range = safe_decode_range(ws['!ref']);\n var marr = ws['!merges'] || [],\n mi = 0;\n var o = [];\n if (ws['!cols']) ws['!cols'].forEach(function (n, i) {\n process_col(n);\n var w = !!n.width;\n var p = col_obj_w(i, n);\n var k = {\n \"ss:Index\": i + 1\n };\n if (w) k['ss:Width'] = width2px(p.width);\n if (n.hidden) k['ss:Hidden'] = \"1\";\n o.push(writextag(\"Column\", null, k));\n });\n var dense = Array.isArray(ws);\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n var row = [write_ws_xlml_row(R, (ws['!rows'] || [])[R])];\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n var skip = false;\n\n for (mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c > C) continue;\n if (marr[mi].s.r > R) continue;\n if (marr[mi].e.c < C) continue;\n if (marr[mi].e.r < R) continue;\n if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n break;\n }\n\n if (skip) continue;\n var addr = {\n r: R,\n c: C\n };\n var ref = encode_cell(addr),\n cell = dense ? (ws[R] || [])[C] : ws[ref];\n row.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n }\n\n row.push(\"\");\n if (row.length > 2) o.push(row.join(\"\"));\n }\n\n return o.join(\"\");\n }\n\n function write_ws_xlml(idx, opts, wb) {\n var o = [];\n var s = wb.SheetNames[idx];\n var ws = wb.Sheets[s];\n var t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n if (t.length > 0) o.push(\"\" + t + \"\");\n /* Table */\n\n t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n if (t.length > 0) o.push(\"\" + t + \"
\");\n /* WorksheetOptions */\n\n o.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n return o.join(\"\");\n }\n\n function write_xlml(wb, opts) {\n if (!opts) opts = {};\n if (!wb.SSF) wb.SSF = SSF.get_table();\n\n if (wb.SSF) {\n make_ssf(SSF);\n SSF.load_table(wb.SSF); // $FlowIgnore\n\n opts.revssf = evert_num(wb.SSF);\n opts.revssf[wb.SSF[65535]] = 0;\n opts.ssf = wb.SSF;\n opts.cellXfs = [];\n get_cell_style(opts.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n }\n\n var d = [];\n d.push(write_props_xlml(wb, opts));\n d.push(write_wb_xlml(wb, opts));\n d.push(\"\");\n d.push(\"\");\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n d.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\n \"ss:Name\": escapexml(wb.SheetNames[i])\n }));\n }\n\n d[2] = write_sty_xlml(wb, opts);\n d[3] = write_names_xlml(wb, opts);\n return XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n 'xmlns': XLMLNS.ss,\n 'xmlns:o': XLMLNS.o,\n 'xmlns:x': XLMLNS.x,\n 'xmlns:ss': XLMLNS.ss,\n 'xmlns:dt': XLMLNS.dt,\n 'xmlns:html': XLMLNS.html\n });\n }\n /* [MS-OLEDS] 2.3.8 CompObjStream */\n\n\n function parse_compobj(obj) {\n var v = {};\n var o = obj.content;\n /* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\n o.l = 28;\n v.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n v.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n if (o.length - o.l <= 4) return v;\n var m = o.read_shift(4);\n if (m == 0 || m > 40) return v;\n o.l -= 4;\n v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n if (o.length - o.l <= 4) return v;\n m = o.read_shift(4);\n if (m !== 0x71b239f4) return v;\n v.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n m = o.read_shift(4);\n if (m == 0 || m > 40) return v;\n o.l -= 4;\n v.Reserved2 = o.read_shift(0, \"lpwstr\");\n }\n /*\n \tContinue logic for:\n \t- 2.4.58 Continue\n \t- 2.4.59 ContinueBigName\n \t- 2.4.60 ContinueFrt\n \t- 2.4.61 ContinueFrt11\n \t- 2.4.62 ContinueFrt12\n */\n\n\n function slurp(R, blob, length, opts) {\n var l = length;\n var bufs = [];\n var d = blob.slice(blob.l, blob.l + l);\n if (opts && opts.enc && opts.enc.insitu && d.length > 0) switch (R.n) {\n case 'BOF':\n case 'FilePass':\n case 'FileLock':\n case 'InterfaceHdr':\n case 'RRDInfo':\n case 'RRDHead':\n case 'UsrExcl':\n case 'EOF':\n break;\n\n case 'BoundSheet8':\n break;\n\n default:\n opts.enc.insitu(d);\n }\n bufs.push(d);\n blob.l += l;\n\n var next = XLSRecordEnum[__readUInt16LE(blob, blob.l)];\n\n var start = 0;\n\n while (next != null && next.n.slice(0, 8) === 'Continue') {\n l = __readUInt16LE(blob, blob.l + 2);\n start = blob.l + 4;\n if (next.n == 'ContinueFrt') start += 4;else if (next.n.slice(0, 11) == 'ContinueFrt') {\n start += 12;\n }\n d = blob.slice(start, blob.l + 4 + l);\n bufs.push(d);\n blob.l += 4 + l;\n next = XLSRecordEnum[__readUInt16LE(blob, blob.l)];\n }\n\n var b = bconcat(bufs);\n prep_blob(b, 0);\n var ll = 0;\n b.lens = [];\n\n for (var j = 0; j < bufs.length; ++j) {\n b.lens.push(ll);\n ll += bufs[j].length;\n }\n\n if (b.length < length) throw \"XLS Record \" + (R && R.n || \"??\") + \" Truncated: \" + b.length + \" < \" + length;\n return R.f(b, b.length, opts);\n }\n\n function safe_format_xf(p, opts, date1904) {\n if (p.t === 'z') return;\n if (!p.XF) return;\n var fmtid = 0;\n\n try {\n fmtid = p.z || p.XF.numFmtId || 0;\n if (opts.cellNF) p.z = SSF._table[fmtid];\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (!opts || opts.cellText !== false) try {\n if (p.t === 'e') {\n p.w = p.w || BErr[p.v];\n } else if (fmtid === 0 || fmtid == \"General\") {\n if (p.t === 'n') {\n if ((p.v | 0) === p.v) p.w = SSF._general_int(p.v);else p.w = SSF._general_num(p.v);\n } else p.w = SSF._general(p.v);\n } else p.w = SSF.format(fmtid, p.v, {\n date1904: !!date1904,\n dateNF: opts && opts.dateNF\n });\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) {\n var _d = SSF.parse_date_code(p.v);\n\n if (_d) {\n p.t = 'd';\n p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n }\n\n function make_cell(val, ixfe, t) {\n return {\n v: val,\n ixfe: ixfe,\n t: t\n };\n } // 2.3.2\n\n\n function parse_workbook(blob, options) {\n var wb = {\n opts: {}\n };\n var Sheets = {};\n if (DENSE != null && options.dense == null) options.dense = DENSE;\n var out = options.dense ? [] : {};\n var Directory = {};\n var range = {};\n var last_formula = null;\n var sst = [];\n var cur_sheet = \"\";\n var Preamble = {};\n var lastcell,\n last_cell = \"\",\n cc,\n cmnt,\n rngC,\n rngR;\n var sharedf = {};\n var arrayf = [];\n var temp_val;\n var country;\n var cell_valid = true;\n var XFs = [];\n /* XF records */\n\n var palette = [];\n var Workbook = {\n Sheets: [],\n WBProps: {\n date1904: false\n },\n Views: [{}]\n },\n wsprops = {};\n\n var get_rgb = function getrgb(icv) {\n if (icv < 8) return XLSIcv[icv];\n if (icv < 64) return palette[icv - 8] || XLSIcv[icv];\n return XLSIcv[icv];\n };\n\n var process_cell_style = function pcs(cell, line, options) {\n var xfd = line.XF.data;\n if (!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n line.s = {};\n line.s.patternType = xfd.patternType;\n var t;\n\n if (t = rgb2Hex(get_rgb(xfd.icvFore))) {\n line.s.fgColor = {\n rgb: t\n };\n }\n\n if (t = rgb2Hex(get_rgb(xfd.icvBack))) {\n line.s.bgColor = {\n rgb: t\n };\n }\n };\n\n var addcell = function addcell(cell, line, options) {\n if (file_depth > 1) return;\n if (options.sheetRows && cell.r >= options.sheetRows) cell_valid = false;\n if (!cell_valid) return;\n if (options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n delete line.ixfe;\n delete line.XF;\n lastcell = cell;\n last_cell = encode_cell(cell);\n if (!range || !range.s || !range.e) range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n if (cell.r < range.s.r) range.s.r = cell.r;\n if (cell.c < range.s.c) range.s.c = cell.c;\n if (cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n if (cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\n if (options.cellFormula && line.f) {\n for (var afi = 0; afi < arrayf.length; ++afi) {\n if (arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n if (arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n line.F = encode_range(arrayf[afi][0]);\n if (arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n if (line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n break;\n }\n }\n\n {\n if (options.dense) {\n if (!out[cell.r]) out[cell.r] = [];\n out[cell.r][cell.c] = line;\n } else out[last_cell] = line;\n }\n };\n\n var opts = {\n enc: false,\n // encrypted\n sbcch: 0,\n // cch in the preceding SupBook\n snames: [],\n // sheetnames\n sharedf: sharedf,\n // shared formulae by address\n arrayf: arrayf,\n // array formulae array\n rrtabid: [],\n // RRTabId\n lastuser: \"\",\n // Last User from WriteAccess\n biff: 8,\n // BIFF version\n codepage: 0,\n // CP from CodePage record\n winlocked: 0,\n // fLockWn from WinProtect\n cellStyles: !!options && !!options.cellStyles,\n WTF: !!options && !!options.wtf\n };\n if (options.password) opts.password = options.password;\n var themes;\n var merges = [];\n var objects = [];\n var colinfo = [],\n rowinfo = []; // eslint-disable-next-line no-unused-vars\n\n var defwidth = 0,\n defheight = 0; // twips / MDW respectively\n\n var seencol = false;\n var supbooks = []; // 1-indexed, will hold extern names\n\n supbooks.SheetNames = opts.snames;\n supbooks.sharedf = opts.sharedf;\n supbooks.arrayf = opts.arrayf;\n supbooks.names = [];\n supbooks.XTI = [];\n var last_Rn = '';\n var file_depth = 0;\n /* TODO: make a real stack */\n\n var BIFF2Fmt = 0,\n BIFF2FmtTable = [];\n var FilterDatabases = [];\n /* TODO: sort out supbooks and process elsewhere */\n\n var last_lbl;\n /* explicit override for some broken writers */\n\n opts.codepage = 1200;\n set_cp(1200);\n var seen_codepage = false;\n\n while (blob.l < blob.length - 1) {\n var s = blob.l;\n var RecordType = blob.read_shift(2);\n if (RecordType === 0 && last_Rn === 'EOF') break;\n var length = blob.l === blob.length ? 0 : blob.read_shift(2);\n var R = XLSRecordEnum[RecordType]; //console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n //if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\n if (R && R.f) {\n if (options.bookSheets) {\n if (last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\n }\n\n last_Rn = R.n;\n\n if (R.r === 2 || R.r == 12) {\n var rt = blob.read_shift(2);\n length -= 2;\n if (!opts.enc && rt !== RecordType && ((rt & 0xFF) << 8 | rt >> 8) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\n if (R.r == 12) {\n blob.l += 10;\n length -= 10;\n } // skip FRT\n\n } //console.error(R,blob.l,length,blob.length);\n\n\n var val = {};\n if (R.n === 'EOF') val = R.f(blob, length, opts);else val = slurp(R, blob, length, opts);\n var Rn = R.n;\n if (file_depth == 0 && Rn != 'BOF') continue;\n /* nested switch statements to workaround V8 128 limit */\n\n switch (Rn) {\n /* Workbook Options */\n case 'Date1904':\n wb.opts.Date1904 = Workbook.WBProps.date1904 = val;\n break;\n\n case 'WriteProtect':\n wb.opts.WriteProtect = true;\n break;\n\n case 'FilePass':\n if (!opts.enc) blob.l = 0;\n opts.enc = val;\n if (!options.password) throw new Error(\"File is password-protected\");\n if (val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n if (!val.valid) throw new Error(\"Password is incorrect\");\n break;\n\n case 'WriteAccess':\n opts.lastuser = val;\n break;\n\n case 'FileSharing':\n break;\n //TODO\n\n case 'CodePage':\n var cpval = Number(val);\n /* overrides based on test cases */\n\n switch (cpval) {\n case 0x5212:\n cpval = 1200;\n break;\n\n case 0x8000:\n cpval = 10000;\n break;\n\n case 0x8001:\n cpval = 1252;\n break;\n }\n\n set_cp(opts.codepage = cpval);\n seen_codepage = true;\n break;\n\n case 'RRTabId':\n opts.rrtabid = val;\n break;\n\n case 'WinProtect':\n opts.winlocked = val;\n break;\n\n case 'Template':\n break;\n // TODO\n\n case 'BookBool':\n break;\n // TODO\n\n case 'UsesELFs':\n break;\n\n case 'MTRSettings':\n break;\n\n case 'RefreshAll':\n case 'CalcCount':\n case 'CalcDelta':\n case 'CalcIter':\n case 'CalcMode':\n case 'CalcPrecision':\n case 'CalcSaveRecalc':\n wb.opts[Rn] = val;\n break;\n\n case 'CalcRefMode':\n opts.CalcRefMode = val;\n break;\n // TODO: implement R1C1\n\n case 'Uncalced':\n break;\n\n case 'ForceFullCalculation':\n wb.opts.FullCalc = val;\n break;\n\n case 'WsBool':\n if (val.fDialog) out[\"!type\"] = \"dialog\";\n if (!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n if (!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n break;\n // TODO\n\n case 'XF':\n XFs.push(val);\n break;\n\n case 'ExtSST':\n break;\n // TODO\n\n case 'BookExt':\n break;\n // TODO\n\n case 'RichTextStream':\n break;\n\n case 'BkHim':\n break;\n\n case 'SupBook':\n supbooks.push([val]);\n supbooks[supbooks.length - 1].XTI = [];\n break;\n\n case 'ExternName':\n supbooks[supbooks.length - 1].push(val);\n break;\n\n case 'Index':\n break;\n // TODO\n\n case 'Lbl':\n last_lbl = {\n Name: val.Name,\n Ref: stringify_formula(val.rgce, range, null, supbooks, opts)\n };\n if (val.itab > 0) last_lbl.Sheet = val.itab - 1;\n supbooks.names.push(last_lbl);\n\n if (!supbooks[0]) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].push(val);\n if (val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0) if (val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d') FilterDatabases[val.itab - 1] = {\n ref: encode_range(val.rgce[0][0][1][2])\n };\n break;\n\n case 'ExternCount':\n opts.ExternCount = val;\n break;\n\n case 'ExternSheet':\n if (supbooks.length == 0) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n supbooks.XTI = supbooks.XTI.concat(val);\n break;\n\n case 'NameCmt':\n /* TODO: search for correct name */\n if (opts.biff < 8) break;\n if (last_lbl != null) last_lbl.Comment = val[1];\n break;\n\n case 'Protect':\n out[\"!protect\"] = val;\n break;\n\n /* for sheet or book */\n\n case 'Password':\n if (val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val);\n break;\n\n case 'Prot4Rev':\n case 'Prot4RevPass':\n break;\n\n /*TODO: Revision Control*/\n\n case 'BoundSheet8':\n {\n Directory[val.pos] = val;\n opts.snames.push(val.name);\n }\n break;\n\n case 'EOF':\n {\n if (--file_depth) break;\n\n if (range.e) {\n if (range.e.r > 0 && range.e.c > 0) {\n range.e.r--;\n range.e.c--;\n out[\"!ref\"] = encode_range(range);\n\n if (options.sheetRows && options.sheetRows <= range.e.r) {\n var tmpri = range.e.r;\n range.e.r = options.sheetRows - 1;\n out[\"!fullref\"] = out[\"!ref\"];\n out[\"!ref\"] = encode_range(range);\n range.e.r = tmpri;\n }\n\n range.e.r++;\n range.e.c++;\n }\n\n if (merges.length > 0) out[\"!merges\"] = merges;\n if (objects.length > 0) out[\"!objects\"] = objects;\n if (colinfo.length > 0) out[\"!cols\"] = colinfo;\n if (rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n Workbook.Sheets.push(wsprops);\n }\n\n if (cur_sheet === \"\") Preamble = out;else Sheets[cur_sheet] = out;\n out = options.dense ? [] : {};\n }\n break;\n\n case 'BOF':\n {\n if (opts.biff === 8) opts.biff = {\n 0x0009: 2,\n 0x0209: 3,\n 0x0409: 4\n }[RecordType] || {\n 0x0200: 2,\n 0x0300: 3,\n 0x0400: 4,\n 0x0500: 5,\n 0x0600: 8,\n 0x0002: 2,\n 0x0007: 2\n }[val.BIFFVer] || 8;\n opts.biffguess = val.BIFFVer == 0;\n\n if (val.BIFFVer == 0 && val.dt == 0x1000) {\n opts.biff = 5;\n seen_codepage = true;\n set_cp(opts.codepage = 28591);\n }\n\n if (opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n if (file_depth++) break;\n cell_valid = true;\n out = options.dense ? [] : {};\n\n if (opts.biff < 8 && !seen_codepage) {\n seen_codepage = true;\n set_cp(opts.codepage = options.codepage || 1252);\n }\n\n if (opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n if (cur_sheet === \"\") cur_sheet = \"Sheet1\";\n range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n /* fake BoundSheet8 */\n\n var fakebs8 = {\n pos: blob.l - length,\n name: cur_sheet\n };\n Directory[fakebs8.pos] = fakebs8;\n opts.snames.push(cur_sheet);\n } else cur_sheet = (Directory[s] || {\n name: \"\"\n }).name;\n\n if (val.dt == 0x20) out[\"!type\"] = \"chart\";\n if (val.dt == 0x40) out[\"!type\"] = \"macro\";\n merges = [];\n objects = [];\n opts.arrayf = arrayf = [];\n colinfo = [];\n rowinfo = [];\n defwidth = defheight = 0;\n seencol = false;\n wsprops = {\n Hidden: (Directory[s] || {\n hs: 0\n }).hs,\n name: cur_sheet\n };\n }\n break;\n\n case 'Number':\n case 'BIFF2NUM':\n case 'BIFF2INT':\n {\n if (out[\"!type\"] == \"chart\") if (options.dense ? (out[val.r] || [])[val.c] : out[encode_cell({\n c: val.c,\n r: val.r\n })]) ++val.c;\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe] || {},\n v: val.val,\n t: 'n'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 'BoolErr':\n {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n v: val.val,\n t: val.t\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 'RK':\n {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n v: val.rknum,\n t: 'n'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 'MulRk':\n {\n for (var j = val.c; j <= val.C; ++j) {\n var ixfe = val.rkrec[j - val.c][0];\n temp_val = {\n ixfe: ixfe,\n XF: XFs[ixfe],\n v: val.rkrec[j - val.c][1],\n t: 'n'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: j,\n r: val.r\n }, temp_val, options);\n }\n }\n break;\n\n case 'Formula':\n {\n if (val.val == 'String') {\n last_formula = val;\n break;\n }\n\n temp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n temp_val.XF = XFs[temp_val.ixfe];\n\n if (options.cellFormula) {\n var _f = val.formula;\n\n if (_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n var _fr = _f[0][0][1][0],\n _fc = _f[0][0][1][1];\n\n var _fe = encode_cell({\n r: _fr,\n c: _fc\n });\n\n if (sharedf[_fe]) temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);else temp_val.F = ((options.dense ? (out[_fr] || [])[_fc] : out[_fe]) || {}).F;\n } else temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);\n }\n\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell(val.cell, temp_val, options);\n last_formula = val;\n }\n break;\n\n case 'String':\n {\n if (last_formula) {\n /* technically always true */\n last_formula.val = val;\n temp_val = make_cell(val, last_formula.cell.ixfe, 's');\n temp_val.XF = XFs[temp_val.ixfe];\n\n if (options.cellFormula) {\n temp_val.f = \"\" + stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n }\n\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell(last_formula.cell, temp_val, options);\n last_formula = null;\n } else throw new Error(\"String record expects Formula\");\n }\n break;\n\n case 'Array':\n {\n arrayf.push(val);\n\n var _arraystart = encode_cell(val[0].s);\n\n cc = options.dense ? (out[val[0].s.r] || [])[val[0].s.c] : out[_arraystart];\n\n if (options.cellFormula && cc) {\n if (!last_formula) break;\n /* technically unreachable */\n\n if (!_arraystart || !cc) break;\n cc.f = \"\" + stringify_formula(val[1], range, val[0], supbooks, opts);\n cc.F = encode_range(val[0]);\n }\n }\n break;\n\n case 'ShrFmla':\n {\n if (!cell_valid) break;\n if (!options.cellFormula) break;\n\n if (last_cell) {\n /* TODO: capture range */\n if (!last_formula) break;\n /* technically unreachable */\n\n sharedf[encode_cell(last_formula.cell)] = val[0];\n cc = options.dense ? (out[last_formula.cell.r] || [])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n (cc || {}).f = \"\" + stringify_formula(val[0], range, lastcell, supbooks, opts);\n }\n }\n break;\n\n case 'LabelSst':\n temp_val = make_cell(sst[val.isst].t, val.ixfe, 's');\n if (sst[val.isst].h) temp_val.h = sst[val.isst].h;\n temp_val.XF = XFs[temp_val.ixfe];\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n break;\n\n case 'Blank':\n if (options.sheetStubs) {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n t: 'z'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n\n break;\n\n case 'MulBlank':\n if (options.sheetStubs) {\n for (var _j = val.c; _j <= val.C; ++_j) {\n var _ixfe = val.ixfe[_j - val.c];\n temp_val = {\n ixfe: _ixfe,\n XF: XFs[_ixfe],\n t: 'z'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: _j,\n r: val.r\n }, temp_val, options);\n }\n }\n\n break;\n\n case 'RString':\n case 'Label':\n case 'BIFF2STR':\n temp_val = make_cell(val.val, val.ixfe, 's');\n temp_val.XF = XFs[temp_val.ixfe];\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n break;\n\n case 'Dimensions':\n {\n if (file_depth === 1) range = val;\n /* TODO: stack */\n }\n break;\n\n case 'SST':\n {\n sst = val;\n }\n break;\n\n case 'Format':\n {\n /* val = [id, fmt] */\n if (opts.biff == 4) {\n BIFF2FmtTable[BIFF2Fmt++] = val[1];\n\n for (var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) {\n if (SSF._table[b4idx] == val[1]) break;\n }\n\n if (b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163);\n } else SSF.load(val[1], val[0]);\n }\n break;\n\n case 'BIFF2FORMAT':\n {\n BIFF2FmtTable[BIFF2Fmt++] = val;\n\n for (var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) {\n if (SSF._table[b2idx] == val) break;\n }\n\n if (b2idx >= 163) SSF.load(val, BIFF2Fmt + 163);\n }\n break;\n\n case 'MergeCells':\n merges = merges.concat(val);\n break;\n\n case 'Obj':\n objects[val.cmo[0]] = opts.lastobj = val;\n break;\n\n case 'TxO':\n opts.lastobj.TxO = val;\n break;\n\n case 'ImData':\n opts.lastobj.ImData = val;\n break;\n\n case 'HLink':\n {\n for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n c: rngC,\n r: rngR\n })];\n if (cc) cc.l = val[1];\n }\n }\n }\n break;\n\n case 'HLinkTooltip':\n {\n for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n c: rngC,\n r: rngR\n })];\n if (cc && cc.l) cc.l.Tooltip = val[1];\n }\n }\n }\n break;\n\n /* Comments */\n\n case 'Note':\n {\n if (opts.biff <= 5 && opts.biff >= 2) break;\n /* TODO: BIFF5 */\n\n cc = options.dense ? (out[val[0].r] || [])[val[0].c] : out[encode_cell(val[0])];\n var noteobj = objects[val[2]];\n\n if (!cc) {\n if (options.dense) {\n if (!out[val[0].r]) out[val[0].r] = [];\n cc = out[val[0].r][val[0].c] = {\n t: \"z\"\n };\n } else {\n cc = out[encode_cell(val[0])] = {\n t: \"z\"\n };\n }\n\n range.e.r = Math.max(range.e.r, val[0].r);\n range.s.r = Math.min(range.s.r, val[0].r);\n range.e.c = Math.max(range.e.c, val[0].c);\n range.s.c = Math.min(range.s.c, val[0].c);\n }\n\n if (!cc.c) cc.c = [];\n cmnt = {\n a: val[1],\n t: noteobj.TxO.t\n };\n cc.c.push(cmnt);\n }\n break;\n\n default:\n switch (R.n) {\n /* nested */\n case 'ClrtClient':\n break;\n\n case 'XFExt':\n update_xfext(XFs[val.ixfe], val.ext);\n break;\n\n case 'DefColWidth':\n defwidth = val;\n break;\n\n case 'DefaultRowHeight':\n defheight = val[1];\n break;\n // TODO: flags\n\n case 'ColInfo':\n {\n if (!opts.cellStyles) break;\n\n while (val.e >= val.s) {\n colinfo[val.e--] = {\n width: val.w / 256,\n level: val.level || 0,\n hidden: !!(val.flags & 1)\n };\n\n if (!seencol) {\n seencol = true;\n find_mdw_colw(val.w / 256);\n }\n\n process_col(colinfo[val.e + 1]);\n }\n }\n break;\n\n case 'Row':\n {\n var rowobj = {};\n\n if (val.level != null) {\n rowinfo[val.r] = rowobj;\n rowobj.level = val.level;\n }\n\n if (val.hidden) {\n rowinfo[val.r] = rowobj;\n rowobj.hidden = true;\n }\n\n if (val.hpt) {\n rowinfo[val.r] = rowobj;\n rowobj.hpt = val.hpt;\n rowobj.hpx = pt2px(val.hpt);\n }\n }\n break;\n\n case 'LeftMargin':\n case 'RightMargin':\n case 'TopMargin':\n case 'BottomMargin':\n if (!out['!margins']) default_margins(out['!margins'] = {});\n out['!margins'][Rn.slice(0, -6).toLowerCase()] = val;\n break;\n\n case 'Selection':\n break;\n\n case 'Setup':\n // TODO\n if (!out['!margins']) default_margins(out['!margins'] = {});\n out['!margins'].header = val.header;\n out['!margins'].footer = val.footer;\n break;\n\n case 'Window2':\n // TODO\n // $FlowIgnore\n if (val.RTL) Workbook.Views[0].RTL = true;\n break;\n\n case 'Header':\n break;\n // TODO\n\n case 'Footer':\n break;\n // TODO\n\n case 'HCenter':\n break;\n // TODO\n\n case 'VCenter':\n break;\n // TODO\n\n case 'Pls':\n break;\n // TODO\n\n case 'GCW':\n break;\n\n case 'LHRecord':\n break;\n\n case 'DBCell':\n break;\n // TODO\n\n case 'EntExU2':\n break;\n // TODO\n\n case 'SxView':\n break;\n // TODO\n\n case 'Sxvd':\n break;\n // TODO\n\n case 'SXVI':\n break;\n // TODO\n\n case 'SXVDEx':\n break;\n // TODO\n\n case 'SxIvd':\n break;\n // TODO\n\n case 'SXString':\n break;\n // TODO\n\n case 'Sync':\n break;\n\n case 'Addin':\n break;\n\n case 'SXDI':\n break;\n // TODO\n\n case 'SXLI':\n break;\n // TODO\n\n case 'SXEx':\n break;\n // TODO\n\n case 'QsiSXTag':\n break;\n // TODO\n\n case 'Feat':\n break;\n\n case 'FeatHdr':\n case 'FeatHdr11':\n break;\n\n case 'Feature11':\n case 'Feature12':\n case 'List12':\n break;\n\n case 'Country':\n country = val;\n break;\n\n case 'RecalcId':\n break;\n\n case 'DxGCol':\n break;\n // TODO: htmlify\n\n case 'Fbi':\n case 'Fbi2':\n case 'GelFrame':\n break;\n\n case 'Font':\n break;\n // TODO\n\n case 'XFCRC':\n break;\n // TODO\n\n case 'Style':\n break;\n // TODO\n\n case 'StyleExt':\n break;\n // TODO\n\n case 'Palette':\n palette = val;\n break;\n\n case 'Theme':\n themes = val;\n break;\n\n /* Protection */\n\n case 'ScenarioProtect':\n break;\n\n case 'ObjProtect':\n break;\n\n /* Conditional Formatting */\n\n case 'CondFmt12':\n break;\n\n /* Table */\n\n case 'Table':\n break;\n // TODO\n\n case 'TableStyles':\n break;\n // TODO\n\n case 'TableStyle':\n break;\n // TODO\n\n case 'TableStyleElement':\n break;\n // TODO\n\n /* PivotTable */\n\n case 'SXStreamID':\n break;\n // TODO\n\n case 'SXVS':\n break;\n // TODO\n\n case 'DConRef':\n break;\n // TODO\n\n case 'SXAddl':\n break;\n // TODO\n\n case 'DConBin':\n break;\n // TODO\n\n case 'DConName':\n break;\n // TODO\n\n case 'SXPI':\n break;\n // TODO\n\n case 'SxFormat':\n break;\n // TODO\n\n case 'SxSelect':\n break;\n // TODO\n\n case 'SxRule':\n break;\n // TODO\n\n case 'SxFilt':\n break;\n // TODO\n\n case 'SxItm':\n break;\n // TODO\n\n case 'SxDXF':\n break;\n // TODO\n\n /* Scenario Manager */\n\n case 'ScenMan':\n break;\n\n /* Data Consolidation */\n\n case 'DCon':\n break;\n\n /* Watched Cell */\n\n case 'CellWatch':\n break;\n\n /* Print Settings */\n\n case 'PrintRowCol':\n break;\n\n case 'PrintGrid':\n break;\n\n case 'PrintSize':\n break;\n\n case 'XCT':\n break;\n\n case 'CRN':\n break;\n\n case 'Scl':\n {//console.log(\"Zoom Level:\", val[0]/val[1],val);\n }\n break;\n\n case 'SheetExt':\n {\n /* empty */\n }\n break;\n\n case 'SheetExtOptional':\n {\n /* empty */\n }\n break;\n\n /* VBA */\n\n case 'ObNoMacros':\n {\n /* empty */\n }\n break;\n\n case 'ObProj':\n {\n /* empty */\n }\n break;\n\n case 'CodeName':\n {\n if (!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";else wsprops.CodeName = val || wsprops.name;\n }\n break;\n\n case 'GUIDTypeLib':\n {\n /* empty */\n }\n break;\n\n case 'WOpt':\n break;\n // TODO: WTF?\n\n case 'PhoneticInfo':\n break;\n\n case 'OleObjectSize':\n break;\n\n /* Differential Formatting */\n\n case 'DXF':\n case 'DXFN':\n case 'DXFN12':\n case 'DXFN12List':\n case 'DXFN12NoCB':\n break;\n\n /* Data Validation */\n\n case 'Dv':\n case 'DVal':\n break;\n\n /* Data Series */\n\n case 'BRAI':\n case 'Series':\n case 'SeriesText':\n break;\n\n /* Data Connection */\n\n case 'DConn':\n break;\n\n case 'DbOrParamQry':\n break;\n\n case 'DBQueryExt':\n break;\n\n case 'OleDbConn':\n break;\n\n case 'ExtString':\n break;\n\n /* Formatting */\n\n case 'IFmtRecord':\n break;\n\n case 'CondFmt':\n case 'CF':\n case 'CF12':\n case 'CFEx':\n break;\n\n /* Explicitly Ignored */\n\n case 'Excel9File':\n break;\n\n case 'Units':\n break;\n\n case 'InterfaceHdr':\n case 'Mms':\n case 'InterfaceEnd':\n case 'DSF':\n break;\n\n case 'BuiltInFnGroupCount':\n /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */\n break;\n\n /* View Stuff */\n\n case 'Window1':\n case 'HideObj':\n case 'GridSet':\n case 'Guts':\n case 'UserBView':\n case 'UserSViewBegin':\n case 'UserSViewEnd':\n break;\n\n case 'Pane':\n break;\n\n default:\n switch (R.n) {\n /* nested */\n\n /* Chart */\n case 'Dat':\n case 'Begin':\n case 'End':\n case 'StartBlock':\n case 'EndBlock':\n case 'Frame':\n case 'Area':\n case 'Axis':\n case 'AxisLine':\n case 'Tick':\n break;\n\n case 'AxesUsed':\n case 'CrtLayout12':\n case 'CrtLayout12A':\n case 'CrtLink':\n case 'CrtLine':\n case 'CrtMlFrt':\n case 'CrtMlFrtContinue':\n break;\n\n case 'LineFormat':\n case 'AreaFormat':\n case 'Chart':\n case 'Chart3d':\n case 'Chart3DBarShape':\n case 'ChartFormat':\n case 'ChartFrtInfo':\n break;\n\n case 'PlotArea':\n case 'PlotGrowth':\n break;\n\n case 'SeriesList':\n case 'SerParent':\n case 'SerAuxTrend':\n break;\n\n case 'DataFormat':\n case 'SerToCrt':\n case 'FontX':\n break;\n\n case 'CatSerRange':\n case 'AxcExt':\n case 'SerFmt':\n break;\n\n case 'ShtProps':\n break;\n\n case 'DefaultText':\n case 'Text':\n case 'CatLab':\n break;\n\n case 'DataLabExtContents':\n break;\n\n case 'Legend':\n case 'LegendException':\n break;\n\n case 'Pie':\n case 'Scatter':\n break;\n\n case 'PieFormat':\n case 'MarkerFormat':\n break;\n\n case 'StartObject':\n case 'EndObject':\n break;\n\n case 'AlRuns':\n case 'ObjectLink':\n break;\n\n case 'SIIndex':\n break;\n\n case 'AttachedLabel':\n case 'YMult':\n break;\n\n /* Chart Group */\n\n case 'Line':\n case 'Bar':\n break;\n\n case 'Surf':\n break;\n\n /* Axis Group */\n\n case 'AxisParent':\n break;\n\n case 'Pos':\n break;\n\n case 'ValueRange':\n break;\n\n /* Pivot Chart */\n\n case 'SXViewEx9':\n break;\n // TODO\n\n case 'SXViewLink':\n break;\n\n case 'PivotChartBits':\n break;\n\n case 'SBaseRef':\n break;\n\n case 'TextPropsStream':\n break;\n\n /* Chart Misc */\n\n case 'LnExt':\n break;\n\n case 'MkrExt':\n break;\n\n case 'CrtCoopt':\n break;\n\n /* Query Table */\n\n case 'Qsi':\n case 'Qsif':\n case 'Qsir':\n case 'QsiSXTag':\n break;\n\n case 'TxtQry':\n break;\n\n /* Filter */\n\n case 'FilterMode':\n break;\n\n case 'AutoFilter':\n case 'AutoFilterInfo':\n break;\n\n case 'AutoFilter12':\n break;\n\n case 'DropDownObjIds':\n break;\n\n case 'Sort':\n break;\n\n case 'SortData':\n break;\n\n /* Drawing */\n\n case 'ShapePropsStream':\n break;\n\n case 'MsoDrawing':\n case 'MsoDrawingGroup':\n case 'MsoDrawingSelection':\n break;\n\n /* Pub Stuff */\n\n case 'WebPub':\n case 'AutoWebPub':\n break;\n\n /* Print Stuff */\n\n case 'HeaderFooter':\n case 'HFPicture':\n case 'PLV':\n case 'HorizontalPageBreaks':\n case 'VerticalPageBreaks':\n break;\n\n /* Behavioral */\n\n case 'Backup':\n case 'CompressPictures':\n case 'Compat12':\n break;\n\n /* Should not Happen */\n\n case 'Continue':\n case 'ContinueFrt12':\n break;\n\n /* Future Records */\n\n case 'FrtFontList':\n case 'FrtWrapper':\n break;\n\n default:\n switch (R.n) {\n /* nested */\n\n /* BIFF5 records */\n case 'TabIdConf':\n case 'Radar':\n case 'RadarArea':\n case 'DropBar':\n case 'Intl':\n case 'CoordList':\n case 'SerAuxErrBar':\n break;\n\n /* BIFF2-4 records */\n\n case 'BIFF2FONTCLR':\n case 'BIFF2FMTCNT':\n case 'BIFF2FONTXTRA':\n break;\n\n case 'BIFF2XF':\n case 'BIFF3XF':\n case 'BIFF4XF':\n break;\n\n case 'BIFF2XFINDEX':\n break;\n\n case 'BIFF4FMTCNT':\n case 'BIFF2ROW':\n case 'BIFF2WINDOW2':\n break;\n\n /* Miscellaneous */\n\n case 'SCENARIO':\n case 'DConBin':\n case 'PicF':\n case 'DataLabExt':\n case 'Lel':\n case 'BopPop':\n case 'BopPopCustom':\n case 'RealTimeData':\n case 'Name':\n break;\n\n case 'LHNGraph':\n case 'FnGroupName':\n case 'AddMenu':\n case 'LPr':\n break;\n\n case 'ListObj':\n case 'ListField':\n break;\n\n case 'RRSort':\n break;\n\n case 'BigName':\n break;\n\n case 'ToolbarHdr':\n case 'ToolbarEnd':\n break;\n\n case 'DDEObjName':\n break;\n\n case 'FRTArchId$':\n break;\n\n default:\n if (options.WTF) throw 'Unrecognized Record ' + R.n;\n }\n\n }\n\n }\n\n }\n } else blob.l += length;\n }\n\n wb.SheetNames = keys(Directory).sort(function (a, b) {\n return Number(a) - Number(b);\n }).map(function (x) {\n return Directory[x].name;\n });\n if (!options.bookSheets) wb.Sheets = Sheets;\n\n if (!wb.SheetNames.length && Preamble[\"!ref\"]) {\n wb.SheetNames.push(\"Sheet1\");\n if (wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n } else wb.Preamble = Preamble;\n\n if (wb.Sheets) FilterDatabases.forEach(function (r, i) {\n wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r;\n });\n wb.Strings = sst;\n wb.SSF = SSF.get_table();\n if (opts.enc) wb.Encryption = opts.enc;\n if (themes) wb.Themes = themes;\n wb.Metadata = {};\n if (country !== undefined) wb.Metadata.Country = country;\n if (supbooks.names.length > 0) Workbook.Names = supbooks.names;\n wb.Workbook = Workbook;\n return wb;\n }\n /* TODO: split props*/\n\n\n var PSCLSID = {\n SI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n DSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n UDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n };\n\n function parse_xls_props(cfb, props, o) {\n /* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n var DSI = CFB.find(cfb, '!DocumentSummaryInformation');\n if (DSI && DSI.size > 0) try {\n var DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\n for (var d in DocSummary) {\n props[d] = DocSummary[d];\n }\n } catch (e) {\n if (o.WTF) throw e;\n /* empty */\n }\n /* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\n var SI = CFB.find(cfb, '!SummaryInformation');\n if (SI && SI.size > 0) try {\n var Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\n for (var s in Summary) {\n if (props[s] == null) props[s] = Summary[s];\n }\n } catch (e) {\n if (o.WTF) throw e;\n /* empty */\n }\n\n if (props.HeadingPairs && props.TitlesOfParts) {\n load_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n delete props.HeadingPairs;\n delete props.TitlesOfParts;\n }\n }\n\n function write_xls_props(wb, cfb) {\n var DSEntries = [],\n SEntries = [],\n CEntries = [];\n var i = 0,\n Keys;\n\n if (wb.Props) {\n Keys = keys(wb.Props); // $FlowIgnore\n\n for (i = 0; i < Keys.length; ++i) {\n (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n }\n }\n\n if (wb.Custprops) {\n Keys = keys(wb.Custprops); // $FlowIgnore\n\n for (i = 0; i < Keys.length; ++i) {\n if (!Object.prototype.hasOwnProperty.call(wb.Props || {}, Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n }\n }\n\n var CEntries2 = [];\n\n for (i = 0; i < CEntries.length; ++i) {\n if (XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue;\n if (CEntries[i][1] == null) continue;\n CEntries2.push(CEntries[i]);\n }\n\n if (SEntries.length) CFB.utils.cfb_add(cfb, \"/\\x05SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n if (DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\x05DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n }\n\n function parse_xlscfb(cfb, options) {\n if (!options) options = {};\n fix_read_opts(options);\n reset_cp();\n if (options.codepage) set_ansi(options.codepage);\n var CompObj, WB;\n\n if (cfb.FullPaths) {\n if (CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n CompObj = CFB.find(cfb, '!CompObj');\n WB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n } else {\n switch (options.type) {\n case 'base64':\n cfb = s2a(Base64.decode(cfb));\n break;\n\n case 'binary':\n cfb = s2a(cfb);\n break;\n\n case 'buffer':\n break;\n\n case 'array':\n if (!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb);\n break;\n }\n\n prep_blob(cfb, 0);\n WB = {\n content: cfb\n };\n }\n\n var WorkbookP;\n\n var _data;\n\n if (CompObj) parse_compobj(CompObj);\n if (options.bookProps && !options.bookSheets) WorkbookP = {};else {\n var T = has_buf ? 'buffer' : 'array';\n if (WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n /* Quattro Pro 7-8 */\n else if ((_data = CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n /* Quattro Pro 9 */\n else if ((_data = CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));else throw new Error(\"Cannot find Workbook stream\");\n if (options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n }\n var props = {};\n if (cfb.FullPaths) parse_xls_props(cfb, props, options);\n WorkbookP.Props = WorkbookP.Custprops = props;\n /* TODO: split up properties */\n\n if (options.bookFiles) WorkbookP.cfb = cfb;\n /*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\n\n return WorkbookP;\n }\n\n function write_xlscfb(wb, opts) {\n var o = opts || {};\n var cfb = CFB.utils.cfb_new({\n root: \"R\"\n });\n var wbpath = \"/Workbook\";\n\n switch (o.bookType || \"xls\") {\n case \"xls\":\n o.bookType = \"biff8\";\n\n /* falls through */\n\n case \"xla\":\n if (!o.bookType) o.bookType = \"xla\";\n\n /* falls through */\n\n case \"biff8\":\n wbpath = \"/Workbook\";\n o.biff = 8;\n break;\n\n case \"biff5\":\n wbpath = \"/Book\";\n o.biff = 5;\n break;\n\n default:\n throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n }\n\n CFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n if (o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb); // TODO: SI, DSI, CO\n\n if (o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {\n type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"\n }));\n return cfb;\n }\n /* [MS-XLSB] 2.3 Record Enumeration */\n\n\n var XLSBRecordEnum = {\n 0x0000: {\n n: \"BrtRowHdr\",\n f: parse_BrtRowHdr\n },\n 0x0001: {\n n: \"BrtCellBlank\",\n f: parse_BrtCellBlank\n },\n 0x0002: {\n n: \"BrtCellRk\",\n f: parse_BrtCellRk\n },\n 0x0003: {\n n: \"BrtCellError\",\n f: parse_BrtCellError\n },\n 0x0004: {\n n: \"BrtCellBool\",\n f: parse_BrtCellBool\n },\n 0x0005: {\n n: \"BrtCellReal\",\n f: parse_BrtCellReal\n },\n 0x0006: {\n n: \"BrtCellSt\",\n f: parse_BrtCellSt\n },\n 0x0007: {\n n: \"BrtCellIsst\",\n f: parse_BrtCellIsst\n },\n 0x0008: {\n n: \"BrtFmlaString\",\n f: parse_BrtFmlaString\n },\n 0x0009: {\n n: \"BrtFmlaNum\",\n f: parse_BrtFmlaNum\n },\n 0x000A: {\n n: \"BrtFmlaBool\",\n f: parse_BrtFmlaBool\n },\n 0x000B: {\n n: \"BrtFmlaError\",\n f: parse_BrtFmlaError\n },\n 0x000C: {\n n: \"BrtShortBlank\",\n f: parse_BrtShortBlank\n },\n 0x000D: {\n n: \"BrtShortRk\",\n f: parse_BrtShortRk\n },\n 0x000E: {\n n: \"BrtShortError\",\n f: parse_BrtShortError\n },\n 0x000F: {\n n: \"BrtShortBool\",\n f: parse_BrtShortBool\n },\n 0x0010: {\n n: \"BrtShortReal\",\n f: parse_BrtShortReal\n },\n 0x0011: {\n n: \"BrtShortSt\",\n f: parse_BrtShortSt\n },\n 0x0012: {\n n: \"BrtShortIsst\",\n f: parse_BrtShortIsst\n },\n 0x0013: {\n n: \"BrtSSTItem\",\n f: parse_RichStr\n },\n 0x0014: {\n n: \"BrtPCDIMissing\"\n },\n 0x0015: {\n n: \"BrtPCDINumber\"\n },\n 0x0016: {\n n: \"BrtPCDIBoolean\"\n },\n 0x0017: {\n n: \"BrtPCDIError\"\n },\n 0x0018: {\n n: \"BrtPCDIString\"\n },\n 0x0019: {\n n: \"BrtPCDIDatetime\"\n },\n 0x001A: {\n n: \"BrtPCDIIndex\"\n },\n 0x001B: {\n n: \"BrtPCDIAMissing\"\n },\n 0x001C: {\n n: \"BrtPCDIANumber\"\n },\n 0x001D: {\n n: \"BrtPCDIABoolean\"\n },\n 0x001E: {\n n: \"BrtPCDIAError\"\n },\n 0x001F: {\n n: \"BrtPCDIAString\"\n },\n 0x0020: {\n n: \"BrtPCDIADatetime\"\n },\n 0x0021: {\n n: \"BrtPCRRecord\"\n },\n 0x0022: {\n n: \"BrtPCRRecordDt\"\n },\n 0x0023: {\n n: \"BrtFRTBegin\"\n },\n 0x0024: {\n n: \"BrtFRTEnd\"\n },\n 0x0025: {\n n: \"BrtACBegin\"\n },\n 0x0026: {\n n: \"BrtACEnd\"\n },\n 0x0027: {\n n: \"BrtName\",\n f: parse_BrtName\n },\n 0x0028: {\n n: \"BrtIndexRowBlock\"\n },\n 0x002A: {\n n: \"BrtIndexBlock\"\n },\n 0x002B: {\n n: \"BrtFont\",\n f: parse_BrtFont\n },\n 0x002C: {\n n: \"BrtFmt\",\n f: parse_BrtFmt\n },\n 0x002D: {\n n: \"BrtFill\",\n f: parse_BrtFill\n },\n 0x002E: {\n n: \"BrtBorder\",\n f: parse_BrtBorder\n },\n 0x002F: {\n n: \"BrtXF\",\n f: parse_BrtXF\n },\n 0x0030: {\n n: \"BrtStyle\"\n },\n 0x0031: {\n n: \"BrtCellMeta\"\n },\n 0x0032: {\n n: \"BrtValueMeta\"\n },\n 0x0033: {\n n: \"BrtMdb\"\n },\n 0x0034: {\n n: \"BrtBeginFmd\"\n },\n 0x0035: {\n n: \"BrtEndFmd\"\n },\n 0x0036: {\n n: \"BrtBeginMdx\"\n },\n 0x0037: {\n n: \"BrtEndMdx\"\n },\n 0x0038: {\n n: \"BrtBeginMdxTuple\"\n },\n 0x0039: {\n n: \"BrtEndMdxTuple\"\n },\n 0x003A: {\n n: \"BrtMdxMbrIstr\"\n },\n 0x003B: {\n n: \"BrtStr\"\n },\n 0x003C: {\n n: \"BrtColInfo\",\n f: parse_ColInfo\n },\n 0x003E: {\n n: \"BrtCellRString\"\n },\n 0x003F: {\n n: \"BrtCalcChainItem$\",\n f: parse_BrtCalcChainItem$\n },\n 0x0040: {\n n: \"BrtDVal\",\n f: parse_BrtDVal\n },\n 0x0041: {\n n: \"BrtSxvcellNum\"\n },\n 0x0042: {\n n: \"BrtSxvcellStr\"\n },\n 0x0043: {\n n: \"BrtSxvcellBool\"\n },\n 0x0044: {\n n: \"BrtSxvcellErr\"\n },\n 0x0045: {\n n: \"BrtSxvcellDate\"\n },\n 0x0046: {\n n: \"BrtSxvcellNil\"\n },\n 0x0080: {\n n: \"BrtFileVersion\"\n },\n 0x0081: {\n n: \"BrtBeginSheet\"\n },\n 0x0082: {\n n: \"BrtEndSheet\"\n },\n 0x0083: {\n n: \"BrtBeginBook\",\n f: parsenoop,\n p: 0\n },\n 0x0084: {\n n: \"BrtEndBook\"\n },\n 0x0085: {\n n: \"BrtBeginWsViews\"\n },\n 0x0086: {\n n: \"BrtEndWsViews\"\n },\n 0x0087: {\n n: \"BrtBeginBookViews\"\n },\n 0x0088: {\n n: \"BrtEndBookViews\"\n },\n 0x0089: {\n n: \"BrtBeginWsView\",\n f: parse_BrtBeginWsView\n },\n 0x008A: {\n n: \"BrtEndWsView\"\n },\n 0x008B: {\n n: \"BrtBeginCsViews\"\n },\n 0x008C: {\n n: \"BrtEndCsViews\"\n },\n 0x008D: {\n n: \"BrtBeginCsView\"\n },\n 0x008E: {\n n: \"BrtEndCsView\"\n },\n 0x008F: {\n n: \"BrtBeginBundleShs\"\n },\n 0x0090: {\n n: \"BrtEndBundleShs\"\n },\n 0x0091: {\n n: \"BrtBeginSheetData\"\n },\n 0x0092: {\n n: \"BrtEndSheetData\"\n },\n 0x0093: {\n n: \"BrtWsProp\",\n f: parse_BrtWsProp\n },\n 0x0094: {\n n: \"BrtWsDim\",\n f: parse_BrtWsDim,\n p: 16\n },\n 0x0097: {\n n: \"BrtPane\",\n f: parse_BrtPane\n },\n 0x0098: {\n n: \"BrtSel\"\n },\n 0x0099: {\n n: \"BrtWbProp\",\n f: parse_BrtWbProp\n },\n 0x009A: {\n n: \"BrtWbFactoid\"\n },\n 0x009B: {\n n: \"BrtFileRecover\"\n },\n 0x009C: {\n n: \"BrtBundleSh\",\n f: parse_BrtBundleSh\n },\n 0x009D: {\n n: \"BrtCalcProp\"\n },\n 0x009E: {\n n: \"BrtBookView\"\n },\n 0x009F: {\n n: \"BrtBeginSst\",\n f: parse_BrtBeginSst\n },\n 0x00A0: {\n n: \"BrtEndSst\"\n },\n 0x00A1: {\n n: \"BrtBeginAFilter\",\n f: parse_UncheckedRfX\n },\n 0x00A2: {\n n: \"BrtEndAFilter\"\n },\n 0x00A3: {\n n: \"BrtBeginFilterColumn\"\n },\n 0x00A4: {\n n: \"BrtEndFilterColumn\"\n },\n 0x00A5: {\n n: \"BrtBeginFilters\"\n },\n 0x00A6: {\n n: \"BrtEndFilters\"\n },\n 0x00A7: {\n n: \"BrtFilter\"\n },\n 0x00A8: {\n n: \"BrtColorFilter\"\n },\n 0x00A9: {\n n: \"BrtIconFilter\"\n },\n 0x00AA: {\n n: \"BrtTop10Filter\"\n },\n 0x00AB: {\n n: \"BrtDynamicFilter\"\n },\n 0x00AC: {\n n: \"BrtBeginCustomFilters\"\n },\n 0x00AD: {\n n: \"BrtEndCustomFilters\"\n },\n 0x00AE: {\n n: \"BrtCustomFilter\"\n },\n 0x00AF: {\n n: \"BrtAFilterDateGroupItem\"\n },\n 0x00B0: {\n n: \"BrtMergeCell\",\n f: parse_BrtMergeCell\n },\n 0x00B1: {\n n: \"BrtBeginMergeCells\"\n },\n 0x00B2: {\n n: \"BrtEndMergeCells\"\n },\n 0x00B3: {\n n: \"BrtBeginPivotCacheDef\"\n },\n 0x00B4: {\n n: \"BrtEndPivotCacheDef\"\n },\n 0x00B5: {\n n: \"BrtBeginPCDFields\"\n },\n 0x00B6: {\n n: \"BrtEndPCDFields\"\n },\n 0x00B7: {\n n: \"BrtBeginPCDField\"\n },\n 0x00B8: {\n n: \"BrtEndPCDField\"\n },\n 0x00B9: {\n n: \"BrtBeginPCDSource\"\n },\n 0x00BA: {\n n: \"BrtEndPCDSource\"\n },\n 0x00BB: {\n n: \"BrtBeginPCDSRange\"\n },\n 0x00BC: {\n n: \"BrtEndPCDSRange\"\n },\n 0x00BD: {\n n: \"BrtBeginPCDFAtbl\"\n },\n 0x00BE: {\n n: \"BrtEndPCDFAtbl\"\n },\n 0x00BF: {\n n: \"BrtBeginPCDIRun\"\n },\n 0x00C0: {\n n: \"BrtEndPCDIRun\"\n },\n 0x00C1: {\n n: \"BrtBeginPivotCacheRecords\"\n },\n 0x00C2: {\n n: \"BrtEndPivotCacheRecords\"\n },\n 0x00C3: {\n n: \"BrtBeginPCDHierarchies\"\n },\n 0x00C4: {\n n: \"BrtEndPCDHierarchies\"\n },\n 0x00C5: {\n n: \"BrtBeginPCDHierarchy\"\n },\n 0x00C6: {\n n: \"BrtEndPCDHierarchy\"\n },\n 0x00C7: {\n n: \"BrtBeginPCDHFieldsUsage\"\n },\n 0x00C8: {\n n: \"BrtEndPCDHFieldsUsage\"\n },\n 0x00C9: {\n n: \"BrtBeginExtConnection\"\n },\n 0x00CA: {\n n: \"BrtEndExtConnection\"\n },\n 0x00CB: {\n n: \"BrtBeginECDbProps\"\n },\n 0x00CC: {\n n: \"BrtEndECDbProps\"\n },\n 0x00CD: {\n n: \"BrtBeginECOlapProps\"\n },\n 0x00CE: {\n n: \"BrtEndECOlapProps\"\n },\n 0x00CF: {\n n: \"BrtBeginPCDSConsol\"\n },\n 0x00D0: {\n n: \"BrtEndPCDSConsol\"\n },\n 0x00D1: {\n n: \"BrtBeginPCDSCPages\"\n },\n 0x00D2: {\n n: \"BrtEndPCDSCPages\"\n },\n 0x00D3: {\n n: \"BrtBeginPCDSCPage\"\n },\n 0x00D4: {\n n: \"BrtEndPCDSCPage\"\n },\n 0x00D5: {\n n: \"BrtBeginPCDSCPItem\"\n },\n 0x00D6: {\n n: \"BrtEndPCDSCPItem\"\n },\n 0x00D7: {\n n: \"BrtBeginPCDSCSets\"\n },\n 0x00D8: {\n n: \"BrtEndPCDSCSets\"\n },\n 0x00D9: {\n n: \"BrtBeginPCDSCSet\"\n },\n 0x00DA: {\n n: \"BrtEndPCDSCSet\"\n },\n 0x00DB: {\n n: \"BrtBeginPCDFGroup\"\n },\n 0x00DC: {\n n: \"BrtEndPCDFGroup\"\n },\n 0x00DD: {\n n: \"BrtBeginPCDFGItems\"\n },\n 0x00DE: {\n n: \"BrtEndPCDFGItems\"\n },\n 0x00DF: {\n n: \"BrtBeginPCDFGRange\"\n },\n 0x00E0: {\n n: \"BrtEndPCDFGRange\"\n },\n 0x00E1: {\n n: \"BrtBeginPCDFGDiscrete\"\n },\n 0x00E2: {\n n: \"BrtEndPCDFGDiscrete\"\n },\n 0x00E3: {\n n: \"BrtBeginPCDSDTupleCache\"\n },\n 0x00E4: {\n n: \"BrtEndPCDSDTupleCache\"\n },\n 0x00E5: {\n n: \"BrtBeginPCDSDTCEntries\"\n },\n 0x00E6: {\n n: \"BrtEndPCDSDTCEntries\"\n },\n 0x00E7: {\n n: \"BrtBeginPCDSDTCEMembers\"\n },\n 0x00E8: {\n n: \"BrtEndPCDSDTCEMembers\"\n },\n 0x00E9: {\n n: \"BrtBeginPCDSDTCEMember\"\n },\n 0x00EA: {\n n: \"BrtEndPCDSDTCEMember\"\n },\n 0x00EB: {\n n: \"BrtBeginPCDSDTCQueries\"\n },\n 0x00EC: {\n n: \"BrtEndPCDSDTCQueries\"\n },\n 0x00ED: {\n n: \"BrtBeginPCDSDTCQuery\"\n },\n 0x00EE: {\n n: \"BrtEndPCDSDTCQuery\"\n },\n 0x00EF: {\n n: \"BrtBeginPCDSDTCSets\"\n },\n 0x00F0: {\n n: \"BrtEndPCDSDTCSets\"\n },\n 0x00F1: {\n n: \"BrtBeginPCDSDTCSet\"\n },\n 0x00F2: {\n n: \"BrtEndPCDSDTCSet\"\n },\n 0x00F3: {\n n: \"BrtBeginPCDCalcItems\"\n },\n 0x00F4: {\n n: \"BrtEndPCDCalcItems\"\n },\n 0x00F5: {\n n: \"BrtBeginPCDCalcItem\"\n },\n 0x00F6: {\n n: \"BrtEndPCDCalcItem\"\n },\n 0x00F7: {\n n: \"BrtBeginPRule\"\n },\n 0x00F8: {\n n: \"BrtEndPRule\"\n },\n 0x00F9: {\n n: \"BrtBeginPRFilters\"\n },\n 0x00FA: {\n n: \"BrtEndPRFilters\"\n },\n 0x00FB: {\n n: \"BrtBeginPRFilter\"\n },\n 0x00FC: {\n n: \"BrtEndPRFilter\"\n },\n 0x00FD: {\n n: \"BrtBeginPNames\"\n },\n 0x00FE: {\n n: \"BrtEndPNames\"\n },\n 0x00FF: {\n n: \"BrtBeginPName\"\n },\n 0x0100: {\n n: \"BrtEndPName\"\n },\n 0x0101: {\n n: \"BrtBeginPNPairs\"\n },\n 0x0102: {\n n: \"BrtEndPNPairs\"\n },\n 0x0103: {\n n: \"BrtBeginPNPair\"\n },\n 0x0104: {\n n: \"BrtEndPNPair\"\n },\n 0x0105: {\n n: \"BrtBeginECWebProps\"\n },\n 0x0106: {\n n: \"BrtEndECWebProps\"\n },\n 0x0107: {\n n: \"BrtBeginEcWpTables\"\n },\n 0x0108: {\n n: \"BrtEndECWPTables\"\n },\n 0x0109: {\n n: \"BrtBeginECParams\"\n },\n 0x010A: {\n n: \"BrtEndECParams\"\n },\n 0x010B: {\n n: \"BrtBeginECParam\"\n },\n 0x010C: {\n n: \"BrtEndECParam\"\n },\n 0x010D: {\n n: \"BrtBeginPCDKPIs\"\n },\n 0x010E: {\n n: \"BrtEndPCDKPIs\"\n },\n 0x010F: {\n n: \"BrtBeginPCDKPI\"\n },\n 0x0110: {\n n: \"BrtEndPCDKPI\"\n },\n 0x0111: {\n n: \"BrtBeginDims\"\n },\n 0x0112: {\n n: \"BrtEndDims\"\n },\n 0x0113: {\n n: \"BrtBeginDim\"\n },\n 0x0114: {\n n: \"BrtEndDim\"\n },\n 0x0115: {\n n: \"BrtIndexPartEnd\"\n },\n 0x0116: {\n n: \"BrtBeginStyleSheet\"\n },\n 0x0117: {\n n: \"BrtEndStyleSheet\"\n },\n 0x0118: {\n n: \"BrtBeginSXView\"\n },\n 0x0119: {\n n: \"BrtEndSXVI\"\n },\n 0x011A: {\n n: \"BrtBeginSXVI\"\n },\n 0x011B: {\n n: \"BrtBeginSXVIs\"\n },\n 0x011C: {\n n: \"BrtEndSXVIs\"\n },\n 0x011D: {\n n: \"BrtBeginSXVD\"\n },\n 0x011E: {\n n: \"BrtEndSXVD\"\n },\n 0x011F: {\n n: \"BrtBeginSXVDs\"\n },\n 0x0120: {\n n: \"BrtEndSXVDs\"\n },\n 0x0121: {\n n: \"BrtBeginSXPI\"\n },\n 0x0122: {\n n: \"BrtEndSXPI\"\n },\n 0x0123: {\n n: \"BrtBeginSXPIs\"\n },\n 0x0124: {\n n: \"BrtEndSXPIs\"\n },\n 0x0125: {\n n: \"BrtBeginSXDI\"\n },\n 0x0126: {\n n: \"BrtEndSXDI\"\n },\n 0x0127: {\n n: \"BrtBeginSXDIs\"\n },\n 0x0128: {\n n: \"BrtEndSXDIs\"\n },\n 0x0129: {\n n: \"BrtBeginSXLI\"\n },\n 0x012A: {\n n: \"BrtEndSXLI\"\n },\n 0x012B: {\n n: \"BrtBeginSXLIRws\"\n },\n 0x012C: {\n n: \"BrtEndSXLIRws\"\n },\n 0x012D: {\n n: \"BrtBeginSXLICols\"\n },\n 0x012E: {\n n: \"BrtEndSXLICols\"\n },\n 0x012F: {\n n: \"BrtBeginSXFormat\"\n },\n 0x0130: {\n n: \"BrtEndSXFormat\"\n },\n 0x0131: {\n n: \"BrtBeginSXFormats\"\n },\n 0x0132: {\n n: \"BrtEndSxFormats\"\n },\n 0x0133: {\n n: \"BrtBeginSxSelect\"\n },\n 0x0134: {\n n: \"BrtEndSxSelect\"\n },\n 0x0135: {\n n: \"BrtBeginISXVDRws\"\n },\n 0x0136: {\n n: \"BrtEndISXVDRws\"\n },\n 0x0137: {\n n: \"BrtBeginISXVDCols\"\n },\n 0x0138: {\n n: \"BrtEndISXVDCols\"\n },\n 0x0139: {\n n: \"BrtEndSXLocation\"\n },\n 0x013A: {\n n: \"BrtBeginSXLocation\"\n },\n 0x013B: {\n n: \"BrtEndSXView\"\n },\n 0x013C: {\n n: \"BrtBeginSXTHs\"\n },\n 0x013D: {\n n: \"BrtEndSXTHs\"\n },\n 0x013E: {\n n: \"BrtBeginSXTH\"\n },\n 0x013F: {\n n: \"BrtEndSXTH\"\n },\n 0x0140: {\n n: \"BrtBeginISXTHRws\"\n },\n 0x0141: {\n n: \"BrtEndISXTHRws\"\n },\n 0x0142: {\n n: \"BrtBeginISXTHCols\"\n },\n 0x0143: {\n n: \"BrtEndISXTHCols\"\n },\n 0x0144: {\n n: \"BrtBeginSXTDMPS\"\n },\n 0x0145: {\n n: \"BrtEndSXTDMPs\"\n },\n 0x0146: {\n n: \"BrtBeginSXTDMP\"\n },\n 0x0147: {\n n: \"BrtEndSXTDMP\"\n },\n 0x0148: {\n n: \"BrtBeginSXTHItems\"\n },\n 0x0149: {\n n: \"BrtEndSXTHItems\"\n },\n 0x014A: {\n n: \"BrtBeginSXTHItem\"\n },\n 0x014B: {\n n: \"BrtEndSXTHItem\"\n },\n 0x014C: {\n n: \"BrtBeginMetadata\"\n },\n 0x014D: {\n n: \"BrtEndMetadata\"\n },\n 0x014E: {\n n: \"BrtBeginEsmdtinfo\"\n },\n 0x014F: {\n n: \"BrtMdtinfo\"\n },\n 0x0150: {\n n: \"BrtEndEsmdtinfo\"\n },\n 0x0151: {\n n: \"BrtBeginEsmdb\"\n },\n 0x0152: {\n n: \"BrtEndEsmdb\"\n },\n 0x0153: {\n n: \"BrtBeginEsfmd\"\n },\n 0x0154: {\n n: \"BrtEndEsfmd\"\n },\n 0x0155: {\n n: \"BrtBeginSingleCells\"\n },\n 0x0156: {\n n: \"BrtEndSingleCells\"\n },\n 0x0157: {\n n: \"BrtBeginList\"\n },\n 0x0158: {\n n: \"BrtEndList\"\n },\n 0x0159: {\n n: \"BrtBeginListCols\"\n },\n 0x015A: {\n n: \"BrtEndListCols\"\n },\n 0x015B: {\n n: \"BrtBeginListCol\"\n },\n 0x015C: {\n n: \"BrtEndListCol\"\n },\n 0x015D: {\n n: \"BrtBeginListXmlCPr\"\n },\n 0x015E: {\n n: \"BrtEndListXmlCPr\"\n },\n 0x015F: {\n n: \"BrtListCCFmla\"\n },\n 0x0160: {\n n: \"BrtListTrFmla\"\n },\n 0x0161: {\n n: \"BrtBeginExternals\"\n },\n 0x0162: {\n n: \"BrtEndExternals\"\n },\n 0x0163: {\n n: \"BrtSupBookSrc\",\n f: parse_RelID\n },\n 0x0165: {\n n: \"BrtSupSelf\"\n },\n 0x0166: {\n n: \"BrtSupSame\"\n },\n 0x0167: {\n n: \"BrtSupTabs\"\n },\n 0x0168: {\n n: \"BrtBeginSupBook\"\n },\n 0x0169: {\n n: \"BrtPlaceholderName\"\n },\n 0x016A: {\n n: \"BrtExternSheet\",\n f: parse_ExternSheet\n },\n 0x016B: {\n n: \"BrtExternTableStart\"\n },\n 0x016C: {\n n: \"BrtExternTableEnd\"\n },\n 0x016E: {\n n: \"BrtExternRowHdr\"\n },\n 0x016F: {\n n: \"BrtExternCellBlank\"\n },\n 0x0170: {\n n: \"BrtExternCellReal\"\n },\n 0x0171: {\n n: \"BrtExternCellBool\"\n },\n 0x0172: {\n n: \"BrtExternCellError\"\n },\n 0x0173: {\n n: \"BrtExternCellString\"\n },\n 0x0174: {\n n: \"BrtBeginEsmdx\"\n },\n 0x0175: {\n n: \"BrtEndEsmdx\"\n },\n 0x0176: {\n n: \"BrtBeginMdxSet\"\n },\n 0x0177: {\n n: \"BrtEndMdxSet\"\n },\n 0x0178: {\n n: \"BrtBeginMdxMbrProp\"\n },\n 0x0179: {\n n: \"BrtEndMdxMbrProp\"\n },\n 0x017A: {\n n: \"BrtBeginMdxKPI\"\n },\n 0x017B: {\n n: \"BrtEndMdxKPI\"\n },\n 0x017C: {\n n: \"BrtBeginEsstr\"\n },\n 0x017D: {\n n: \"BrtEndEsstr\"\n },\n 0x017E: {\n n: \"BrtBeginPRFItem\"\n },\n 0x017F: {\n n: \"BrtEndPRFItem\"\n },\n 0x0180: {\n n: \"BrtBeginPivotCacheIDs\"\n },\n 0x0181: {\n n: \"BrtEndPivotCacheIDs\"\n },\n 0x0182: {\n n: \"BrtBeginPivotCacheID\"\n },\n 0x0183: {\n n: \"BrtEndPivotCacheID\"\n },\n 0x0184: {\n n: \"BrtBeginISXVIs\"\n },\n 0x0185: {\n n: \"BrtEndISXVIs\"\n },\n 0x0186: {\n n: \"BrtBeginColInfos\"\n },\n 0x0187: {\n n: \"BrtEndColInfos\"\n },\n 0x0188: {\n n: \"BrtBeginRwBrk\"\n },\n 0x0189: {\n n: \"BrtEndRwBrk\"\n },\n 0x018A: {\n n: \"BrtBeginColBrk\"\n },\n 0x018B: {\n n: \"BrtEndColBrk\"\n },\n 0x018C: {\n n: \"BrtBrk\"\n },\n 0x018D: {\n n: \"BrtUserBookView\"\n },\n 0x018E: {\n n: \"BrtInfo\"\n },\n 0x018F: {\n n: \"BrtCUsr\"\n },\n 0x0190: {\n n: \"BrtUsr\"\n },\n 0x0191: {\n n: \"BrtBeginUsers\"\n },\n 0x0193: {\n n: \"BrtEOF\"\n },\n 0x0194: {\n n: \"BrtUCR\"\n },\n 0x0195: {\n n: \"BrtRRInsDel\"\n },\n 0x0196: {\n n: \"BrtRREndInsDel\"\n },\n 0x0197: {\n n: \"BrtRRMove\"\n },\n 0x0198: {\n n: \"BrtRREndMove\"\n },\n 0x0199: {\n n: \"BrtRRChgCell\"\n },\n 0x019A: {\n n: \"BrtRREndChgCell\"\n },\n 0x019B: {\n n: \"BrtRRHeader\"\n },\n 0x019C: {\n n: \"BrtRRUserView\"\n },\n 0x019D: {\n n: \"BrtRRRenSheet\"\n },\n 0x019E: {\n n: \"BrtRRInsertSh\"\n },\n 0x019F: {\n n: \"BrtRRDefName\"\n },\n 0x01A0: {\n n: \"BrtRRNote\"\n },\n 0x01A1: {\n n: \"BrtRRConflict\"\n },\n 0x01A2: {\n n: \"BrtRRTQSIF\"\n },\n 0x01A3: {\n n: \"BrtRRFormat\"\n },\n 0x01A4: {\n n: \"BrtRREndFormat\"\n },\n 0x01A5: {\n n: \"BrtRRAutoFmt\"\n },\n 0x01A6: {\n n: \"BrtBeginUserShViews\"\n },\n 0x01A7: {\n n: \"BrtBeginUserShView\"\n },\n 0x01A8: {\n n: \"BrtEndUserShView\"\n },\n 0x01A9: {\n n: \"BrtEndUserShViews\"\n },\n 0x01AA: {\n n: \"BrtArrFmla\",\n f: parse_BrtArrFmla\n },\n 0x01AB: {\n n: \"BrtShrFmla\",\n f: parse_BrtShrFmla\n },\n 0x01AC: {\n n: \"BrtTable\"\n },\n 0x01AD: {\n n: \"BrtBeginExtConnections\"\n },\n 0x01AE: {\n n: \"BrtEndExtConnections\"\n },\n 0x01AF: {\n n: \"BrtBeginPCDCalcMems\"\n },\n 0x01B0: {\n n: \"BrtEndPCDCalcMems\"\n },\n 0x01B1: {\n n: \"BrtBeginPCDCalcMem\"\n },\n 0x01B2: {\n n: \"BrtEndPCDCalcMem\"\n },\n 0x01B3: {\n n: \"BrtBeginPCDHGLevels\"\n },\n 0x01B4: {\n n: \"BrtEndPCDHGLevels\"\n },\n 0x01B5: {\n n: \"BrtBeginPCDHGLevel\"\n },\n 0x01B6: {\n n: \"BrtEndPCDHGLevel\"\n },\n 0x01B7: {\n n: \"BrtBeginPCDHGLGroups\"\n },\n 0x01B8: {\n n: \"BrtEndPCDHGLGroups\"\n },\n 0x01B9: {\n n: \"BrtBeginPCDHGLGroup\"\n },\n 0x01BA: {\n n: \"BrtEndPCDHGLGroup\"\n },\n 0x01BB: {\n n: \"BrtBeginPCDHGLGMembers\"\n },\n 0x01BC: {\n n: \"BrtEndPCDHGLGMembers\"\n },\n 0x01BD: {\n n: \"BrtBeginPCDHGLGMember\"\n },\n 0x01BE: {\n n: \"BrtEndPCDHGLGMember\"\n },\n 0x01BF: {\n n: \"BrtBeginQSI\"\n },\n 0x01C0: {\n n: \"BrtEndQSI\"\n },\n 0x01C1: {\n n: \"BrtBeginQSIR\"\n },\n 0x01C2: {\n n: \"BrtEndQSIR\"\n },\n 0x01C3: {\n n: \"BrtBeginDeletedNames\"\n },\n 0x01C4: {\n n: \"BrtEndDeletedNames\"\n },\n 0x01C5: {\n n: \"BrtBeginDeletedName\"\n },\n 0x01C6: {\n n: \"BrtEndDeletedName\"\n },\n 0x01C7: {\n n: \"BrtBeginQSIFs\"\n },\n 0x01C8: {\n n: \"BrtEndQSIFs\"\n },\n 0x01C9: {\n n: \"BrtBeginQSIF\"\n },\n 0x01CA: {\n n: \"BrtEndQSIF\"\n },\n 0x01CB: {\n n: \"BrtBeginAutoSortScope\"\n },\n 0x01CC: {\n n: \"BrtEndAutoSortScope\"\n },\n 0x01CD: {\n n: \"BrtBeginConditionalFormatting\"\n },\n 0x01CE: {\n n: \"BrtEndConditionalFormatting\"\n },\n 0x01CF: {\n n: \"BrtBeginCFRule\"\n },\n 0x01D0: {\n n: \"BrtEndCFRule\"\n },\n 0x01D1: {\n n: \"BrtBeginIconSet\"\n },\n 0x01D2: {\n n: \"BrtEndIconSet\"\n },\n 0x01D3: {\n n: \"BrtBeginDatabar\"\n },\n 0x01D4: {\n n: \"BrtEndDatabar\"\n },\n 0x01D5: {\n n: \"BrtBeginColorScale\"\n },\n 0x01D6: {\n n: \"BrtEndColorScale\"\n },\n 0x01D7: {\n n: \"BrtCFVO\"\n },\n 0x01D8: {\n n: \"BrtExternValueMeta\"\n },\n 0x01D9: {\n n: \"BrtBeginColorPalette\"\n },\n 0x01DA: {\n n: \"BrtEndColorPalette\"\n },\n 0x01DB: {\n n: \"BrtIndexedColor\"\n },\n 0x01DC: {\n n: \"BrtMargins\",\n f: parse_BrtMargins\n },\n 0x01DD: {\n n: \"BrtPrintOptions\"\n },\n 0x01DE: {\n n: \"BrtPageSetup\"\n },\n 0x01DF: {\n n: \"BrtBeginHeaderFooter\"\n },\n 0x01E0: {\n n: \"BrtEndHeaderFooter\"\n },\n 0x01E1: {\n n: \"BrtBeginSXCrtFormat\"\n },\n 0x01E2: {\n n: \"BrtEndSXCrtFormat\"\n },\n 0x01E3: {\n n: \"BrtBeginSXCrtFormats\"\n },\n 0x01E4: {\n n: \"BrtEndSXCrtFormats\"\n },\n 0x01E5: {\n n: \"BrtWsFmtInfo\",\n f: parse_BrtWsFmtInfo\n },\n 0x01E6: {\n n: \"BrtBeginMgs\"\n },\n 0x01E7: {\n n: \"BrtEndMGs\"\n },\n 0x01E8: {\n n: \"BrtBeginMGMaps\"\n },\n 0x01E9: {\n n: \"BrtEndMGMaps\"\n },\n 0x01EA: {\n n: \"BrtBeginMG\"\n },\n 0x01EB: {\n n: \"BrtEndMG\"\n },\n 0x01EC: {\n n: \"BrtBeginMap\"\n },\n 0x01ED: {\n n: \"BrtEndMap\"\n },\n 0x01EE: {\n n: \"BrtHLink\",\n f: parse_BrtHLink\n },\n 0x01EF: {\n n: \"BrtBeginDCon\"\n },\n 0x01F0: {\n n: \"BrtEndDCon\"\n },\n 0x01F1: {\n n: \"BrtBeginDRefs\"\n },\n 0x01F2: {\n n: \"BrtEndDRefs\"\n },\n 0x01F3: {\n n: \"BrtDRef\"\n },\n 0x01F4: {\n n: \"BrtBeginScenMan\"\n },\n 0x01F5: {\n n: \"BrtEndScenMan\"\n },\n 0x01F6: {\n n: \"BrtBeginSct\"\n },\n 0x01F7: {\n n: \"BrtEndSct\"\n },\n 0x01F8: {\n n: \"BrtSlc\"\n },\n 0x01F9: {\n n: \"BrtBeginDXFs\"\n },\n 0x01FA: {\n n: \"BrtEndDXFs\"\n },\n 0x01FB: {\n n: \"BrtDXF\"\n },\n 0x01FC: {\n n: \"BrtBeginTableStyles\"\n },\n 0x01FD: {\n n: \"BrtEndTableStyles\"\n },\n 0x01FE: {\n n: \"BrtBeginTableStyle\"\n },\n 0x01FF: {\n n: \"BrtEndTableStyle\"\n },\n 0x0200: {\n n: \"BrtTableStyleElement\"\n },\n 0x0201: {\n n: \"BrtTableStyleClient\"\n },\n 0x0202: {\n n: \"BrtBeginVolDeps\"\n },\n 0x0203: {\n n: \"BrtEndVolDeps\"\n },\n 0x0204: {\n n: \"BrtBeginVolType\"\n },\n 0x0205: {\n n: \"BrtEndVolType\"\n },\n 0x0206: {\n n: \"BrtBeginVolMain\"\n },\n 0x0207: {\n n: \"BrtEndVolMain\"\n },\n 0x0208: {\n n: \"BrtBeginVolTopic\"\n },\n 0x0209: {\n n: \"BrtEndVolTopic\"\n },\n 0x020A: {\n n: \"BrtVolSubtopic\"\n },\n 0x020B: {\n n: \"BrtVolRef\"\n },\n 0x020C: {\n n: \"BrtVolNum\"\n },\n 0x020D: {\n n: \"BrtVolErr\"\n },\n 0x020E: {\n n: \"BrtVolStr\"\n },\n 0x020F: {\n n: \"BrtVolBool\"\n },\n 0x0210: {\n n: \"BrtBeginCalcChain$\"\n },\n 0x0211: {\n n: \"BrtEndCalcChain$\"\n },\n 0x0212: {\n n: \"BrtBeginSortState\"\n },\n 0x0213: {\n n: \"BrtEndSortState\"\n },\n 0x0214: {\n n: \"BrtBeginSortCond\"\n },\n 0x0215: {\n n: \"BrtEndSortCond\"\n },\n 0x0216: {\n n: \"BrtBookProtection\"\n },\n 0x0217: {\n n: \"BrtSheetProtection\"\n },\n 0x0218: {\n n: \"BrtRangeProtection\"\n },\n 0x0219: {\n n: \"BrtPhoneticInfo\"\n },\n 0x021A: {\n n: \"BrtBeginECTxtWiz\"\n },\n 0x021B: {\n n: \"BrtEndECTxtWiz\"\n },\n 0x021C: {\n n: \"BrtBeginECTWFldInfoLst\"\n },\n 0x021D: {\n n: \"BrtEndECTWFldInfoLst\"\n },\n 0x021E: {\n n: \"BrtBeginECTwFldInfo\"\n },\n 0x0224: {\n n: \"BrtFileSharing\"\n },\n 0x0225: {\n n: \"BrtOleSize\"\n },\n 0x0226: {\n n: \"BrtDrawing\",\n f: parse_RelID\n },\n 0x0227: {\n n: \"BrtLegacyDrawing\"\n },\n 0x0228: {\n n: \"BrtLegacyDrawingHF\"\n },\n 0x0229: {\n n: \"BrtWebOpt\"\n },\n 0x022A: {\n n: \"BrtBeginWebPubItems\"\n },\n 0x022B: {\n n: \"BrtEndWebPubItems\"\n },\n 0x022C: {\n n: \"BrtBeginWebPubItem\"\n },\n 0x022D: {\n n: \"BrtEndWebPubItem\"\n },\n 0x022E: {\n n: \"BrtBeginSXCondFmt\"\n },\n 0x022F: {\n n: \"BrtEndSXCondFmt\"\n },\n 0x0230: {\n n: \"BrtBeginSXCondFmts\"\n },\n 0x0231: {\n n: \"BrtEndSXCondFmts\"\n },\n 0x0232: {\n n: \"BrtBkHim\"\n },\n 0x0234: {\n n: \"BrtColor\"\n },\n 0x0235: {\n n: \"BrtBeginIndexedColors\"\n },\n 0x0236: {\n n: \"BrtEndIndexedColors\"\n },\n 0x0239: {\n n: \"BrtBeginMRUColors\"\n },\n 0x023A: {\n n: \"BrtEndMRUColors\"\n },\n 0x023C: {\n n: \"BrtMRUColor\"\n },\n 0x023D: {\n n: \"BrtBeginDVals\"\n },\n 0x023E: {\n n: \"BrtEndDVals\"\n },\n 0x0241: {\n n: \"BrtSupNameStart\"\n },\n 0x0242: {\n n: \"BrtSupNameValueStart\"\n },\n 0x0243: {\n n: \"BrtSupNameValueEnd\"\n },\n 0x0244: {\n n: \"BrtSupNameNum\"\n },\n 0x0245: {\n n: \"BrtSupNameErr\"\n },\n 0x0246: {\n n: \"BrtSupNameSt\"\n },\n 0x0247: {\n n: \"BrtSupNameNil\"\n },\n 0x0248: {\n n: \"BrtSupNameBool\"\n },\n 0x0249: {\n n: \"BrtSupNameFmla\"\n },\n 0x024A: {\n n: \"BrtSupNameBits\"\n },\n 0x024B: {\n n: \"BrtSupNameEnd\"\n },\n 0x024C: {\n n: \"BrtEndSupBook\"\n },\n 0x024D: {\n n: \"BrtCellSmartTagProperty\"\n },\n 0x024E: {\n n: \"BrtBeginCellSmartTag\"\n },\n 0x024F: {\n n: \"BrtEndCellSmartTag\"\n },\n 0x0250: {\n n: \"BrtBeginCellSmartTags\"\n },\n 0x0251: {\n n: \"BrtEndCellSmartTags\"\n },\n 0x0252: {\n n: \"BrtBeginSmartTags\"\n },\n 0x0253: {\n n: \"BrtEndSmartTags\"\n },\n 0x0254: {\n n: \"BrtSmartTagType\"\n },\n 0x0255: {\n n: \"BrtBeginSmartTagTypes\"\n },\n 0x0256: {\n n: \"BrtEndSmartTagTypes\"\n },\n 0x0257: {\n n: \"BrtBeginSXFilters\"\n },\n 0x0258: {\n n: \"BrtEndSXFilters\"\n },\n 0x0259: {\n n: \"BrtBeginSXFILTER\"\n },\n 0x025A: {\n n: \"BrtEndSXFilter\"\n },\n 0x025B: {\n n: \"BrtBeginFills\"\n },\n 0x025C: {\n n: \"BrtEndFills\"\n },\n 0x025D: {\n n: \"BrtBeginCellWatches\"\n },\n 0x025E: {\n n: \"BrtEndCellWatches\"\n },\n 0x025F: {\n n: \"BrtCellWatch\"\n },\n 0x0260: {\n n: \"BrtBeginCRErrs\"\n },\n 0x0261: {\n n: \"BrtEndCRErrs\"\n },\n 0x0262: {\n n: \"BrtCrashRecErr\"\n },\n 0x0263: {\n n: \"BrtBeginFonts\"\n },\n 0x0264: {\n n: \"BrtEndFonts\"\n },\n 0x0265: {\n n: \"BrtBeginBorders\"\n },\n 0x0266: {\n n: \"BrtEndBorders\"\n },\n 0x0267: {\n n: \"BrtBeginFmts\"\n },\n 0x0268: {\n n: \"BrtEndFmts\"\n },\n 0x0269: {\n n: \"BrtBeginCellXFs\"\n },\n 0x026A: {\n n: \"BrtEndCellXFs\"\n },\n 0x026B: {\n n: \"BrtBeginStyles\"\n },\n 0x026C: {\n n: \"BrtEndStyles\"\n },\n 0x0271: {\n n: \"BrtBigName\"\n },\n 0x0272: {\n n: \"BrtBeginCellStyleXFs\"\n },\n 0x0273: {\n n: \"BrtEndCellStyleXFs\"\n },\n 0x0274: {\n n: \"BrtBeginComments\"\n },\n 0x0275: {\n n: \"BrtEndComments\"\n },\n 0x0276: {\n n: \"BrtBeginCommentAuthors\"\n },\n 0x0277: {\n n: \"BrtEndCommentAuthors\"\n },\n 0x0278: {\n n: \"BrtCommentAuthor\",\n f: parse_BrtCommentAuthor\n },\n 0x0279: {\n n: \"BrtBeginCommentList\"\n },\n 0x027A: {\n n: \"BrtEndCommentList\"\n },\n 0x027B: {\n n: \"BrtBeginComment\",\n f: parse_BrtBeginComment\n },\n 0x027C: {\n n: \"BrtEndComment\"\n },\n 0x027D: {\n n: \"BrtCommentText\",\n f: parse_BrtCommentText\n },\n 0x027E: {\n n: \"BrtBeginOleObjects\"\n },\n 0x027F: {\n n: \"BrtOleObject\"\n },\n 0x0280: {\n n: \"BrtEndOleObjects\"\n },\n 0x0281: {\n n: \"BrtBeginSxrules\"\n },\n 0x0282: {\n n: \"BrtEndSxRules\"\n },\n 0x0283: {\n n: \"BrtBeginActiveXControls\"\n },\n 0x0284: {\n n: \"BrtActiveX\"\n },\n 0x0285: {\n n: \"BrtEndActiveXControls\"\n },\n 0x0286: {\n n: \"BrtBeginPCDSDTCEMembersSortBy\"\n },\n 0x0288: {\n n: \"BrtBeginCellIgnoreECs\"\n },\n 0x0289: {\n n: \"BrtCellIgnoreEC\"\n },\n 0x028A: {\n n: \"BrtEndCellIgnoreECs\"\n },\n 0x028B: {\n n: \"BrtCsProp\",\n f: parse_BrtCsProp\n },\n 0x028C: {\n n: \"BrtCsPageSetup\"\n },\n 0x028D: {\n n: \"BrtBeginUserCsViews\"\n },\n 0x028E: {\n n: \"BrtEndUserCsViews\"\n },\n 0x028F: {\n n: \"BrtBeginUserCsView\"\n },\n 0x0290: {\n n: \"BrtEndUserCsView\"\n },\n 0x0291: {\n n: \"BrtBeginPcdSFCIEntries\"\n },\n 0x0292: {\n n: \"BrtEndPCDSFCIEntries\"\n },\n 0x0293: {\n n: \"BrtPCDSFCIEntry\"\n },\n 0x0294: {\n n: \"BrtBeginListParts\"\n },\n 0x0295: {\n n: \"BrtListPart\"\n },\n 0x0296: {\n n: \"BrtEndListParts\"\n },\n 0x0297: {\n n: \"BrtSheetCalcProp\"\n },\n 0x0298: {\n n: \"BrtBeginFnGroup\"\n },\n 0x0299: {\n n: \"BrtFnGroup\"\n },\n 0x029A: {\n n: \"BrtEndFnGroup\"\n },\n 0x029B: {\n n: \"BrtSupAddin\"\n },\n 0x029C: {\n n: \"BrtSXTDMPOrder\"\n },\n 0x029D: {\n n: \"BrtCsProtection\"\n },\n 0x029F: {\n n: \"BrtBeginWsSortMap\"\n },\n 0x02A0: {\n n: \"BrtEndWsSortMap\"\n },\n 0x02A1: {\n n: \"BrtBeginRRSort\"\n },\n 0x02A2: {\n n: \"BrtEndRRSort\"\n },\n 0x02A3: {\n n: \"BrtRRSortItem\"\n },\n 0x02A4: {\n n: \"BrtFileSharingIso\"\n },\n 0x02A5: {\n n: \"BrtBookProtectionIso\"\n },\n 0x02A6: {\n n: \"BrtSheetProtectionIso\"\n },\n 0x02A7: {\n n: \"BrtCsProtectionIso\"\n },\n 0x02A8: {\n n: \"BrtRangeProtectionIso\"\n },\n 0x02A9: {\n n: \"BrtDValList\"\n },\n 0x0400: {\n n: \"BrtRwDescent\"\n },\n 0x0401: {\n n: \"BrtKnownFonts\"\n },\n 0x0402: {\n n: \"BrtBeginSXTupleSet\"\n },\n 0x0403: {\n n: \"BrtEndSXTupleSet\"\n },\n 0x0404: {\n n: \"BrtBeginSXTupleSetHeader\"\n },\n 0x0405: {\n n: \"BrtEndSXTupleSetHeader\"\n },\n 0x0406: {\n n: \"BrtSXTupleSetHeaderItem\"\n },\n 0x0407: {\n n: \"BrtBeginSXTupleSetData\"\n },\n 0x0408: {\n n: \"BrtEndSXTupleSetData\"\n },\n 0x0409: {\n n: \"BrtBeginSXTupleSetRow\"\n },\n 0x040A: {\n n: \"BrtEndSXTupleSetRow\"\n },\n 0x040B: {\n n: \"BrtSXTupleSetRowItem\"\n },\n 0x040C: {\n n: \"BrtNameExt\"\n },\n 0x040D: {\n n: \"BrtPCDH14\"\n },\n 0x040E: {\n n: \"BrtBeginPCDCalcMem14\"\n },\n 0x040F: {\n n: \"BrtEndPCDCalcMem14\"\n },\n 0x0410: {\n n: \"BrtSXTH14\"\n },\n 0x0411: {\n n: \"BrtBeginSparklineGroup\"\n },\n 0x0412: {\n n: \"BrtEndSparklineGroup\"\n },\n 0x0413: {\n n: \"BrtSparkline\"\n },\n 0x0414: {\n n: \"BrtSXDI14\"\n },\n 0x0415: {\n n: \"BrtWsFmtInfoEx14\"\n },\n 0x0416: {\n n: \"BrtBeginConditionalFormatting14\"\n },\n 0x0417: {\n n: \"BrtEndConditionalFormatting14\"\n },\n 0x0418: {\n n: \"BrtBeginCFRule14\"\n },\n 0x0419: {\n n: \"BrtEndCFRule14\"\n },\n 0x041A: {\n n: \"BrtCFVO14\"\n },\n 0x041B: {\n n: \"BrtBeginDatabar14\"\n },\n 0x041C: {\n n: \"BrtBeginIconSet14\"\n },\n 0x041D: {\n n: \"BrtDVal14\",\n f: parse_BrtDVal14\n },\n 0x041E: {\n n: \"BrtBeginDVals14\"\n },\n 0x041F: {\n n: \"BrtColor14\"\n },\n 0x0420: {\n n: \"BrtBeginSparklines\"\n },\n 0x0421: {\n n: \"BrtEndSparklines\"\n },\n 0x0422: {\n n: \"BrtBeginSparklineGroups\"\n },\n 0x0423: {\n n: \"BrtEndSparklineGroups\"\n },\n 0x0425: {\n n: \"BrtSXVD14\"\n },\n 0x0426: {\n n: \"BrtBeginSXView14\"\n },\n 0x0427: {\n n: \"BrtEndSXView14\"\n },\n 0x0428: {\n n: \"BrtBeginSXView16\"\n },\n 0x0429: {\n n: \"BrtEndSXView16\"\n },\n 0x042A: {\n n: \"BrtBeginPCD14\"\n },\n 0x042B: {\n n: \"BrtEndPCD14\"\n },\n 0x042C: {\n n: \"BrtBeginExtConn14\"\n },\n 0x042D: {\n n: \"BrtEndExtConn14\"\n },\n 0x042E: {\n n: \"BrtBeginSlicerCacheIDs\"\n },\n 0x042F: {\n n: \"BrtEndSlicerCacheIDs\"\n },\n 0x0430: {\n n: \"BrtBeginSlicerCacheID\"\n },\n 0x0431: {\n n: \"BrtEndSlicerCacheID\"\n },\n 0x0433: {\n n: \"BrtBeginSlicerCache\"\n },\n 0x0434: {\n n: \"BrtEndSlicerCache\"\n },\n 0x0435: {\n n: \"BrtBeginSlicerCacheDef\"\n },\n 0x0436: {\n n: \"BrtEndSlicerCacheDef\"\n },\n 0x0437: {\n n: \"BrtBeginSlicersEx\"\n },\n 0x0438: {\n n: \"BrtEndSlicersEx\"\n },\n 0x0439: {\n n: \"BrtBeginSlicerEx\"\n },\n 0x043A: {\n n: \"BrtEndSlicerEx\"\n },\n 0x043B: {\n n: \"BrtBeginSlicer\"\n },\n 0x043C: {\n n: \"BrtEndSlicer\"\n },\n 0x043D: {\n n: \"BrtSlicerCachePivotTables\"\n },\n 0x043E: {\n n: \"BrtBeginSlicerCacheOlapImpl\"\n },\n 0x043F: {\n n: \"BrtEndSlicerCacheOlapImpl\"\n },\n 0x0440: {\n n: \"BrtBeginSlicerCacheLevelsData\"\n },\n 0x0441: {\n n: \"BrtEndSlicerCacheLevelsData\"\n },\n 0x0442: {\n n: \"BrtBeginSlicerCacheLevelData\"\n },\n 0x0443: {\n n: \"BrtEndSlicerCacheLevelData\"\n },\n 0x0444: {\n n: \"BrtBeginSlicerCacheSiRanges\"\n },\n 0x0445: {\n n: \"BrtEndSlicerCacheSiRanges\"\n },\n 0x0446: {\n n: \"BrtBeginSlicerCacheSiRange\"\n },\n 0x0447: {\n n: \"BrtEndSlicerCacheSiRange\"\n },\n 0x0448: {\n n: \"BrtSlicerCacheOlapItem\"\n },\n 0x0449: {\n n: \"BrtBeginSlicerCacheSelections\"\n },\n 0x044A: {\n n: \"BrtSlicerCacheSelection\"\n },\n 0x044B: {\n n: \"BrtEndSlicerCacheSelections\"\n },\n 0x044C: {\n n: \"BrtBeginSlicerCacheNative\"\n },\n 0x044D: {\n n: \"BrtEndSlicerCacheNative\"\n },\n 0x044E: {\n n: \"BrtSlicerCacheNativeItem\"\n },\n 0x044F: {\n n: \"BrtRangeProtection14\"\n },\n 0x0450: {\n n: \"BrtRangeProtectionIso14\"\n },\n 0x0451: {\n n: \"BrtCellIgnoreEC14\"\n },\n 0x0457: {\n n: \"BrtList14\"\n },\n 0x0458: {\n n: \"BrtCFIcon\"\n },\n 0x0459: {\n n: \"BrtBeginSlicerCachesPivotCacheIDs\"\n },\n 0x045A: {\n n: \"BrtEndSlicerCachesPivotCacheIDs\"\n },\n 0x045B: {\n n: \"BrtBeginSlicers\"\n },\n 0x045C: {\n n: \"BrtEndSlicers\"\n },\n 0x045D: {\n n: \"BrtWbProp14\"\n },\n 0x045E: {\n n: \"BrtBeginSXEdit\"\n },\n 0x045F: {\n n: \"BrtEndSXEdit\"\n },\n 0x0460: {\n n: \"BrtBeginSXEdits\"\n },\n 0x0461: {\n n: \"BrtEndSXEdits\"\n },\n 0x0462: {\n n: \"BrtBeginSXChange\"\n },\n 0x0463: {\n n: \"BrtEndSXChange\"\n },\n 0x0464: {\n n: \"BrtBeginSXChanges\"\n },\n 0x0465: {\n n: \"BrtEndSXChanges\"\n },\n 0x0466: {\n n: \"BrtSXTupleItems\"\n },\n 0x0468: {\n n: \"BrtBeginSlicerStyle\"\n },\n 0x0469: {\n n: \"BrtEndSlicerStyle\"\n },\n 0x046A: {\n n: \"BrtSlicerStyleElement\"\n },\n 0x046B: {\n n: \"BrtBeginStyleSheetExt14\"\n },\n 0x046C: {\n n: \"BrtEndStyleSheetExt14\"\n },\n 0x046D: {\n n: \"BrtBeginSlicerCachesPivotCacheID\"\n },\n 0x046E: {\n n: \"BrtEndSlicerCachesPivotCacheID\"\n },\n 0x046F: {\n n: \"BrtBeginConditionalFormattings\"\n },\n 0x0470: {\n n: \"BrtEndConditionalFormattings\"\n },\n 0x0471: {\n n: \"BrtBeginPCDCalcMemExt\"\n },\n 0x0472: {\n n: \"BrtEndPCDCalcMemExt\"\n },\n 0x0473: {\n n: \"BrtBeginPCDCalcMemsExt\"\n },\n 0x0474: {\n n: \"BrtEndPCDCalcMemsExt\"\n },\n 0x0475: {\n n: \"BrtPCDField14\"\n },\n 0x0476: {\n n: \"BrtBeginSlicerStyles\"\n },\n 0x0477: {\n n: \"BrtEndSlicerStyles\"\n },\n 0x0478: {\n n: \"BrtBeginSlicerStyleElements\"\n },\n 0x0479: {\n n: \"BrtEndSlicerStyleElements\"\n },\n 0x047A: {\n n: \"BrtCFRuleExt\"\n },\n 0x047B: {\n n: \"BrtBeginSXCondFmt14\"\n },\n 0x047C: {\n n: \"BrtEndSXCondFmt14\"\n },\n 0x047D: {\n n: \"BrtBeginSXCondFmts14\"\n },\n 0x047E: {\n n: \"BrtEndSXCondFmts14\"\n },\n 0x0480: {\n n: \"BrtBeginSortCond14\"\n },\n 0x0481: {\n n: \"BrtEndSortCond14\"\n },\n 0x0482: {\n n: \"BrtEndDVals14\"\n },\n 0x0483: {\n n: \"BrtEndIconSet14\"\n },\n 0x0484: {\n n: \"BrtEndDatabar14\"\n },\n 0x0485: {\n n: \"BrtBeginColorScale14\"\n },\n 0x0486: {\n n: \"BrtEndColorScale14\"\n },\n 0x0487: {\n n: \"BrtBeginSxrules14\"\n },\n 0x0488: {\n n: \"BrtEndSxrules14\"\n },\n 0x0489: {\n n: \"BrtBeginPRule14\"\n },\n 0x048A: {\n n: \"BrtEndPRule14\"\n },\n 0x048B: {\n n: \"BrtBeginPRFilters14\"\n },\n 0x048C: {\n n: \"BrtEndPRFilters14\"\n },\n 0x048D: {\n n: \"BrtBeginPRFilter14\"\n },\n 0x048E: {\n n: \"BrtEndPRFilter14\"\n },\n 0x048F: {\n n: \"BrtBeginPRFItem14\"\n },\n 0x0490: {\n n: \"BrtEndPRFItem14\"\n },\n 0x0491: {\n n: \"BrtBeginCellIgnoreECs14\"\n },\n 0x0492: {\n n: \"BrtEndCellIgnoreECs14\"\n },\n 0x0493: {\n n: \"BrtDxf14\"\n },\n 0x0494: {\n n: \"BrtBeginDxF14s\"\n },\n 0x0495: {\n n: \"BrtEndDxf14s\"\n },\n 0x0499: {\n n: \"BrtFilter14\"\n },\n 0x049A: {\n n: \"BrtBeginCustomFilters14\"\n },\n 0x049C: {\n n: \"BrtCustomFilter14\"\n },\n 0x049D: {\n n: \"BrtIconFilter14\"\n },\n 0x049E: {\n n: \"BrtPivotCacheConnectionName\"\n },\n 0x0800: {\n n: \"BrtBeginDecoupledPivotCacheIDs\"\n },\n 0x0801: {\n n: \"BrtEndDecoupledPivotCacheIDs\"\n },\n 0x0802: {\n n: \"BrtDecoupledPivotCacheID\"\n },\n 0x0803: {\n n: \"BrtBeginPivotTableRefs\"\n },\n 0x0804: {\n n: \"BrtEndPivotTableRefs\"\n },\n 0x0805: {\n n: \"BrtPivotTableRef\"\n },\n 0x0806: {\n n: \"BrtSlicerCacheBookPivotTables\"\n },\n 0x0807: {\n n: \"BrtBeginSxvcells\"\n },\n 0x0808: {\n n: \"BrtEndSxvcells\"\n },\n 0x0809: {\n n: \"BrtBeginSxRow\"\n },\n 0x080A: {\n n: \"BrtEndSxRow\"\n },\n 0x080C: {\n n: \"BrtPcdCalcMem15\"\n },\n 0x0813: {\n n: \"BrtQsi15\"\n },\n 0x0814: {\n n: \"BrtBeginWebExtensions\"\n },\n 0x0815: {\n n: \"BrtEndWebExtensions\"\n },\n 0x0816: {\n n: \"BrtWebExtension\"\n },\n 0x0817: {\n n: \"BrtAbsPath15\"\n },\n 0x0818: {\n n: \"BrtBeginPivotTableUISettings\"\n },\n 0x0819: {\n n: \"BrtEndPivotTableUISettings\"\n },\n 0x081B: {\n n: \"BrtTableSlicerCacheIDs\"\n },\n 0x081C: {\n n: \"BrtTableSlicerCacheID\"\n },\n 0x081D: {\n n: \"BrtBeginTableSlicerCache\"\n },\n 0x081E: {\n n: \"BrtEndTableSlicerCache\"\n },\n 0x081F: {\n n: \"BrtSxFilter15\"\n },\n 0x0820: {\n n: \"BrtBeginTimelineCachePivotCacheIDs\"\n },\n 0x0821: {\n n: \"BrtEndTimelineCachePivotCacheIDs\"\n },\n 0x0822: {\n n: \"BrtTimelineCachePivotCacheID\"\n },\n 0x0823: {\n n: \"BrtBeginTimelineCacheIDs\"\n },\n 0x0824: {\n n: \"BrtEndTimelineCacheIDs\"\n },\n 0x0825: {\n n: \"BrtBeginTimelineCacheID\"\n },\n 0x0826: {\n n: \"BrtEndTimelineCacheID\"\n },\n 0x0827: {\n n: \"BrtBeginTimelinesEx\"\n },\n 0x0828: {\n n: \"BrtEndTimelinesEx\"\n },\n 0x0829: {\n n: \"BrtBeginTimelineEx\"\n },\n 0x082A: {\n n: \"BrtEndTimelineEx\"\n },\n 0x082B: {\n n: \"BrtWorkBookPr15\"\n },\n 0x082C: {\n n: \"BrtPCDH15\"\n },\n 0x082D: {\n n: \"BrtBeginTimelineStyle\"\n },\n 0x082E: {\n n: \"BrtEndTimelineStyle\"\n },\n 0x082F: {\n n: \"BrtTimelineStyleElement\"\n },\n 0x0830: {\n n: \"BrtBeginTimelineStylesheetExt15\"\n },\n 0x0831: {\n n: \"BrtEndTimelineStylesheetExt15\"\n },\n 0x0832: {\n n: \"BrtBeginTimelineStyles\"\n },\n 0x0833: {\n n: \"BrtEndTimelineStyles\"\n },\n 0x0834: {\n n: \"BrtBeginTimelineStyleElements\"\n },\n 0x0835: {\n n: \"BrtEndTimelineStyleElements\"\n },\n 0x0836: {\n n: \"BrtDxf15\"\n },\n 0x0837: {\n n: \"BrtBeginDxfs15\"\n },\n 0x0838: {\n n: \"brtEndDxfs15\"\n },\n 0x0839: {\n n: \"BrtSlicerCacheHideItemsWithNoData\"\n },\n 0x083A: {\n n: \"BrtBeginItemUniqueNames\"\n },\n 0x083B: {\n n: \"BrtEndItemUniqueNames\"\n },\n 0x083C: {\n n: \"BrtItemUniqueName\"\n },\n 0x083D: {\n n: \"BrtBeginExtConn15\"\n },\n 0x083E: {\n n: \"BrtEndExtConn15\"\n },\n 0x083F: {\n n: \"BrtBeginOledbPr15\"\n },\n 0x0840: {\n n: \"BrtEndOledbPr15\"\n },\n 0x0841: {\n n: \"BrtBeginDataFeedPr15\"\n },\n 0x0842: {\n n: \"BrtEndDataFeedPr15\"\n },\n 0x0843: {\n n: \"BrtTextPr15\"\n },\n 0x0844: {\n n: \"BrtRangePr15\"\n },\n 0x0845: {\n n: \"BrtDbCommand15\"\n },\n 0x0846: {\n n: \"BrtBeginDbTables15\"\n },\n 0x0847: {\n n: \"BrtEndDbTables15\"\n },\n 0x0848: {\n n: \"BrtDbTable15\"\n },\n 0x0849: {\n n: \"BrtBeginDataModel\"\n },\n 0x084A: {\n n: \"BrtEndDataModel\"\n },\n 0x084B: {\n n: \"BrtBeginModelTables\"\n },\n 0x084C: {\n n: \"BrtEndModelTables\"\n },\n 0x084D: {\n n: \"BrtModelTable\"\n },\n 0x084E: {\n n: \"BrtBeginModelRelationships\"\n },\n 0x084F: {\n n: \"BrtEndModelRelationships\"\n },\n 0x0850: {\n n: \"BrtModelRelationship\"\n },\n 0x0851: {\n n: \"BrtBeginECTxtWiz15\"\n },\n 0x0852: {\n n: \"BrtEndECTxtWiz15\"\n },\n 0x0853: {\n n: \"BrtBeginECTWFldInfoLst15\"\n },\n 0x0854: {\n n: \"BrtEndECTWFldInfoLst15\"\n },\n 0x0855: {\n n: \"BrtBeginECTWFldInfo15\"\n },\n 0x0856: {\n n: \"BrtFieldListActiveItem\"\n },\n 0x0857: {\n n: \"BrtPivotCacheIdVersion\"\n },\n 0x0858: {\n n: \"BrtSXDI15\"\n },\n 0x0859: {\n n: \"BrtBeginModelTimeGroupings\"\n },\n 0x085A: {\n n: \"BrtEndModelTimeGroupings\"\n },\n 0x085B: {\n n: \"BrtBeginModelTimeGrouping\"\n },\n 0x085C: {\n n: \"BrtEndModelTimeGrouping\"\n },\n 0x085D: {\n n: \"BrtModelTimeGroupingCalcCol\"\n },\n 0x0C00: {\n n: \"BrtUid\"\n },\n 0x0C01: {\n n: \"BrtRevisionPtr\"\n },\n 0x13e7: {\n n: \"BrtBeginCalcFeatures\"\n },\n 0x13e8: {\n n: \"BrtEndCalcFeatures\"\n },\n 0x13e9: {\n n: \"BrtCalcFeature\"\n },\n 0xFFFF: {\n n: \"\"\n }\n };\n var XLSBRE = evert_key(XLSBRecordEnum, 'n');\n XLSBRE[\"BrtFRTArchID$\"] = 0x0010;\n /* [MS-XLS] 2.3 Record Enumeration */\n\n var XLSRecordEnum = {\n 0x0003: {\n n: \"BIFF2NUM\",\n f: parse_BIFF2NUM\n },\n 0x0004: {\n n: \"BIFF2STR\",\n f: parse_BIFF2STR\n },\n 0x0006: {\n n: \"Formula\",\n f: parse_Formula\n },\n 0x0009: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x000a: {\n n: 'EOF',\n f: parsenoop2\n },\n 0x000c: {\n n: \"CalcCount\",\n f: parseuint16\n },\n 0x000d: {\n n: \"CalcMode\",\n f: parseuint16\n },\n 0x000e: {\n n: \"CalcPrecision\",\n f: parsebool\n },\n 0x000f: {\n n: \"CalcRefMode\",\n f: parsebool\n },\n 0x0010: {\n n: \"CalcDelta\",\n f: parse_Xnum\n },\n 0x0011: {\n n: \"CalcIter\",\n f: parsebool\n },\n 0x0012: {\n n: \"Protect\",\n f: parsebool\n },\n 0x0013: {\n n: \"Password\",\n f: parseuint16\n },\n 0x0014: {\n n: \"Header\",\n f: parse_XLHeaderFooter\n },\n 0x0015: {\n n: \"Footer\",\n f: parse_XLHeaderFooter\n },\n 0x0017: {\n n: \"ExternSheet\",\n f: parse_ExternSheet\n },\n 0x0018: {\n n: \"Lbl\",\n f: parse_Lbl\n },\n 0x0019: {\n n: \"WinProtect\",\n f: parsebool\n },\n 0x001a: {\n n: \"VerticalPageBreaks\"\n },\n 0x001b: {\n n: \"HorizontalPageBreaks\"\n },\n 0x001c: {\n n: \"Note\",\n f: parse_Note\n },\n 0x001d: {\n n: \"Selection\"\n },\n 0x0022: {\n n: \"Date1904\",\n f: parsebool\n },\n 0x0023: {\n n: \"ExternName\",\n f: parse_ExternName\n },\n 0x0024: {\n n: \"COLWIDTH\"\n },\n 0x0026: {\n n: \"LeftMargin\",\n f: parse_Xnum\n },\n 0x0027: {\n n: \"RightMargin\",\n f: parse_Xnum\n },\n 0x0028: {\n n: \"TopMargin\",\n f: parse_Xnum\n },\n 0x0029: {\n n: \"BottomMargin\",\n f: parse_Xnum\n },\n 0x002a: {\n n: \"PrintRowCol\",\n f: parsebool\n },\n 0x002b: {\n n: \"PrintGrid\",\n f: parsebool\n },\n 0x002f: {\n n: \"FilePass\",\n f: parse_FilePass\n },\n 0x0031: {\n n: \"Font\",\n f: parse_Font\n },\n 0x0033: {\n n: \"PrintSize\",\n f: parseuint16\n },\n 0x003c: {\n n: \"Continue\"\n },\n 0x003d: {\n n: \"Window1\",\n f: parse_Window1\n },\n 0x0040: {\n n: \"Backup\",\n f: parsebool\n },\n 0x0041: {\n n: \"Pane\",\n f: parse_Pane\n },\n 0x0042: {\n n: 'CodePage',\n f: parseuint16\n },\n 0x004d: {\n n: \"Pls\"\n },\n 0x0050: {\n n: \"DCon\"\n },\n 0x0051: {\n n: \"DConRef\"\n },\n 0x0052: {\n n: \"DConName\"\n },\n 0x0055: {\n n: \"DefColWidth\",\n f: parseuint16\n },\n 0x0059: {\n n: \"XCT\"\n },\n 0x005a: {\n n: \"CRN\"\n },\n 0x005b: {\n n: \"FileSharing\"\n },\n 0x005c: {\n n: 'WriteAccess',\n f: parse_WriteAccess\n },\n 0x005d: {\n n: \"Obj\",\n f: parse_Obj\n },\n 0x005e: {\n n: \"Uncalced\"\n },\n 0x005f: {\n n: \"CalcSaveRecalc\",\n f: parsebool\n },\n 0x0060: {\n n: \"Template\"\n },\n 0x0061: {\n n: \"Intl\"\n },\n 0x0063: {\n n: \"ObjProtect\",\n f: parsebool\n },\n 0x007d: {\n n: \"ColInfo\",\n f: parse_ColInfo\n },\n 0x0080: {\n n: \"Guts\",\n f: parse_Guts\n },\n 0x0081: {\n n: \"WsBool\",\n f: parse_WsBool\n },\n 0x0082: {\n n: \"GridSet\",\n f: parseuint16\n },\n 0x0083: {\n n: \"HCenter\",\n f: parsebool\n },\n 0x0084: {\n n: \"VCenter\",\n f: parsebool\n },\n 0x0085: {\n n: 'BoundSheet8',\n f: parse_BoundSheet8\n },\n 0x0086: {\n n: \"WriteProtect\"\n },\n 0x008c: {\n n: \"Country\",\n f: parse_Country\n },\n 0x008d: {\n n: \"HideObj\",\n f: parseuint16\n },\n 0x0090: {\n n: \"Sort\"\n },\n 0x0092: {\n n: \"Palette\",\n f: parse_Palette\n },\n 0x0097: {\n n: \"Sync\"\n },\n 0x0098: {\n n: \"LPr\"\n },\n 0x0099: {\n n: \"DxGCol\"\n },\n 0x009a: {\n n: \"FnGroupName\"\n },\n 0x009b: {\n n: \"FilterMode\"\n },\n 0x009c: {\n n: \"BuiltInFnGroupCount\",\n f: parseuint16\n },\n 0x009d: {\n n: \"AutoFilterInfo\"\n },\n 0x009e: {\n n: \"AutoFilter\"\n },\n 0x00a0: {\n n: \"Scl\",\n f: parse_Scl\n },\n 0x00a1: {\n n: \"Setup\",\n f: parse_Setup\n },\n 0x00ae: {\n n: \"ScenMan\"\n },\n 0x00af: {\n n: \"SCENARIO\"\n },\n 0x00b0: {\n n: \"SxView\"\n },\n 0x00b1: {\n n: \"Sxvd\"\n },\n 0x00b2: {\n n: \"SXVI\"\n },\n 0x00b4: {\n n: \"SxIvd\"\n },\n 0x00b5: {\n n: \"SXLI\"\n },\n 0x00b6: {\n n: \"SXPI\"\n },\n 0x00b8: {\n n: \"DocRoute\"\n },\n 0x00b9: {\n n: \"RecipName\"\n },\n 0x00bd: {\n n: \"MulRk\",\n f: parse_MulRk\n },\n 0x00be: {\n n: \"MulBlank\",\n f: parse_MulBlank\n },\n 0x00c1: {\n n: 'Mms',\n f: parsenoop2\n },\n 0x00c5: {\n n: \"SXDI\"\n },\n 0x00c6: {\n n: \"SXDB\"\n },\n 0x00c7: {\n n: \"SXFDB\"\n },\n 0x00c8: {\n n: \"SXDBB\"\n },\n 0x00c9: {\n n: \"SXNum\"\n },\n 0x00ca: {\n n: \"SxBool\",\n f: parsebool\n },\n 0x00cb: {\n n: \"SxErr\"\n },\n 0x00cc: {\n n: \"SXInt\"\n },\n 0x00cd: {\n n: \"SXString\"\n },\n 0x00ce: {\n n: \"SXDtr\"\n },\n 0x00cf: {\n n: \"SxNil\"\n },\n 0x00d0: {\n n: \"SXTbl\"\n },\n 0x00d1: {\n n: \"SXTBRGIITM\"\n },\n 0x00d2: {\n n: \"SxTbpg\"\n },\n 0x00d3: {\n n: \"ObProj\"\n },\n 0x00d5: {\n n: \"SXStreamID\"\n },\n 0x00d7: {\n n: \"DBCell\"\n },\n 0x00d8: {\n n: \"SXRng\"\n },\n 0x00d9: {\n n: \"SxIsxoper\"\n },\n 0x00da: {\n n: \"BookBool\",\n f: parseuint16\n },\n 0x00dc: {\n n: \"DbOrParamQry\"\n },\n 0x00dd: {\n n: \"ScenarioProtect\",\n f: parsebool\n },\n 0x00de: {\n n: \"OleObjectSize\"\n },\n 0x00e0: {\n n: \"XF\",\n f: parse_XF\n },\n 0x00e1: {\n n: 'InterfaceHdr',\n f: parse_InterfaceHdr\n },\n 0x00e2: {\n n: 'InterfaceEnd',\n f: parsenoop2\n },\n 0x00e3: {\n n: \"SXVS\"\n },\n 0x00e5: {\n n: \"MergeCells\",\n f: parse_MergeCells\n },\n 0x00e9: {\n n: \"BkHim\"\n },\n 0x00eb: {\n n: \"MsoDrawingGroup\"\n },\n 0x00ec: {\n n: \"MsoDrawing\"\n },\n 0x00ed: {\n n: \"MsoDrawingSelection\"\n },\n 0x00ef: {\n n: \"PhoneticInfo\"\n },\n 0x00f0: {\n n: \"SxRule\"\n },\n 0x00f1: {\n n: \"SXEx\"\n },\n 0x00f2: {\n n: \"SxFilt\"\n },\n 0x00f4: {\n n: \"SxDXF\"\n },\n 0x00f5: {\n n: \"SxItm\"\n },\n 0x00f6: {\n n: \"SxName\"\n },\n 0x00f7: {\n n: \"SxSelect\"\n },\n 0x00f8: {\n n: \"SXPair\"\n },\n 0x00f9: {\n n: \"SxFmla\"\n },\n 0x00fb: {\n n: \"SxFormat\"\n },\n 0x00fc: {\n n: \"SST\",\n f: parse_SST\n },\n 0x00fd: {\n n: \"LabelSst\",\n f: parse_LabelSst\n },\n 0x00ff: {\n n: \"ExtSST\",\n f: parse_ExtSST\n },\n 0x0100: {\n n: \"SXVDEx\"\n },\n 0x0103: {\n n: \"SXFormula\"\n },\n 0x0122: {\n n: \"SXDBEx\"\n },\n 0x0137: {\n n: \"RRDInsDel\"\n },\n 0x0138: {\n n: \"RRDHead\"\n },\n 0x013b: {\n n: \"RRDChgCell\"\n },\n 0x013d: {\n n: \"RRTabId\",\n f: parseuint16a\n },\n 0x013e: {\n n: \"RRDRenSheet\"\n },\n 0x013f: {\n n: \"RRSort\"\n },\n 0x0140: {\n n: \"RRDMove\"\n },\n 0x014a: {\n n: \"RRFormat\"\n },\n 0x014b: {\n n: \"RRAutoFmt\"\n },\n 0x014d: {\n n: \"RRInsertSh\"\n },\n 0x014e: {\n n: \"RRDMoveBegin\"\n },\n 0x014f: {\n n: \"RRDMoveEnd\"\n },\n 0x0150: {\n n: \"RRDInsDelBegin\"\n },\n 0x0151: {\n n: \"RRDInsDelEnd\"\n },\n 0x0152: {\n n: \"RRDConflict\"\n },\n 0x0153: {\n n: \"RRDDefName\"\n },\n 0x0154: {\n n: \"RRDRstEtxp\"\n },\n 0x015f: {\n n: \"LRng\"\n },\n 0x0160: {\n n: \"UsesELFs\",\n f: parsebool\n },\n 0x0161: {\n n: \"DSF\",\n f: parsenoop2\n },\n 0x0191: {\n n: \"CUsr\"\n },\n 0x0192: {\n n: \"CbUsr\"\n },\n 0x0193: {\n n: \"UsrInfo\"\n },\n 0x0194: {\n n: \"UsrExcl\"\n },\n 0x0195: {\n n: \"FileLock\"\n },\n 0x0196: {\n n: \"RRDInfo\"\n },\n 0x0197: {\n n: \"BCUsrs\"\n },\n 0x0198: {\n n: \"UsrChk\"\n },\n 0x01a9: {\n n: \"UserBView\"\n },\n 0x01aa: {\n n: \"UserSViewBegin\"\n },\n 0x01ab: {\n n: \"UserSViewEnd\"\n },\n 0x01ac: {\n n: \"RRDUserView\"\n },\n 0x01ad: {\n n: \"Qsi\"\n },\n 0x01ae: {\n n: \"SupBook\",\n f: parse_SupBook\n },\n 0x01af: {\n n: \"Prot4Rev\",\n f: parsebool\n },\n 0x01b0: {\n n: \"CondFmt\"\n },\n 0x01b1: {\n n: \"CF\"\n },\n 0x01b2: {\n n: \"DVal\"\n },\n 0x01b5: {\n n: \"DConBin\"\n },\n 0x01b6: {\n n: \"TxO\",\n f: parse_TxO\n },\n 0x01b7: {\n n: \"RefreshAll\",\n f: parsebool\n },\n 0x01b8: {\n n: \"HLink\",\n f: parse_HLink\n },\n 0x01b9: {\n n: \"Lel\"\n },\n 0x01ba: {\n n: \"CodeName\",\n f: parse_XLUnicodeString\n },\n 0x01bb: {\n n: \"SXFDBType\"\n },\n 0x01bc: {\n n: \"Prot4RevPass\",\n f: parseuint16\n },\n 0x01bd: {\n n: \"ObNoMacros\"\n },\n 0x01be: {\n n: \"Dv\"\n },\n 0x01c0: {\n n: \"Excel9File\",\n f: parsenoop2\n },\n 0x01c1: {\n n: \"RecalcId\",\n f: parse_RecalcId,\n r: 2\n },\n 0x01c2: {\n n: \"EntExU2\",\n f: parsenoop2\n },\n 0x0200: {\n n: \"Dimensions\",\n f: parse_Dimensions\n },\n 0x0201: {\n n: \"Blank\",\n f: parse_Blank\n },\n 0x0203: {\n n: \"Number\",\n f: parse_Number\n },\n 0x0204: {\n n: \"Label\",\n f: parse_Label\n },\n 0x0205: {\n n: \"BoolErr\",\n f: parse_BoolErr\n },\n 0x0206: {\n n: \"Formula\",\n f: parse_Formula\n },\n 0x0207: {\n n: \"String\",\n f: parse_String\n },\n 0x0208: {\n n: 'Row',\n f: parse_Row\n },\n 0x020b: {\n n: \"Index\"\n },\n 0x0221: {\n n: \"Array\",\n f: parse_Array\n },\n 0x0225: {\n n: \"DefaultRowHeight\",\n f: parse_DefaultRowHeight\n },\n 0x0236: {\n n: \"Table\"\n },\n 0x023e: {\n n: \"Window2\",\n f: parse_Window2\n },\n 0x027e: {\n n: \"RK\",\n f: parse_RK\n },\n 0x0293: {\n n: \"Style\"\n },\n 0x0406: {\n n: \"Formula\",\n f: parse_Formula\n },\n 0x0418: {\n n: \"BigName\"\n },\n 0x041e: {\n n: \"Format\",\n f: parse_Format\n },\n 0x043c: {\n n: \"ContinueBigName\"\n },\n 0x04bc: {\n n: \"ShrFmla\",\n f: parse_ShrFmla\n },\n 0x0800: {\n n: \"HLinkTooltip\",\n f: parse_HLinkTooltip\n },\n 0x0801: {\n n: \"WebPub\"\n },\n 0x0802: {\n n: \"QsiSXTag\"\n },\n 0x0803: {\n n: \"DBQueryExt\"\n },\n 0x0804: {\n n: \"ExtString\"\n },\n 0x0805: {\n n: \"TxtQry\"\n },\n 0x0806: {\n n: \"Qsir\"\n },\n 0x0807: {\n n: \"Qsif\"\n },\n 0x0808: {\n n: \"RRDTQSIF\"\n },\n 0x0809: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x080a: {\n n: \"OleDbConn\"\n },\n 0x080b: {\n n: \"WOpt\"\n },\n 0x080c: {\n n: \"SXViewEx\"\n },\n 0x080d: {\n n: \"SXTH\"\n },\n 0x080e: {\n n: \"SXPIEx\"\n },\n 0x080f: {\n n: \"SXVDTEx\"\n },\n 0x0810: {\n n: \"SXViewEx9\"\n },\n 0x0812: {\n n: \"ContinueFrt\"\n },\n 0x0813: {\n n: \"RealTimeData\"\n },\n 0x0850: {\n n: \"ChartFrtInfo\"\n },\n 0x0851: {\n n: \"FrtWrapper\"\n },\n 0x0852: {\n n: \"StartBlock\"\n },\n 0x0853: {\n n: \"EndBlock\"\n },\n 0x0854: {\n n: \"StartObject\"\n },\n 0x0855: {\n n: \"EndObject\"\n },\n 0x0856: {\n n: \"CatLab\"\n },\n 0x0857: {\n n: \"YMult\"\n },\n 0x0858: {\n n: \"SXViewLink\"\n },\n 0x0859: {\n n: \"PivotChartBits\"\n },\n 0x085a: {\n n: \"FrtFontList\"\n },\n 0x0862: {\n n: \"SheetExt\"\n },\n 0x0863: {\n n: \"BookExt\",\n r: 12\n },\n 0x0864: {\n n: \"SXAddl\"\n },\n 0x0865: {\n n: \"CrErr\"\n },\n 0x0866: {\n n: \"HFPicture\"\n },\n 0x0867: {\n n: 'FeatHdr',\n f: parsenoop2\n },\n 0x0868: {\n n: \"Feat\"\n },\n 0x086a: {\n n: \"DataLabExt\"\n },\n 0x086b: {\n n: \"DataLabExtContents\"\n },\n 0x086c: {\n n: \"CellWatch\"\n },\n 0x0871: {\n n: \"FeatHdr11\"\n },\n 0x0872: {\n n: \"Feature11\"\n },\n 0x0874: {\n n: \"DropDownObjIds\"\n },\n 0x0875: {\n n: \"ContinueFrt11\"\n },\n 0x0876: {\n n: \"DConn\"\n },\n 0x0877: {\n n: \"List12\"\n },\n 0x0878: {\n n: \"Feature12\"\n },\n 0x0879: {\n n: \"CondFmt12\"\n },\n 0x087a: {\n n: \"CF12\"\n },\n 0x087b: {\n n: \"CFEx\"\n },\n 0x087c: {\n n: \"XFCRC\",\n f: parse_XFCRC,\n r: 12\n },\n 0x087d: {\n n: \"XFExt\",\n f: parse_XFExt,\n r: 12\n },\n 0x087e: {\n n: \"AutoFilter12\"\n },\n 0x087f: {\n n: \"ContinueFrt12\"\n },\n 0x0884: {\n n: \"MDTInfo\"\n },\n 0x0885: {\n n: \"MDXStr\"\n },\n 0x0886: {\n n: \"MDXTuple\"\n },\n 0x0887: {\n n: \"MDXSet\"\n },\n 0x0888: {\n n: \"MDXProp\"\n },\n 0x0889: {\n n: \"MDXKPI\"\n },\n 0x088a: {\n n: \"MDB\"\n },\n 0x088b: {\n n: \"PLV\"\n },\n 0x088c: {\n n: \"Compat12\",\n f: parsebool,\n r: 12\n },\n 0x088d: {\n n: \"DXF\"\n },\n 0x088e: {\n n: \"TableStyles\",\n r: 12\n },\n 0x088f: {\n n: \"TableStyle\"\n },\n 0x0890: {\n n: \"TableStyleElement\"\n },\n 0x0892: {\n n: \"StyleExt\"\n },\n 0x0893: {\n n: \"NamePublish\"\n },\n 0x0894: {\n n: \"NameCmt\",\n f: parse_NameCmt,\n r: 12\n },\n 0x0895: {\n n: \"SortData\"\n },\n 0x0896: {\n n: \"Theme\",\n f: parse_Theme,\n r: 12\n },\n 0x0897: {\n n: \"GUIDTypeLib\"\n },\n 0x0898: {\n n: \"FnGrp12\"\n },\n 0x0899: {\n n: \"NameFnGrp12\"\n },\n 0x089a: {\n n: \"MTRSettings\",\n f: parse_MTRSettings,\n r: 12\n },\n 0x089b: {\n n: \"CompressPictures\",\n f: parsenoop2\n },\n 0x089c: {\n n: \"HeaderFooter\"\n },\n 0x089d: {\n n: \"CrtLayout12\"\n },\n 0x089e: {\n n: \"CrtMlFrt\"\n },\n 0x089f: {\n n: \"CrtMlFrtContinue\"\n },\n 0x08a3: {\n n: \"ForceFullCalculation\",\n f: parse_ForceFullCalculation\n },\n 0x08a4: {\n n: \"ShapePropsStream\"\n },\n 0x08a5: {\n n: \"TextPropsStream\"\n },\n 0x08a6: {\n n: \"RichTextStream\"\n },\n 0x08a7: {\n n: \"CrtLayout12A\"\n },\n 0x1001: {\n n: \"Units\"\n },\n 0x1002: {\n n: \"Chart\"\n },\n 0x1003: {\n n: \"Series\"\n },\n 0x1006: {\n n: \"DataFormat\"\n },\n 0x1007: {\n n: \"LineFormat\"\n },\n 0x1009: {\n n: \"MarkerFormat\"\n },\n 0x100a: {\n n: \"AreaFormat\"\n },\n 0x100b: {\n n: \"PieFormat\"\n },\n 0x100c: {\n n: \"AttachedLabel\"\n },\n 0x100d: {\n n: \"SeriesText\"\n },\n 0x1014: {\n n: \"ChartFormat\"\n },\n 0x1015: {\n n: \"Legend\"\n },\n 0x1016: {\n n: \"SeriesList\"\n },\n 0x1017: {\n n: \"Bar\"\n },\n 0x1018: {\n n: \"Line\"\n },\n 0x1019: {\n n: \"Pie\"\n },\n 0x101a: {\n n: \"Area\"\n },\n 0x101b: {\n n: \"Scatter\"\n },\n 0x101c: {\n n: \"CrtLine\"\n },\n 0x101d: {\n n: \"Axis\"\n },\n 0x101e: {\n n: \"Tick\"\n },\n 0x101f: {\n n: \"ValueRange\"\n },\n 0x1020: {\n n: \"CatSerRange\"\n },\n 0x1021: {\n n: \"AxisLine\"\n },\n 0x1022: {\n n: \"CrtLink\"\n },\n 0x1024: {\n n: \"DefaultText\"\n },\n 0x1025: {\n n: \"Text\"\n },\n 0x1026: {\n n: \"FontX\",\n f: parseuint16\n },\n 0x1027: {\n n: \"ObjectLink\"\n },\n 0x1032: {\n n: \"Frame\"\n },\n 0x1033: {\n n: \"Begin\"\n },\n 0x1034: {\n n: \"End\"\n },\n 0x1035: {\n n: \"PlotArea\"\n },\n 0x103a: {\n n: \"Chart3d\"\n },\n 0x103c: {\n n: \"PicF\"\n },\n 0x103d: {\n n: \"DropBar\"\n },\n 0x103e: {\n n: \"Radar\"\n },\n 0x103f: {\n n: \"Surf\"\n },\n 0x1040: {\n n: \"RadarArea\"\n },\n 0x1041: {\n n: \"AxisParent\"\n },\n 0x1043: {\n n: \"LegendException\"\n },\n 0x1044: {\n n: \"ShtProps\",\n f: parse_ShtProps\n },\n 0x1045: {\n n: \"SerToCrt\"\n },\n 0x1046: {\n n: \"AxesUsed\"\n },\n 0x1048: {\n n: \"SBaseRef\"\n },\n 0x104a: {\n n: \"SerParent\"\n },\n 0x104b: {\n n: \"SerAuxTrend\"\n },\n 0x104e: {\n n: \"IFmtRecord\"\n },\n 0x104f: {\n n: \"Pos\"\n },\n 0x1050: {\n n: \"AlRuns\"\n },\n 0x1051: {\n n: \"BRAI\"\n },\n 0x105b: {\n n: \"SerAuxErrBar\"\n },\n 0x105c: {\n n: \"ClrtClient\",\n f: parse_ClrtClient\n },\n 0x105d: {\n n: \"SerFmt\"\n },\n 0x105f: {\n n: \"Chart3DBarShape\"\n },\n 0x1060: {\n n: \"Fbi\"\n },\n 0x1061: {\n n: \"BopPop\"\n },\n 0x1062: {\n n: \"AxcExt\"\n },\n 0x1063: {\n n: \"Dat\"\n },\n 0x1064: {\n n: \"PlotGrowth\"\n },\n 0x1065: {\n n: \"SIIndex\"\n },\n 0x1066: {\n n: \"GelFrame\"\n },\n 0x1067: {\n n: \"BopPopCustom\"\n },\n 0x1068: {\n n: \"Fbi2\"\n },\n 0x0000: {\n n: \"Dimensions\",\n f: parse_Dimensions\n },\n 0x0002: {\n n: \"BIFF2INT\",\n f: parse_BIFF2INT\n },\n 0x0005: {\n n: \"BoolErr\",\n f: parse_BoolErr\n },\n 0x0007: {\n n: \"String\",\n f: parse_BIFF2STRING\n },\n 0x0008: {\n n: \"BIFF2ROW\"\n },\n 0x000b: {\n n: \"Index\"\n },\n 0x0016: {\n n: \"ExternCount\",\n f: parseuint16\n },\n 0x001e: {\n n: \"BIFF2FORMAT\",\n f: parse_BIFF2Format\n },\n 0x001f: {\n n: \"BIFF2FMTCNT\"\n },\n\n /* 16-bit cnt of BIFF2FORMAT records */\n 0x0020: {\n n: \"BIFF2COLINFO\"\n },\n 0x0021: {\n n: \"Array\",\n f: parse_Array\n },\n 0x0025: {\n n: \"DefaultRowHeight\",\n f: parse_DefaultRowHeight\n },\n 0x0032: {\n n: \"BIFF2FONTXTRA\",\n f: parse_BIFF2FONTXTRA\n },\n 0x0034: {\n n: \"DDEObjName\"\n },\n 0x003e: {\n n: \"BIFF2WINDOW2\"\n },\n 0x0043: {\n n: \"BIFF2XF\"\n },\n 0x0044: {\n n: \"BIFF2XFINDEX\",\n f: parseuint16\n },\n 0x0045: {\n n: \"BIFF2FONTCLR\"\n },\n 0x0056: {\n n: \"BIFF4FMTCNT\"\n },\n\n /* 16-bit cnt, similar to BIFF2 */\n 0x007e: {\n n: \"RK\"\n },\n\n /* Not necessarily same as 0x027e */\n 0x007f: {\n n: \"ImData\",\n f: parse_ImData\n },\n 0x0087: {\n n: \"Addin\"\n },\n 0x0088: {\n n: \"Edg\"\n },\n 0x0089: {\n n: \"Pub\"\n },\n 0x0091: {\n n: \"Sub\"\n },\n 0x0094: {\n n: \"LHRecord\"\n },\n 0x0095: {\n n: \"LHNGraph\"\n },\n 0x0096: {\n n: \"Sound\"\n },\n 0x00a9: {\n n: \"CoordList\"\n },\n 0x00ab: {\n n: \"GCW\"\n },\n 0x00bc: {\n n: \"ShrFmla\"\n },\n\n /* Not necessarily same as 0x04bc */\n 0x00bf: {\n n: \"ToolbarHdr\"\n },\n 0x00c0: {\n n: \"ToolbarEnd\"\n },\n 0x00c2: {\n n: \"AddMenu\"\n },\n 0x00c3: {\n n: \"DelMenu\"\n },\n 0x00d6: {\n n: \"RString\",\n f: parse_RString\n },\n 0x00df: {\n n: \"UDDesc\"\n },\n 0x00ea: {\n n: \"TabIdConf\"\n },\n 0x0162: {\n n: \"XL5Modify\"\n },\n 0x01a5: {\n n: \"FileSharing2\"\n },\n 0x0209: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x0218: {\n n: \"Lbl\",\n f: parse_Lbl\n },\n 0x0223: {\n n: \"ExternName\",\n f: parse_ExternName\n },\n 0x0231: {\n n: \"Font\"\n },\n 0x0243: {\n n: \"BIFF3XF\"\n },\n 0x0409: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x0443: {\n n: \"BIFF4XF\"\n },\n 0x086d: {\n n: \"FeatInfo\"\n },\n 0x0873: {\n n: \"FeatInfo11\"\n },\n 0x0881: {\n n: \"SXAddl12\"\n },\n 0x08c0: {\n n: \"AutoWebPub\"\n },\n 0x08c1: {\n n: \"ListObj\"\n },\n 0x08c2: {\n n: \"ListField\"\n },\n 0x08c3: {\n n: \"ListDV\"\n },\n 0x08c4: {\n n: \"ListCondFmt\"\n },\n 0x08c5: {\n n: \"ListCF\"\n },\n 0x08c6: {\n n: \"FMQry\"\n },\n 0x08c7: {\n n: \"FMSQry\"\n },\n 0x08c8: {\n n: \"PLV\"\n },\n 0x08c9: {\n n: \"LnExt\"\n },\n 0x08ca: {\n n: \"MkrExt\"\n },\n 0x08cb: {\n n: \"CrtCoopt\"\n },\n 0x08d6: {\n n: \"FRTArchId$\",\n r: 12\n },\n 0x7262: {}\n };\n var XLSRE = evert_key(XLSRecordEnum, 'n');\n\n function write_biff_rec(ba, type, payload, length) {\n var t = +type || +XLSRE[type];\n if (isNaN(t)) return;\n var len = length || (payload || []).length || 0;\n var o = ba.next(4);\n o.write_shift(2, t);\n o.write_shift(2, len);\n if (len > 0 && is_buf(payload)) ba.push(payload);\n }\n\n function write_biff_continue(ba, type, payload, length) {\n var len = length || (payload || []).length || 0;\n if (len <= 8224) return write_biff_rec(ba, type, payload, len);\n var t = +type || +XLSRE[type];\n if (isNaN(t)) return;\n var parts = payload.parts || [],\n sidx = 0;\n var i = 0,\n w = 0;\n\n while (w + (parts[sidx] || 8224) <= 8224) {\n w += parts[sidx] || 8224;\n sidx++;\n }\n\n var o = ba.next(4);\n o.write_shift(2, t);\n o.write_shift(2, w);\n ba.push(payload.slice(i, i + w));\n i += w;\n\n while (i < len) {\n o = ba.next(4);\n o.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\n w = 0;\n\n while (w + (parts[sidx] || 8224) <= 8224) {\n w += parts[sidx] || 8224;\n sidx++;\n }\n\n o.write_shift(2, w);\n ba.push(payload.slice(i, i + w));\n i += w;\n }\n }\n\n function write_BIFF2Cell(out, r, c) {\n if (!out) out = new_buf(7);\n out.write_shift(2, r);\n out.write_shift(2, c);\n out.write_shift(2, 0);\n out.write_shift(1, 0);\n return out;\n }\n\n function write_BIFF2BERR(r, c, val, t) {\n var out = new_buf(9);\n write_BIFF2Cell(out, r, c);\n write_Bes(val, t || 'b', out);\n return out;\n }\n /* TODO: codepage, large strings */\n\n\n function write_BIFF2LABEL(r, c, val) {\n var out = new_buf(8 + 2 * val.length);\n write_BIFF2Cell(out, r, c);\n out.write_shift(1, val.length);\n out.write_shift(val.length, val, 'sbcs');\n return out.l < out.length ? out.slice(0, out.l) : out;\n }\n\n function write_ws_biff2_cell(ba, cell, R, C) {\n if (cell.v != null) switch (cell.t) {\n case 'd':\n case 'n':\n var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n if (v == (v | 0) && v >= 0 && v < 65536) write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));else write_biff_rec(ba, 0x0003, write_BIFF2NUM(R, C, v));\n return;\n\n case 'b':\n case 'e':\n write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t));\n return;\n\n /* TODO: codepage, sst */\n\n case 's':\n case 'str':\n write_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v || \"\").slice(0, 255)));\n return;\n }\n write_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n }\n\n function write_ws_biff2(ba, ws, idx, opts) {\n var dense = Array.isArray(ws);\n var range = safe_decode_range(ws['!ref'] || \"A1\"),\n ref,\n rr = \"\",\n cols = [];\n\n if (range.e.c > 0xFF || range.e.r > 0x3FFF) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n range.e.c = Math.min(range.e.c, 0xFF);\n range.e.r = Math.min(range.e.c, 0x3FFF);\n ref = encode_range(range);\n }\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell) continue;\n /* write cell */\n\n write_ws_biff2_cell(ba, cell, R, C, opts);\n }\n }\n }\n /* Based on test files */\n\n\n function write_biff2_buf(wb, opts) {\n var o = opts || {};\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var ba = buf_array();\n var idx = 0;\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n if (wb.SheetNames[i] == o.sheet) idx = i;\n }\n\n if (idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error(\"Sheet not found: \" + o.sheet);\n write_biff_rec(ba, o.biff == 4 ? 0x0409 : o.biff == 3 ? 0x0209 : 0x0009, write_BOF(wb, 0x10, o));\n /* ... */\n\n write_ws_biff2(ba, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n /* ... */\n\n write_biff_rec(ba, 0x000A);\n return ba.end();\n }\n\n function write_FONTS_biff8(ba, data, opts) {\n write_biff_rec(ba, \"Font\", write_Font({\n sz: 12,\n color: {\n theme: 1\n },\n name: \"Arial\",\n family: 2,\n scheme: \"minor\"\n }, opts));\n }\n\n function write_FMTS_biff8(ba, NF, opts) {\n if (!NF) return;\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) write_biff_rec(ba, \"Format\", write_Format(i, NF[i], opts));\n }\n });\n }\n\n function write_FEAT(ba, ws) {\n /* [MS-XLS] 2.4.112 */\n var o = new_buf(19);\n o.write_shift(4, 0x867);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 3);\n o.write_shift(1, 1);\n o.write_shift(4, 0);\n write_biff_rec(ba, \"FeatHdr\", o);\n /* [MS-XLS] 2.4.111 */\n\n o = new_buf(39);\n o.write_shift(4, 0x868);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 3);\n o.write_shift(1, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 1);\n o.write_shift(4, 4);\n o.write_shift(2, 0);\n write_Ref8U(safe_decode_range(ws['!ref'] || \"A1\"), o);\n o.write_shift(4, 4);\n write_biff_rec(ba, \"Feat\", o);\n }\n\n function write_CELLXFS_biff8(ba, opts) {\n for (var i = 0; i < 16; ++i) {\n write_biff_rec(ba, \"XF\", write_XF({\n numFmtId: 0,\n style: true\n }, 0, opts));\n }\n\n opts.cellXfs.forEach(function (c) {\n write_biff_rec(ba, \"XF\", write_XF(c, 0, opts));\n });\n }\n\n function write_ws_biff8_hlinks(ba, ws) {\n for (var R = 0; R < ws['!links'].length; ++R) {\n var HL = ws['!links'][R];\n write_biff_rec(ba, \"HLink\", write_HLink(HL));\n if (HL[1].Tooltip) write_biff_rec(ba, \"HLinkTooltip\", write_HLinkTooltip(HL));\n }\n\n delete ws['!links'];\n }\n\n function write_ws_cols_biff8(ba, cols, ws) {\n if (!cols) return;\n var cnt = 0;\n cols.forEach(function (col, idx) {\n if (++cnt <= 256 && col) {\n write_biff_rec(ba, \"ColInfo\", write_ColInfo(col_obj_w(idx, col), idx));\n }\n });\n }\n\n function write_ws_biff8_cell(ba, cell, R, C, opts) {\n var os = 16 + get_cell_style(opts.cellXfs, cell, opts);\n\n if (cell.v == null && !cell.bf) {\n write_biff_rec(ba, \"Blank\", write_XLSCell(R, C, os));\n return;\n }\n\n if (cell.bf) write_biff_rec(ba, \"Formula\", write_Formula(cell, R, C, opts, os));else switch (cell.t) {\n case 'd':\n case 'n':\n var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n /* TODO: emit RK as appropriate */\n\n write_biff_rec(ba, \"Number\", write_Number(R, C, v, os, opts));\n break;\n\n case 'b':\n case 'e':\n write_biff_rec(ba, 0x0205, write_BoolErr(R, C, cell.v, os, opts, cell.t));\n break;\n\n /* TODO: codepage, sst */\n\n case 's':\n case 'str':\n if (opts.bookSST) {\n var isst = get_sst_id(opts.Strings, cell.v, opts.revStrings);\n write_biff_rec(ba, \"LabelSst\", write_LabelSst(R, C, isst, os, opts));\n } else write_biff_rec(ba, \"Label\", write_Label(R, C, (cell.v || \"\").slice(0, 255), os, opts));\n\n break;\n\n default:\n write_biff_rec(ba, \"Blank\", write_XLSCell(R, C, os));\n }\n }\n /* [MS-XLS] 2.1.7.20.5 */\n\n\n function write_ws_biff8(idx, opts, wb) {\n var ba = buf_array();\n var s = wb.SheetNames[idx],\n ws = wb.Sheets[s] || {};\n\n var _WB = (wb || {}).Workbook || {};\n\n var _sheet = (_WB.Sheets || [])[idx] || {};\n\n var dense = Array.isArray(ws);\n var b8 = opts.biff == 8;\n var ref,\n rr = \"\",\n cols = [];\n var range = safe_decode_range(ws['!ref'] || \"A1\");\n var MAX_ROWS = b8 ? 65536 : 16384;\n\n if (range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n range.e.c = Math.min(range.e.c, 0xFF);\n range.e.r = Math.min(range.e.c, MAX_ROWS - 1);\n }\n\n write_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n /* [Uncalced] Index */\n\n write_biff_rec(ba, \"CalcMode\", writeuint16(1));\n write_biff_rec(ba, \"CalcCount\", writeuint16(100));\n write_biff_rec(ba, \"CalcRefMode\", writebool(true));\n write_biff_rec(ba, \"CalcIter\", writebool(false));\n write_biff_rec(ba, \"CalcDelta\", write_Xnum(0.001));\n write_biff_rec(ba, \"CalcSaveRecalc\", writebool(true));\n write_biff_rec(ba, \"PrintRowCol\", writebool(false));\n write_biff_rec(ba, \"PrintGrid\", writebool(false));\n write_biff_rec(ba, \"GridSet\", writeuint16(1));\n write_biff_rec(ba, \"Guts\", write_Guts([0, 0]));\n /* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\n /* Header (string) */\n\n /* Footer (string) */\n\n write_biff_rec(ba, \"HCenter\", writebool(false));\n write_biff_rec(ba, \"VCenter\", writebool(false));\n /* ... */\n\n if (b8) write_ws_cols_biff8(ba, ws[\"!cols\"], ws);\n /* ... */\n\n write_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n /* ... */\n\n if (b8) ws['!links'] = [];\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell) continue;\n /* write cell */\n\n write_ws_biff8_cell(ba, cell, R, C, opts);\n if (b8 && cell.l) ws['!links'].push([ref, cell.l]);\n }\n }\n\n var cname = _sheet.CodeName || _sheet.name || s;\n /* ... */\n\n if (b8) write_biff_rec(ba, \"Window2\", write_Window2((_WB.Views || [])[0]));\n /* ... */\n\n if (b8 && (ws['!merges'] || []).length) write_biff_rec(ba, \"MergeCells\", write_MergeCells(ws['!merges']));\n /* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\n if (b8) write_ws_biff8_hlinks(ba, ws);\n /* [DVAL] */\n\n write_biff_rec(ba, \"CodeName\", write_XLUnicodeString(cname, opts));\n /* *WebPub *CellWatch [SheetExt] */\n\n if (b8) write_FEAT(ba, ws);\n /* *FEAT11 *RECORD12 */\n\n write_biff_rec(ba, \"EOF\");\n return ba.end();\n }\n /* [MS-XLS] 2.1.7.20.3 */\n\n\n function write_biff8_global(wb, bufs, opts) {\n var A = buf_array();\n\n var _WB = (wb || {}).Workbook || {};\n\n var _sheets = _WB.Sheets || [];\n\n var _wb = _WB.WBProps || {};\n\n var b8 = opts.biff == 8,\n b5 = opts.biff == 5;\n write_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n if (opts.bookType == \"xla\") write_biff_rec(A, \"Addin\");\n write_biff_rec(A, \"InterfaceHdr\", b8 ? writeuint16(0x04b0) : null);\n write_biff_rec(A, \"Mms\", writezeroes(2));\n if (b5) write_biff_rec(A, \"ToolbarHdr\");\n if (b5) write_biff_rec(A, \"ToolbarEnd\");\n write_biff_rec(A, \"InterfaceEnd\");\n write_biff_rec(A, \"WriteAccess\", write_WriteAccess(\"SheetJS\", opts));\n /* [FileSharing] */\n\n write_biff_rec(A, \"CodePage\", writeuint16(b8 ? 0x04b0 : 0x04E4));\n /* *2047 Lel */\n\n if (b8) write_biff_rec(A, \"DSF\", writeuint16(0));\n if (b8) write_biff_rec(A, \"Excel9File\");\n write_biff_rec(A, \"RRTabId\", write_RRTabId(wb.SheetNames.length));\n if (b8 && wb.vbaraw) write_biff_rec(A, \"ObProj\");\n /* [ObNoMacros] */\n\n if (b8 && wb.vbaraw) {\n var cname = _wb.CodeName || \"ThisWorkbook\";\n write_biff_rec(A, \"CodeName\", write_XLUnicodeString(cname, opts));\n }\n\n write_biff_rec(A, \"BuiltInFnGroupCount\", writeuint16(0x11));\n /* *FnGroupName *FnGrp12 */\n\n /* *Lbl */\n\n /* [OleObjectSize] */\n\n write_biff_rec(A, \"WinProtect\", writebool(false));\n write_biff_rec(A, \"Protect\", writebool(false));\n write_biff_rec(A, \"Password\", writeuint16(0));\n if (b8) write_biff_rec(A, \"Prot4Rev\", writebool(false));\n if (b8) write_biff_rec(A, \"Prot4RevPass\", writeuint16(0));\n write_biff_rec(A, \"Window1\", write_Window1(opts));\n write_biff_rec(A, \"Backup\", writebool(false));\n write_biff_rec(A, \"HideObj\", writeuint16(0));\n write_biff_rec(A, \"Date1904\", writebool(safe1904(wb) == \"true\"));\n write_biff_rec(A, \"CalcPrecision\", writebool(true));\n if (b8) write_biff_rec(A, \"RefreshAll\", writebool(false));\n write_biff_rec(A, \"BookBool\", writeuint16(0));\n /* ... */\n\n write_FONTS_biff8(A, wb, opts);\n write_FMTS_biff8(A, wb.SSF, opts);\n write_CELLXFS_biff8(A, opts);\n /* ... */\n\n if (b8) write_biff_rec(A, \"UsesELFs\", writebool(false));\n var a = A.end();\n var C = buf_array();\n /* METADATA [MTRSettings] [ForceFullCalculation] */\n\n if (b8) write_biff_rec(C, \"Country\", write_Country());\n /* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n /* BIFF8: [SST *Continue] ExtSST */\n\n if (b8 && opts.Strings) write_biff_continue(C, \"SST\", write_SST(opts.Strings, opts));\n /* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\n write_biff_rec(C, \"EOF\");\n var c = C.end();\n var B = buf_array();\n var blen = 0,\n j = 0;\n\n for (j = 0; j < wb.SheetNames.length; ++j) {\n blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n }\n\n var start = a.length + blen + c.length;\n\n for (j = 0; j < wb.SheetNames.length; ++j) {\n var _sheet = _sheets[j] || {};\n\n write_biff_rec(B, \"BoundSheet8\", write_BoundSheet8({\n pos: start,\n hs: _sheet.Hidden || 0,\n dt: 0,\n name: wb.SheetNames[j]\n }, opts));\n start += bufs[j].length;\n }\n /* 1*BoundSheet8 */\n\n\n var b = B.end();\n if (blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n var out = [];\n if (a.length) out.push(a);\n if (b.length) out.push(b);\n if (c.length) out.push(c);\n return __toBuffer([out]);\n }\n /* [MS-XLS] 2.1.7.20 Workbook Stream */\n\n\n function write_biff8_buf(wb, opts) {\n var o = opts || {};\n var bufs = [];\n\n if (wb && !wb.SSF) {\n wb.SSF = SSF.get_table();\n }\n\n if (wb && wb.SSF) {\n make_ssf(SSF);\n SSF.load_table(wb.SSF); // $FlowIgnore\n\n o.revssf = evert_num(wb.SSF);\n o.revssf[wb.SSF[65535]] = 0;\n o.ssf = wb.SSF;\n }\n\n o.Strings = [];\n o.Strings.Count = 0;\n o.Strings.Unique = 0;\n fix_write_opts(o);\n o.cellXfs = [];\n get_cell_style(o.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n if (!wb.Props) wb.Props = {};\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n bufs[bufs.length] = write_ws_biff8(i, o, wb);\n }\n\n bufs.unshift(write_biff8_global(wb, bufs, o));\n return __toBuffer([bufs]);\n }\n\n function write_biff_buf(wb, opts) {\n var o = opts || {};\n\n switch (o.biff || 2) {\n case 8:\n case 5:\n return write_biff8_buf(wb, opts);\n\n case 4:\n case 3:\n case 2:\n return write_biff2_buf(wb, opts);\n }\n\n throw new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n }\n /* note: browser DOM element cannot see mso- style attrs, must parse */\n\n\n var HTML_ = function () {\n function html_to_sheet(str, _opts) {\n var opts = _opts || {};\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var ws = opts.dense ? [] : {};\n str = str.replace(//g, \"\");\n var mtch = str.match(/\");\n var mtch2 = str.match(/<\\/table/i);\n var i = mtch.index,\n j = mtch2 && mtch2.index || str.length;\n var rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n var R = -1,\n C = 0,\n RS = 0,\n CS = 0;\n var range = {\n s: {\n r: 10000000,\n c: 10000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var merges = [];\n\n for (i = 0; i < rows.length; ++i) {\n var row = rows[i].trim();\n var hd = row.slice(0, 3).toLowerCase();\n\n if (hd == \"/i);\n\n for (j = 0; j < cells.length; ++j) {\n var cell = cells[j].trim();\n if (!cell.match(/\")) > -1) {\n m = m.slice(cc + 1);\n }\n\n for (var midx = 0; midx < merges.length; ++midx) {\n var _merge = merges[midx];\n\n if (_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) {\n C = _merge.e.c + 1;\n midx = -1;\n }\n }\n\n var tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n CS = tag.colspan ? +tag.colspan : 1;\n if ((RS = +tag.rowspan) > 1 || CS > 1) merges.push({\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + (RS || 1) - 1,\n c: C + CS - 1\n }\n });\n\n var _t = tag.t || tag[\"data-t\"] || \"\";\n /* TODO: generate stub cells */\n\n\n if (!m.length) {\n C += CS;\n continue;\n }\n\n m = htmldecode(m);\n if (range.s.r > R) range.s.r = R;\n if (range.e.r < R) range.e.r = R;\n if (range.s.c > C) range.s.c = C;\n if (range.e.c < C) range.e.c = C;\n if (!m.length) continue;\n var o = {\n t: 's',\n v: m\n };\n\n if (opts.raw || !m.trim().length || _t == 's') {} else if (m === 'TRUE') o = {\n t: 'b',\n v: true\n };else if (m === 'FALSE') o = {\n t: 'b',\n v: false\n };else if (!isNaN(fuzzynum(m))) o = {\n t: 'n',\n v: fuzzynum(m)\n };else if (!isNaN(fuzzydate(m).getDate())) {\n o = {\n t: 'd',\n v: parseDate(m)\n };\n if (!opts.cellDates) o = {\n t: 'n',\n v: datenum(o.v)\n };\n o.z = opts.dateNF || SSF._table[14];\n }\n\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = o;\n } else ws[encode_cell({\n r: R,\n c: C\n })] = o;\n\n C += CS;\n }\n }\n\n ws['!ref'] = encode_range(range);\n if (merges.length) ws[\"!merges\"] = merges;\n return ws;\n }\n\n function html_to_book(str, opts) {\n return sheet_to_workbook(html_to_sheet(str, opts), opts);\n }\n\n function make_html_row(ws, r, R, o) {\n var M = ws['!merges'] || [];\n var oo = [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var RS = 0,\n CS = 0;\n\n for (var j = 0; j < M.length; ++j) {\n if (M[j].s.r > R || M[j].s.c > C) continue;\n if (M[j].e.r < R || M[j].e.c < C) continue;\n\n if (M[j].s.r < R || M[j].s.c < C) {\n RS = -1;\n break;\n }\n\n RS = M[j].e.r - M[j].s.r + 1;\n CS = M[j].e.c - M[j].s.c + 1;\n break;\n }\n\n if (RS < 0) continue;\n var coord = encode_cell({\n r: R,\n c: C\n });\n var cell = o.dense ? (ws[R] || [])[C] : ws[coord];\n /* TODO: html entities */\n\n var w = cell && cell.v != null && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n var sp = {};\n if (RS > 1) sp.rowspan = RS;\n if (CS > 1) sp.colspan = CS;\n if (o.editable) w = '' + w + '';else if (cell) {\n sp[\"data-t\"] = cell && cell.t || 'z';\n if (cell.v != null) sp[\"data-v\"] = cell.v;\n if (cell.z != null) sp[\"data-z\"] = cell.z;\n if (cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n }\n sp.id = (o.id || \"sjs\") + \"-\" + coord;\n oo.push(writextag('td', w, sp));\n }\n\n var preamble = \"\";\n return preamble + oo.join(\"\") + \"\";\n }\n\n function make_html_preamble(ws, R, o) {\n var out = [];\n return out.join(\"\") + '';\n }\n\n var _BEGIN = 'SheetJS Table Export';\n var _END = '';\n\n function sheet_to_html(ws, opts\n /*, wb:?Workbook*/\n ) {\n var o = opts || {};\n var header = o.header != null ? o.header : _BEGIN;\n var footer = o.footer != null ? o.footer : _END;\n var out = [header];\n var r = decode_range(ws['!ref']);\n o.dense = Array.isArray(ws);\n out.push(make_html_preamble(ws, r, o));\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n out.push(make_html_row(ws, r, R, o));\n }\n\n out.push(\"
\" + footer);\n return out.join(\"\");\n }\n\n return {\n to_workbook: html_to_book,\n to_sheet: html_to_sheet,\n _row: make_html_row,\n BEGIN: _BEGIN,\n END: _END,\n _preamble: make_html_preamble,\n from_sheet: sheet_to_html\n };\n }();\n\n function sheet_add_dom(ws, table, _opts) {\n var opts = _opts || {};\n if (DENSE != null) opts.dense = DENSE;\n var or_R = 0,\n or_C = 0;\n\n if (opts.origin != null) {\n if (typeof opts.origin == 'number') or_R = opts.origin;else {\n var _origin = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\n or_R = _origin.r;\n or_C = _origin.c;\n }\n }\n\n var rows = table.getElementsByTagName('tr');\n var sheetRows = Math.min(opts.sheetRows || 10000000, rows.length);\n var range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: or_R,\n c: or_C\n }\n };\n\n if (ws[\"!ref\"]) {\n var _range = decode_range(ws[\"!ref\"]);\n\n range.s.r = Math.min(range.s.r, _range.s.r);\n range.s.c = Math.min(range.s.c, _range.s.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n range.e.c = Math.max(range.e.c, _range.e.c);\n if (or_R == -1) range.e.r = or_R = _range.e.r + 1;\n }\n\n var merges = [],\n midx = 0;\n var rowinfo = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n var _R = 0,\n R = 0,\n _C = 0,\n C = 0,\n RS = 0,\n CS = 0;\n if (!ws[\"!cols\"]) ws['!cols'] = [];\n\n for (; _R < rows.length && R < sheetRows; ++_R) {\n var row = rows[_R];\n\n if (is_dom_element_hidden(row)) {\n if (opts.display) continue;\n rowinfo[R] = {\n hidden: true\n };\n }\n\n var elts = row.children;\n\n for (_C = C = 0; _C < elts.length; ++_C) {\n var elt = elts[_C];\n if (opts.display && is_dom_element_hidden(elt)) continue;\n var v = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n var z = elt.getAttribute('data-z') || elt.getAttribute('z');\n\n for (midx = 0; midx < merges.length; ++midx) {\n var m = merges[midx];\n\n if (m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) {\n C = m.e.c + 1 - or_C;\n midx = -1;\n }\n }\n /* TODO: figure out how to extract nonstandard mso- style */\n\n\n CS = +elt.getAttribute(\"colspan\") || 1;\n if ((RS = +elt.getAttribute(\"rowspan\") || 1) > 1 || CS > 1) merges.push({\n s: {\n r: R + or_R,\n c: C + or_C\n },\n e: {\n r: R + or_R + (RS || 1) - 1,\n c: C + or_C + (CS || 1) - 1\n }\n });\n var o = {\n t: 's',\n v: v\n };\n\n var _t = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\n if (v != null) {\n if (v.length == 0) o.t = _t || 'z';else if (opts.raw || v.trim().length == 0 || _t == \"s\") {} else if (v === 'TRUE') o = {\n t: 'b',\n v: true\n };else if (v === 'FALSE') o = {\n t: 'b',\n v: false\n };else if (!isNaN(fuzzynum(v))) o = {\n t: 'n',\n v: fuzzynum(v)\n };else if (!isNaN(fuzzydate(v).getDate())) {\n o = {\n t: 'd',\n v: parseDate(v)\n };\n if (!opts.cellDates) o = {\n t: 'n',\n v: datenum(o.v)\n };\n o.z = opts.dateNF || SSF._table[14];\n }\n }\n\n if (o.z === undefined && z != null) o.z = z;\n /* The first link is used. Links are assumed to be fully specified.\n * TODO: The right way to process relative links is to make a new */\n\n var l = \"\",\n Aelts = elt.getElementsByTagName(\"A\");\n if (Aelts && Aelts.length) for (var Aelti = 0; Aelti < Aelts.length; ++Aelti) {\n if (Aelts[Aelti].hasAttribute(\"href\")) {\n l = Aelts[Aelti].getAttribute(\"href\");\n if (l.charAt(0) != \"#\") break;\n }\n }\n if (l && l.charAt(0) != \"#\") o.l = {\n Target: l\n };\n\n if (opts.dense) {\n if (!ws[R + or_R]) ws[R + or_R] = [];\n ws[R + or_R][C + or_C] = o;\n } else ws[encode_cell({\n c: C + or_C,\n r: R + or_R\n })] = o;\n\n if (range.e.c < C + or_C) range.e.c = C + or_C;\n C += CS;\n }\n\n ++R;\n }\n\n if (merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n range.e.r = Math.max(range.e.r, R - 1 + or_R);\n ws['!ref'] = encode_range(range);\n if (R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length - _R + R - 1 + or_R, range)); // We can count the real number of rows to parse but we don't to improve the performance\n\n return ws;\n }\n\n function parse_dom_table(table, _opts) {\n var opts = _opts || {};\n var ws = opts.dense ? [] : {};\n return sheet_add_dom(ws, table, _opts);\n }\n\n function table_to_book(table, opts) {\n return sheet_to_workbook(parse_dom_table(table, opts), opts);\n }\n\n function is_dom_element_hidden(element) {\n var display = '';\n var get_computed_style = get_get_computed_style_function(element);\n if (get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n if (!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)\n\n return display === 'none';\n }\n /* global getComputedStyle */\n\n\n function get_get_computed_style_function(element) {\n // The proper getComputedStyle implementation is the one defined in the element window\n if (element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle; // If it is not available, try to get one from the global namespace\n\n if (typeof getComputedStyle === 'function') return getComputedStyle;\n return null;\n }\n /* OpenDocument */\n\n\n var parse_content_xml = function () {\n var parse_text_p = function parse_text_p(text) {\n /* 6.1.2 White Space Characters */\n var fixed = text.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \").replace(//g, \" \").replace(//g, function ($$, $1) {\n return Array(parseInt($1, 10) + 1).join(\" \");\n }).replace(/]*\\/>/g, \"\\t\").replace(//g, \"\\n\");\n var v = unescapexml(fixed.replace(/<[^>]*>/g, \"\"));\n return [v];\n };\n\n var number_formats = {\n /* ods name: [short ssf fmt, long ssf fmt] */\n day: [\"d\", \"dd\"],\n month: [\"m\", \"mm\"],\n year: [\"y\", \"yy\"],\n hours: [\"h\", \"hh\"],\n minutes: [\"m\", \"mm\"],\n seconds: [\"s\", \"ss\"],\n \"am-pm\": [\"A/P\", \"AM/PM\"],\n \"day-of-week\": [\"ddd\", \"dddd\"],\n era: [\"e\", \"ee\"],\n\n /* there is no native representation of LO \"Q\" format */\n quarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n };\n return function pcx(d, _opts) {\n var opts = _opts || {};\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var str = xlml_normalize(d);\n var state = [],\n tmp;\n var tag;\n var NFtag = {\n name: \"\"\n },\n NF = \"\",\n pidx = 0;\n var sheetag;\n var rowtag;\n var Sheets = {},\n SheetNames = [];\n var ws = opts.dense ? [] : {};\n var Rn, q;\n var ctag = {\n value: \"\"\n };\n var textp = \"\",\n textpidx = 0,\n textptag;\n var textR = [];\n var R = -1,\n C = -1,\n range = {\n s: {\n r: 1000000,\n c: 10000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var row_ol = 0;\n var number_format_map = {};\n var merges = [],\n mrange = {},\n mR = 0,\n mC = 0;\n var rowinfo = [],\n rowpeat = 1,\n colpeat = 1;\n var arrayf = [];\n var WB = {\n Names: []\n };\n var atag = {};\n var _Ref = [\"\", \"\"];\n var comments = [],\n comment = {};\n var creator = \"\",\n creatoridx = 0;\n var isstub = false,\n intable = false;\n var i = 0;\n xlmlregex.lastIndex = 0;\n str = str.replace(//mg, \"\").replace(//gm, \"\");\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3] = Rn[3].replace(/_.*$/, \"\")) {\n case 'table':\n case '工作表':\n // 9.1.2 \n if (Rn[1] === '/') {\n if (range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);else ws['!ref'] = \"A1:A1\";\n\n if (opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n ws['!fullref'] = ws['!ref'];\n range.e.r = opts.sheetRows - 1;\n ws['!ref'] = encode_range(range);\n }\n\n if (merges.length) ws['!merges'] = merges;\n if (rowinfo.length) ws[\"!rows\"] = rowinfo;\n sheetag.name = sheetag['名称'] || sheetag.name;\n if (typeof JSON !== 'undefined') JSON.stringify(sheetag);\n SheetNames.push(sheetag.name);\n Sheets[sheetag.name] = ws;\n intable = false;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n sheetag = parsexmltag(Rn[0], false);\n R = C = -1;\n range.s.r = range.s.c = 10000000;\n range.e.r = range.e.c = 0;\n ws = opts.dense ? [] : {};\n merges = [];\n rowinfo = [];\n intable = true;\n }\n\n break;\n\n case 'table-row-group':\n // 9.1.9 \n if (Rn[1] === \"/\") --row_ol;else ++row_ol;\n break;\n\n case 'table-row':\n case '行':\n // 9.1.3 \n if (Rn[1] === '/') {\n R += rowpeat;\n rowpeat = 1;\n break;\n }\n\n rowtag = parsexmltag(Rn[0], false);\n if (rowtag['行号']) R = rowtag['行号'] - 1;else if (R == -1) R = 0;\n rowpeat = +rowtag['number-rows-repeated'] || 1;\n /* TODO: remove magic */\n\n if (rowpeat < 10) for (i = 0; i < rowpeat; ++i) {\n if (row_ol > 0) rowinfo[R + i] = {\n level: row_ol\n };\n }\n C = -1;\n break;\n\n case 'covered-table-cell':\n // 9.1.5 \n if (Rn[1] !== '/') ++C;\n\n if (opts.sheetStubs) {\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = {\n t: 'z'\n };\n } else ws[encode_cell({\n r: R,\n c: C\n })] = {\n t: 'z'\n };\n }\n\n textp = \"\";\n textR = [];\n break;\n\n /* stub */\n\n case 'table-cell':\n case '数据':\n if (Rn[0].charAt(Rn[0].length - 2) === '/') {\n ++C;\n ctag = parsexmltag(Rn[0], false);\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n q = {\n t: 'z',\n v: null\n };\n if (ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\n if ((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n q.t = \"s\";\n q.v = unescapexml(ctag['string-value'] || \"\");\n\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = q;\n } else {\n ws[encode_cell({\n r: R,\n c: C\n })] = q;\n }\n }\n\n C += colpeat - 1;\n } else if (Rn[1] !== '/') {\n ++C;\n colpeat = 1;\n var rptR = rowpeat ? R + rowpeat - 1 : R;\n if (C > range.e.c) range.e.c = C;\n if (C < range.s.c) range.s.c = C;\n if (R < range.s.r) range.s.r = R;\n if (rptR > range.e.r) range.e.r = rptR;\n ctag = parsexmltag(Rn[0], false);\n comments = [];\n comment = {};\n q = {\n t: ctag['数据类型'] || ctag['value-type'],\n v: null\n };\n\n if (opts.cellFormula) {\n if (ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\n if (ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n mR = parseInt(ctag['number-matrix-rows-spanned'], 10) || 0;\n mC = parseInt(ctag['number-matrix-columns-spanned'], 10) || 0;\n mrange = {\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + mR - 1,\n c: C + mC - 1\n }\n };\n q.F = encode_range(mrange);\n arrayf.push([mrange, q.F]);\n }\n\n if (ctag.formula) q.f = ods_to_csf_formula(ctag.formula);else for (i = 0; i < arrayf.length; ++i) {\n if (R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r) if (C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c) q.F = arrayf[i][1];\n }\n }\n\n if (ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n mR = parseInt(ctag['number-rows-spanned'], 10) || 0;\n mC = parseInt(ctag['number-columns-spanned'], 10) || 0;\n mrange = {\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + mR - 1,\n c: C + mC - 1\n }\n };\n merges.push(mrange);\n }\n /* 19.675.2 table:number-columns-repeated */\n\n\n if (ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n /* 19.385 office:value-type */\n\n switch (q.t) {\n case 'boolean':\n q.t = 'b';\n q.v = parsexmlbool(ctag['boolean-value']);\n break;\n\n case 'float':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'percentage':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'currency':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'date':\n q.t = 'd';\n q.v = parseDate(ctag['date-value']);\n\n if (!opts.cellDates) {\n q.t = 'n';\n q.v = datenum(q.v);\n }\n\n q.z = 'm/d/yy';\n break;\n\n case 'time':\n q.t = 'n';\n q.v = parse_isodur(ctag['time-value']) / 86400;\n\n if (opts.cellDates) {\n q.t = 'd';\n q.v = numdate(q.v);\n }\n\n q.z = 'HH:MM:SS';\n break;\n\n case 'number':\n q.t = 'n';\n q.v = parseFloat(ctag['数据数值']);\n break;\n\n default:\n if (q.t === 'string' || q.t === 'text' || !q.t) {\n q.t = 's';\n\n if (ctag['string-value'] != null) {\n textp = unescapexml(ctag['string-value']);\n textR = [];\n }\n } else throw new Error('Unsupported value type ' + q.t);\n\n }\n } else {\n isstub = false;\n\n if (q.t === 's') {\n q.v = textp || '';\n if (textR.length) q.R = textR;\n isstub = textpidx == 0;\n }\n\n if (atag.Target) q.l = atag;\n\n if (comments.length > 0) {\n q.c = comments;\n comments = [];\n }\n\n if (textp && opts.cellText !== false) q.w = textp;\n\n if (isstub) {\n q.t = \"z\";\n delete q.v;\n }\n\n if (!isstub || opts.sheetStubs) {\n if (!(opts.sheetRows && opts.sheetRows <= R)) {\n for (var rpt = 0; rpt < rowpeat; ++rpt) {\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n\n if (opts.dense) {\n if (!ws[R + rpt]) ws[R + rpt] = [];\n ws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\n while (--colpeat > 0) {\n ws[R + rpt][C + colpeat] = dup(q);\n }\n } else {\n ws[encode_cell({\n r: R + rpt,\n c: C\n })] = q;\n\n while (--colpeat > 0) {\n ws[encode_cell({\n r: R + rpt,\n c: C + colpeat\n })] = dup(q);\n }\n }\n\n if (range.e.c <= C) range.e.c = C;\n }\n }\n }\n\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n C += colpeat - 1;\n colpeat = 0;\n q = {};\n textp = \"\";\n textR = [];\n }\n\n atag = {};\n break;\n // 9.1.4 \n\n /* pure state */\n\n case 'document': // TODO: is the root for FODS\n\n case 'document-content':\n case '电子表格文档': // 3.1.3.2 \n\n case 'spreadsheet':\n case '主体': // 3.7 \n\n case 'scripts': // 3.12 \n\n case 'styles': // TODO \n\n case 'font-face-decls': // 3.14 \n\n case 'master-styles':\n // 3.15.4 -- relevant for FODS\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n\n case 'annotation':\n // 14.1 \n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n comment.t = textp;\n if (textR.length) comment.R = textR;\n comment.a = creator;\n comments.push(comment);\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n state.push([Rn[3], false]);\n }\n\n creator = \"\";\n creatoridx = 0;\n textp = \"\";\n textpidx = 0;\n textR = [];\n break;\n\n case 'creator':\n // 4.3.2.7 \n if (Rn[1] === '/') {\n creator = str.slice(creatoridx, Rn.index);\n } else creatoridx = Rn.index + Rn[0].length;\n\n break;\n\n /* ignore state */\n\n case 'meta':\n case '元数据': // TODO: FODS/UOF\n\n case 'settings': // TODO: \n\n case 'config-item-set': // TODO: \n\n case 'config-item-map-indexed': // TODO: \n\n case 'config-item-map-entry': // TODO: \n\n case 'config-item-map-named': // TODO: \n\n case 'shapes': // 9.2.8 \n\n case 'frame': // 10.4.2 \n\n case 'text-box': // 10.4.3 \n\n case 'image': // 10.4.4 \n\n case 'data-pilot-tables': // 9.6.2 \n\n case 'list-style': // 16.30 \n\n case 'form': // 13.13 \n\n case 'dde-links': // 9.8 \n\n case 'event-listeners': // TODO\n\n case 'chart':\n // TODO\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], false]);\n\n textp = \"\";\n textpidx = 0;\n textR = [];\n break;\n\n case 'scientific-number':\n // TODO: \n break;\n\n case 'currency-symbol':\n // TODO: \n break;\n\n case 'currency-style':\n // TODO: \n break;\n\n case 'number-style': // 16.27.2 \n\n case 'percentage-style': // 16.27.9 \n\n case 'date-style': // 16.27.10 \n\n case 'time-style':\n // 16.27.18 \n if (Rn[1] === '/') {\n number_format_map[NFtag.name] = NF;\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n NF = \"\";\n NFtag = parsexmltag(Rn[0], false);\n state.push([Rn[3], true]);\n }\n\n break;\n\n case 'script':\n break;\n // 3.13 \n\n case 'libraries':\n break;\n // TODO: \n\n case 'automatic-styles':\n break;\n // 3.15.3 \n\n case 'default-style': // TODO: \n\n case 'page-layout':\n break;\n // TODO: \n\n case 'style':\n // 16.2 \n break;\n\n case 'map':\n break;\n // 16.3 \n\n case 'font-face':\n break;\n // 16.21 \n\n case 'paragraph-properties':\n break;\n // 17.6 \n\n case 'table-properties':\n break;\n // 17.15 \n\n case 'table-column-properties':\n break;\n // 17.16 \n\n case 'table-row-properties':\n break;\n // 17.17 \n\n case 'table-cell-properties':\n break;\n // 17.18 \n\n case 'number':\n // 16.27.3 \n switch (state[state.length - 1][0]) {\n case 'time-style':\n case 'date-style':\n tag = parsexmltag(Rn[0], false);\n NF += number_formats[Rn[3]][tag.style === 'long' ? 1 : 0];\n break;\n }\n\n break;\n\n case 'fraction':\n break;\n // TODO 16.27.6 \n\n case 'day': // 16.27.11 \n\n case 'month': // 16.27.12 \n\n case 'year': // 16.27.13 \n\n case 'era': // 16.27.14 \n\n case 'day-of-week': // 16.27.15 \n\n case 'week-of-year': // 16.27.16 \n\n case 'quarter': // 16.27.17 \n\n case 'hours': // 16.27.19 \n\n case 'minutes': // 16.27.20 \n\n case 'seconds': // 16.27.21 \n\n case 'am-pm':\n // 16.27.22 \n switch (state[state.length - 1][0]) {\n case 'time-style':\n case 'date-style':\n tag = parsexmltag(Rn[0], false);\n NF += number_formats[Rn[3]][tag.style === 'long' ? 1 : 0];\n break;\n }\n\n break;\n\n case 'boolean-style':\n break;\n // 16.27.23 \n\n case 'boolean':\n break;\n // 16.27.24 \n\n case 'text-style':\n break;\n // 16.27.25 \n\n case 'text':\n // 16.27.26 \n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") switch (state[state.length - 1][0]) {\n case 'number-style':\n case 'date-style':\n case 'time-style':\n NF += str.slice(pidx, Rn.index);\n break;\n } else pidx = Rn.index + Rn[0].length;\n break;\n\n case 'named-range':\n // 9.4.12 \n tag = parsexmltag(Rn[0], false);\n _Ref = ods_to_csf_3D(tag['cell-range-address']);\n var nrange = {\n Name: tag.name,\n Ref: _Ref[0] + '!' + _Ref[1]\n };\n if (intable) nrange.Sheet = SheetNames.length;\n WB.Names.push(nrange);\n break;\n\n case 'text-content':\n break;\n // 16.27.27 \n\n case 'text-properties':\n break;\n // 16.27.27 \n\n case 'embedded-text':\n break;\n // 16.27.4 \n\n case 'body':\n case '电子表格':\n break;\n // 3.3 16.9.6 19.726.3\n\n case 'forms':\n break;\n // 12.25.2 13.2\n\n case 'table-column':\n break;\n // 9.1.6 \n\n case 'table-header-rows':\n break;\n // 9.1.7 \n\n case 'table-rows':\n break;\n // 9.1.12 \n\n /* TODO: outline levels */\n\n case 'table-column-group':\n break;\n // 9.1.10 \n\n case 'table-header-columns':\n break;\n // 9.1.11 \n\n case 'table-columns':\n break;\n // 9.1.12 \n\n case 'null-date':\n break;\n // 9.4.2 TODO: date1904\n\n case 'graphic-properties':\n break;\n // 17.21 \n\n case 'calculation-settings':\n break;\n // 9.4.1 \n\n case 'named-expressions':\n break;\n // 9.4.11 \n\n case 'label-range':\n break;\n // 9.4.9 \n\n case 'label-ranges':\n break;\n // 9.4.10 \n\n case 'named-expression':\n break;\n // 9.4.13 \n\n case 'sort':\n break;\n // 9.4.19 \n\n case 'sort-by':\n break;\n // 9.4.20 \n\n case 'sort-groups':\n break;\n // 9.4.22 \n\n case 'tab':\n break;\n // 6.1.4 \n\n case 'line-break':\n break;\n // 6.1.5 \n\n case 'span':\n break;\n // 6.1.7 \n\n case 'p':\n case '文本串':\n // 5.1.3 \n if (['master-styles'].indexOf(state[state.length - 1][0]) > -1) break;\n\n if (Rn[1] === '/' && (!ctag || !ctag['string-value'])) {\n var ptp = parse_text_p(str.slice(textpidx, Rn.index), textptag);\n textp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n } else {\n textptag = parsexmltag(Rn[0], false);\n textpidx = Rn.index + Rn[0].length;\n }\n\n break;\n // \n\n case 's':\n break;\n // \n\n case 'database-range':\n // 9.4.15 \n if (Rn[1] === '/') break;\n\n try {\n _Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n Sheets[_Ref[0]]['!autofilter'] = {\n ref: _Ref[1]\n };\n } catch (e) {\n /* empty */\n }\n\n break;\n\n case 'date':\n break;\n // <*:date>\n\n case 'object':\n break;\n // 10.4.6.2 \n\n case 'title':\n case '标题':\n break;\n // <*:title> OR \n\n case 'desc':\n break;\n // <*:desc>\n\n case 'binary-data':\n break;\n // 10.4.5 TODO: b64 blob\n\n /* 9.2 Advanced Tables */\n\n case 'table-source':\n break;\n // 9.2.6\n\n case 'scenario':\n break;\n // 9.2.6\n\n case 'iteration':\n break;\n // 9.4.3 \n\n case 'content-validations':\n break;\n // 9.4.4 \n\n case 'filter':\n break;\n // 9.5.2 \n\n case 'filter-and':\n break;\n // 9.5.3 \n\n case 'filter-or':\n break;\n // 9.5.4 \n\n case 'filter-condition':\n break;\n // 9.5.5 \n\n case 'list-level-style-bullet':\n break;\n // 16.31 \n\n case 'page-count':\n break;\n // TODO \n\n case 'time':\n break;\n // TODO \n\n /* 9.3 Advanced Table Cells */\n\n case 'cell-range-source':\n break;\n // 9.3.1 \n\n case 'property':\n break;\n // 13.8 \n\n case 'a':\n // 6.1.8 hyperlink\n if (Rn[1] !== '/') {\n atag = parsexmltag(Rn[0], false);\n if (!atag.href) break;\n atag.Target = unescapexml(atag.href);\n delete atag.href;\n\n if (atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n _Ref = ods_to_csf_3D(atag.Target.slice(1));\n atag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n } else if (atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n }\n\n break;\n\n /* non-standard */\n\n case 'table-protection':\n break;\n\n case 'data-pilot-grand-total':\n break;\n // ';\n return function wso() {\n return XML_HEADER + payload;\n };\n }();\n\n var write_content_ods = function () {\n /* 6.1.2 White Space Characters */\n var write_text_p = function write_text_p(text) {\n return escapexml(text).replace(/ +/g, function ($$) {\n return '';\n }).replace(/\\t/g, \"\").replace(/\\n/g, \"\").replace(/^ /, \"\").replace(/ $/, \"\");\n };\n\n var null_cell_xml = ' \\n';\n var covered_cell_xml = ' \\n';\n\n var write_ws = function write_ws(ws, wb, i) {\n /* Section 9 Tables */\n var o = [];\n o.push(' \\n');\n var R = 0,\n C = 0,\n range = decode_range(ws['!ref'] || \"A1\");\n var marr = ws['!merges'] || [],\n mi = 0;\n var dense = Array.isArray(ws);\n\n if (ws[\"!cols\"]) {\n for (C = 0; C <= range.e.c; ++C) {\n o.push(' \\n');\n }\n }\n\n var H = \"\",\n ROWS = ws[\"!rows\"] || [];\n\n for (R = 0; R < range.s.r; ++R) {\n H = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n o.push(' \\n');\n }\n\n for (; R <= range.e.r; ++R) {\n H = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n o.push(' \\n');\n\n for (C = 0; C < range.s.c; ++C) {\n o.push(null_cell_xml);\n }\n\n for (; C <= range.e.c; ++C) {\n var skip = false,\n ct = {},\n textp = \"\";\n\n for (mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c > C) continue;\n if (marr[mi].s.r > R) continue;\n if (marr[mi].e.c < C) continue;\n if (marr[mi].e.r < R) continue;\n if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n ct['table:number-columns-spanned'] = marr[mi].e.c - marr[mi].s.c + 1;\n ct['table:number-rows-spanned'] = marr[mi].e.r - marr[mi].s.r + 1;\n break;\n }\n\n if (skip) {\n o.push(covered_cell_xml);\n continue;\n }\n\n var ref = encode_cell({\n r: R,\n c: C\n }),\n cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (cell && cell.f) {\n ct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\n if (cell.F) {\n if (cell.F.slice(0, ref.length) == ref) {\n var _Fref = decode_range(cell.F);\n\n ct['table:number-matrix-columns-spanned'] = _Fref.e.c - _Fref.s.c + 1;\n ct['table:number-matrix-rows-spanned'] = _Fref.e.r - _Fref.s.r + 1;\n }\n }\n }\n\n if (!cell) {\n o.push(null_cell_xml);\n continue;\n }\n\n switch (cell.t) {\n case 'b':\n textp = cell.v ? 'TRUE' : 'FALSE';\n ct['office:value-type'] = \"boolean\";\n ct['office:boolean-value'] = cell.v ? 'true' : 'false';\n break;\n\n case 'n':\n textp = cell.w || String(cell.v || 0);\n ct['office:value-type'] = \"float\";\n ct['office:value'] = cell.v || 0;\n break;\n\n case 's':\n case 'str':\n textp = cell.v == null ? \"\" : cell.v;\n ct['office:value-type'] = \"string\";\n break;\n\n case 'd':\n textp = cell.w || parseDate(cell.v).toISOString();\n ct['office:value-type'] = \"date\";\n ct['office:date-value'] = parseDate(cell.v).toISOString();\n ct['table:style-name'] = \"ce1\";\n break;\n //case 'e':\n\n default:\n o.push(null_cell_xml);\n continue;\n }\n\n var text_p = write_text_p(textp);\n\n if (cell.l && cell.l.Target) {\n var _tgt = cell.l.Target;\n _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt; // TODO: choose correct parent path format based on link delimiters\n\n if (_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n text_p = writextag('text:a', text_p, {\n 'xlink:href': _tgt.replace(/&/g, \"&\")\n });\n }\n\n o.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n }\n\n o.push(' \\n');\n }\n\n o.push(' \\n');\n return o.join(\"\");\n };\n\n var write_automatic_styles_ods = function write_automatic_styles_ods(o, wb) {\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n o.push(' /\\n');\n o.push(' \\n');\n o.push(' /\\n');\n o.push(' \\n');\n o.push(' \\n');\n /* column styles */\n\n var cidx = 0;\n wb.SheetNames.map(function (n) {\n return wb.Sheets[n];\n }).forEach(function (ws) {\n if (!ws) return;\n\n if (ws[\"!cols\"]) {\n for (var C = 0; C < ws[\"!cols\"].length; ++C) {\n if (ws[\"!cols\"][C]) {\n var colobj = ws[\"!cols\"][C];\n if (colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n process_col(colobj);\n colobj.ods = cidx;\n var w = ws[\"!cols\"][C].wpx + \"px\";\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n ++cidx;\n }\n }\n }\n });\n /* row styles */\n\n var ridx = 0;\n wb.SheetNames.map(function (n) {\n return wb.Sheets[n];\n }).forEach(function (ws) {\n if (!ws) return;\n\n if (ws[\"!rows\"]) {\n for (var R = 0; R < ws[\"!rows\"].length; ++R) {\n if (ws[\"!rows\"][R]) {\n ws[\"!rows\"][R].ods = ridx;\n var h = ws[\"!rows\"][R].hpx + \"px\";\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n ++ridx;\n }\n }\n }\n });\n /* table */\n\n o.push(' \\n'); // style:master-page-name=\"mp1\">\\n');\n\n o.push(' \\n');\n o.push(' \\n');\n /* table cells, text */\n\n o.push(' \\n');\n /* page-layout */\n\n o.push(' \\n');\n };\n\n return function wcx(wb, opts) {\n var o = [XML_HEADER];\n /* 3.1.3.2 */\n\n var attr = wxt_helper({\n 'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n 'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n 'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n 'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n 'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n 'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n 'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n 'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n 'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n 'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n 'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n 'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n 'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n 'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n 'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n 'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n 'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n 'xmlns:ooo': \"http://openoffice.org/2004/office\",\n 'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n 'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n 'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n 'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n 'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n 'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n 'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n 'xmlns:rpt': \"http://openoffice.org/2005/report\",\n 'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n 'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n 'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n 'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n 'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n 'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n 'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n 'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n 'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n 'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n 'office:version': \"1.2\"\n });\n var fods = wxt_helper({\n 'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n 'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n });\n\n if (opts.bookType == \"fods\") {\n o.push('\\n');\n o.push(write_meta_ods().replace(/office:document-meta/g, \"office:meta\")); // TODO: settings (equiv of settings.xml for ODS)\n } else o.push('\\n'); // o.push(' \\n');\n\n\n write_automatic_styles_ods(o, wb);\n o.push(' \\n');\n o.push(' \\n');\n\n for (var i = 0; i != wb.SheetNames.length; ++i) {\n o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n }\n\n o.push(' \\n');\n o.push(' \\n');\n if (opts.bookType == \"fods\") o.push('
');else o.push('');\n return o.join(\"\");\n };\n }();\n\n function write_ods(wb, opts) {\n if (opts.bookType == \"fods\") return write_content_ods(wb, opts);\n var zip = zip_new();\n var f = \"\";\n var manifest = [];\n var rdf = [];\n /* Part 3 Section 3.3 MIME Media Type */\n\n f = \"mimetype\";\n zip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n /* Part 1 Section 2.2 Documents */\n\n f = \"content.xml\";\n zip_add_file(zip, f, write_content_ods(wb, opts));\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"ContentFile\"]);\n /* TODO: these are hard-coded styles to satiate excel */\n\n f = \"styles.xml\";\n zip_add_file(zip, f, write_styles_ods(wb, opts));\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"StylesFile\"]);\n /* TODO: this is hard-coded to satiate excel */\n\n f = \"meta.xml\";\n zip_add_file(zip, f, XML_HEADER + write_meta_ods());\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"MetadataFile\"]);\n /* Part 3 Section 6 Metadata Manifest File */\n\n f = \"manifest.rdf\";\n zip_add_file(zip, f, write_rdf(rdf\n /*, opts*/\n ));\n manifest.push([f, \"application/rdf+xml\"]);\n /* Part 3 Section 4 Manifest File */\n\n f = \"META-INF/manifest.xml\";\n zip_add_file(zip, f, write_manifest(manifest\n /*, opts*/\n ));\n return zip;\n }\n\n function write_sheet_index(wb, sheet) {\n if (!sheet) return 0;\n var idx = wb.SheetNames.indexOf(sheet);\n if (idx == -1) throw new Error(\"Sheet not found: \" + sheet);\n return idx;\n }\n\n function write_obj_str(factory) {\n return function write_str(wb, o) {\n var idx = write_sheet_index(wb, o.sheet);\n return factory.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb);\n };\n }\n\n var write_htm_str = write_obj_str(HTML_);\n var write_csv_str = write_obj_str({\n from_sheet: sheet_to_csv\n });\n var write_slk_str = write_obj_str(typeof SYLK !== \"undefined\" ? SYLK : {});\n var write_dif_str = write_obj_str(typeof DIF !== \"undefined\" ? DIF : {});\n var write_prn_str = write_obj_str(typeof PRN !== \"undefined\" ? PRN : {});\n var write_rtf_str = write_obj_str(typeof RTF !== \"undefined\" ? RTF : {});\n var write_txt_str = write_obj_str({\n from_sheet: sheet_to_txt\n });\n var write_dbf_buf = write_obj_str(typeof DBF !== \"undefined\" ? DBF : {});\n var write_eth_str = write_obj_str(typeof ETH !== \"undefined\" ? ETH : {});\n\n function fix_opts_func(defaults) {\n return function fix_opts(opts) {\n for (var i = 0; i != defaults.length; ++i) {\n var d = defaults[i];\n if (opts[d[0]] === undefined) opts[d[0]] = d[1];\n if (d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n }\n };\n }\n\n var fix_read_opts = function fix_read_opts(opts) {\n fix_opts_func([['cellNF', false],\n /* emit cell number format string as .z */\n ['cellHTML', true],\n /* emit html string as .h */\n ['cellFormula', true],\n /* emit formulae as .f */\n ['cellStyles', false],\n /* emits style/theme as .s */\n ['cellText', true],\n /* emit formatted text as .w */\n ['cellDates', false],\n /* emit date cells with type `d` */\n ['sheetStubs', false],\n /* emit empty cells */\n ['sheetRows', 0, 'n'],\n /* read n rows (0 = read all rows) */\n ['bookDeps', false],\n /* parse calculation chains */\n ['bookSheets', false],\n /* only try to get sheet names (no Sheets) */\n ['bookProps', false],\n /* only try to get properties (no Sheets) */\n ['bookFiles', false],\n /* include raw file structure (keys, files, cfb) */\n ['bookVBA', false],\n /* include vba raw data (vbaraw) */\n ['password', ''],\n /* password */\n ['WTF', false]\n /* WTF mode (throws errors) */\n ])(opts);\n };\n\n var fix_write_opts = fix_opts_func([['cellDates', false],\n /* write date cells with type `d` */\n ['bookSST', false],\n /* Generate Shared String Table */\n ['bookType', 'xlsx'],\n /* Type of workbook (xlsx/m/b) */\n ['compression', false],\n /* Use file compression */\n ['WTF', false]\n /* WTF mode (throws errors) */\n ]);\n\n function get_sheet_type(n) {\n if (RELS.WS.indexOf(n) > -1) return \"sheet\";\n if (RELS.CS && n == RELS.CS) return \"chart\";\n if (RELS.DS && n == RELS.DS) return \"dialog\";\n if (RELS.MS && n == RELS.MS) return \"macro\";\n return n && n.length ? n : \"sheet\";\n }\n\n function safe_parse_wbrels(wbrels, sheets) {\n if (!wbrels) return 0;\n\n try {\n wbrels = sheets.map(function pwbr(w) {\n if (!w.id) w.id = w.strRelID;\n return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)];\n });\n } catch (e) {\n return null;\n }\n\n return !wbrels || wbrels.length === 0 ? null : wbrels;\n }\n\n function safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) {\n try {\n sheetRels[sheet] = parse_rels(getzipstr(zip, relsPath, true), path);\n var data = getzipdata(zip, path);\n\n var _ws;\n\n switch (stype) {\n case 'sheet':\n _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n case 'chart':\n _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n if (!_ws || !_ws['!drawel']) break;\n var dfile = resolve_path(_ws['!drawel'].Target, path);\n var drelsp = get_rels_path(dfile);\n var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n var chartp = resolve_path(draw, dfile);\n var crelsp = get_rels_path(chartp);\n _ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n break;\n\n case 'macro':\n _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n case 'dialog':\n _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n default:\n throw new Error(\"Unrecognized sheet type \" + stype);\n }\n\n sheets[sheet] = _ws;\n /* scan rels for comments */\n\n var comments = [];\n if (sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function (n) {\n if (sheetRels[sheet][n].Type == RELS.CMNT) {\n var dfile = resolve_path(sheetRels[sheet][n].Target, path);\n comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n if (!comments || !comments.length) return;\n sheet_insert_comments(_ws, comments);\n }\n });\n } catch (e) {\n if (opts.WTF) throw e;\n }\n }\n\n function strip_front_slash(x) {\n return x.charAt(0) == '/' ? x.slice(1) : x;\n }\n\n function parse_zip(zip, opts) {\n make_ssf(SSF);\n opts = opts || {};\n fix_read_opts(opts);\n /* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\n if (safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n /* UOC */\n\n if (safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n /* Numbers */\n\n if (safegetzipfile(zip, 'Index/Document.iwa')) throw new Error('Unsupported NUMBERS file');\n var entries = zipentries(zip);\n var dir = parse_ct(getzipstr(zip, '[Content_Types].xml'));\n var xlsb = false;\n var sheets, binname;\n\n if (dir.workbooks.length === 0) {\n binname = \"xl/workbook.xml\";\n if (getzipdata(zip, binname, true)) dir.workbooks.push(binname);\n }\n\n if (dir.workbooks.length === 0) {\n binname = \"xl/workbook.bin\";\n if (!getzipdata(zip, binname, true)) throw new Error(\"Could not find workbook\");\n dir.workbooks.push(binname);\n xlsb = true;\n }\n\n if (dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n var themes = {};\n var styles = {};\n\n if (!opts.bookSheets && !opts.bookProps) {\n strs = [];\n if (dir.sst) try {\n strs = parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts);\n } catch (e) {\n if (opts.WTF) throw e;\n }\n if (opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//, ''), true) || \"\", dir.themes[0], opts);\n if (dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n }\n /*var externbooks = */\n\n\n dir.links.map(function (link) {\n try {\n var rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n return parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n } catch (e) {}\n });\n var wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n var props = {},\n propdata = \"\";\n\n if (dir.coreprops.length) {\n propdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n if (propdata) props = parse_core_props(propdata);\n\n if (dir.extprops.length !== 0) {\n propdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n if (propdata) parse_ext_props(propdata, props, opts);\n }\n }\n\n var custprops = {};\n\n if (!opts.bookSheets || opts.bookProps) {\n if (dir.custprops.length !== 0) {\n propdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n if (propdata) custprops = parse_cust_props(propdata, opts);\n }\n }\n\n var out = {};\n\n if (opts.bookSheets || opts.bookProps) {\n if (wb.Sheets) sheets = wb.Sheets.map(function pluck(x) {\n return x.name;\n });else if (props.Worksheets && props.SheetNames.length > 0) sheets = props.SheetNames;\n\n if (opts.bookProps) {\n out.Props = props;\n out.Custprops = custprops;\n }\n\n if (opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n if (opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n }\n\n sheets = {};\n var deps = {};\n if (opts.bookDeps && dir.calcchain) deps = parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)), dir.calcchain, opts);\n var i = 0;\n var sheetRels = {};\n var path, relsPath;\n {\n var wbsheets = wb.Sheets;\n props.Worksheets = wbsheets.length;\n props.SheetNames = [];\n\n for (var j = 0; j != wbsheets.length; ++j) {\n props.SheetNames[j] = wbsheets[j].name;\n }\n }\n var wbext = xlsb ? \"bin\" : \"xml\";\n var wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n var wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi + 1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi + 1) + \".rels\").replace(/^\\//, \"\");\n if (!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n var wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile);\n if (wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n /* Numbers iOS hack */\n\n var nmode = getzipdata(zip, \"xl/worksheets/sheet.xml\", true) ? 1 : 0;\n\n wsloop: for (i = 0; i != props.Worksheets; ++i) {\n var stype = \"sheet\";\n\n if (wbrels && wbrels[i]) {\n path = 'xl/' + wbrels[i][1].replace(/[\\/]?xl\\//, \"\");\n if (!safegetzipfile(zip, path)) path = wbrels[i][1];\n if (!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/, \"\") + wbrels[i][1];\n stype = wbrels[i][2];\n } else {\n path = 'xl/worksheets/sheet' + (i + 1 - nmode) + \".\" + wbext;\n path = path.replace(/sheet0\\./, \"sheet.\");\n }\n\n relsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n if (opts && opts.sheets != null) switch (typeof opts.sheets) {\n case \"number\":\n if (i != opts.sheets) continue wsloop;\n break;\n\n case \"string\":\n if (props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop;\n break;\n\n default:\n if (Array.isArray && Array.isArray(opts.sheets)) {\n var snjseen = false;\n\n for (var snj = 0; snj != opts.sheets.length; ++snj) {\n if (typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen = 1;\n if (typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n }\n\n if (!snjseen) continue wsloop;\n }\n\n }\n safe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n }\n\n out = {\n Directory: dir,\n Workbook: wb,\n Props: props,\n Custprops: custprops,\n Deps: deps,\n Sheets: sheets,\n SheetNames: props.SheetNames,\n Strings: strs,\n Styles: styles,\n Themes: themes,\n SSF: SSF.get_table()\n };\n\n if (opts && opts.bookFiles) {\n if (zip.files) {\n out.keys = entries;\n out.files = zip.files;\n } else {\n out.keys = [];\n out.files = {};\n zip.FullPaths.forEach(function (p, idx) {\n p = p.replace(/^Root Entry[\\/]/, \"\");\n out.keys.push(p);\n out.files[p] = zip.FileIndex[idx];\n });\n }\n }\n\n if (opts && opts.bookVBA) {\n if (dir.vba.length > 0) out.vbaraw = getzipdata(zip, strip_front_slash(dir.vba[0]), true);else if (dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin', true);\n }\n\n return out;\n }\n /* [MS-OFFCRYPTO] 2.1.1 */\n\n\n function parse_xlsxcfb(cfb, _opts) {\n var opts = _opts || {};\n var f = 'Workbook',\n data = CFB.find(cfb, f);\n\n try {\n f = '/!DataSpaces/Version';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*var version = */\n\n parse_DataSpaceVersionInfo(data.content);\n /* 2.3.4.1 */\n\n f = '/!DataSpaces/DataSpaceMap';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var dsm = parse_DataSpaceMap(data.content);\n if (dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n /* 2.3.4.2 */\n\n f = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var seds = parse_DataSpaceDefinition(data.content);\n if (seds.length != 1 || seds[0] != \"StrongEncryptionTransform\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n /* 2.3.4.3 */\n\n f = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*var hdr = */\n\n parse_Primary(data.content);\n } catch (e) {}\n\n f = '/EncryptionInfo';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var einfo = parse_EncryptionInfo(data.content);\n /* 2.3.4.4 */\n\n f = '/EncryptedPackage';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*global decrypt_agile */\n\n if (einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n /*global decrypt_std76 */\n\n if (einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n throw new Error(\"File is password-protected\");\n }\n\n function write_zip(wb, opts) {\n _shapeid = 1024;\n if (opts.bookType == \"ods\") return write_ods(wb, opts);\n\n if (wb && !wb.SSF) {\n wb.SSF = SSF.get_table();\n }\n\n if (wb && wb.SSF) {\n make_ssf(SSF);\n SSF.load_table(wb.SSF); // $FlowIgnore\n\n opts.revssf = evert_num(wb.SSF);\n opts.revssf[wb.SSF[65535]] = 0;\n opts.ssf = wb.SSF;\n }\n\n opts.rels = {};\n opts.wbrels = {};\n opts.Strings = [];\n opts.Strings.Count = 0;\n opts.Strings.Unique = 0;\n if (browser_has_Map) opts.revStrings = new Map();else {\n opts.revStrings = {};\n opts.revStrings.foo = [];\n delete opts.revStrings.foo;\n }\n var wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n var ct = new_ct();\n fix_write_opts(opts = opts || {});\n var zip = zip_new();\n var f = \"\",\n rId = 0;\n opts.cellXfs = [];\n get_cell_style(opts.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n if (!wb.Props) wb.Props = {};\n f = \"docProps/core.xml\";\n zip_add_file(zip, f, write_core_props(wb.Props, opts));\n ct.coreprops.push(f);\n add_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n f = \"docProps/app.xml\";\n\n if (wb.Props && wb.Props.SheetNames) {\n /* empty */\n } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;else {\n var _sn = [];\n\n for (var _i = 0; _i < wb.SheetNames.length; ++_i) {\n if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n }\n\n wb.Props.SheetNames = _sn;\n }\n\n wb.Props.Worksheets = wb.Props.SheetNames.length;\n zip_add_file(zip, f, write_ext_props(wb.Props, opts));\n ct.extprops.push(f);\n add_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {\n f = \"docProps/custom.xml\";\n zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n ct.custprops.push(f);\n add_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n }\n\n for (rId = 1; rId <= wb.SheetNames.length; ++rId) {\n var wsrels = {\n '!id': {}\n };\n var ws = wb.Sheets[wb.SheetNames[rId - 1]];\n\n var _type = (ws || {})[\"!type\"] || \"sheet\";\n\n switch (_type) {\n case \"chart\":\n /* falls through */\n\n default:\n f = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n zip_add_file(zip, f, write_ws(rId - 1, f, opts, wb, wsrels));\n ct.sheets.push(f);\n add_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n }\n\n if (ws) {\n var comments = ws['!comments'];\n var need_vml = false;\n\n if (comments && comments.length > 0) {\n var cf = \"xl/comments\" + rId + \".\" + wbext;\n zip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n ct.comments.push(cf);\n add_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n need_vml = true;\n }\n\n if (ws['!legacy']) {\n if (need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + rId + \".vml\", write_comments_vml(rId, ws['!comments']));\n }\n\n delete ws['!comments'];\n delete ws['!legacy'];\n }\n\n if (wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n }\n\n if (opts.Strings != null && opts.Strings.length > 0) {\n f = \"xl/sharedStrings.\" + wbext;\n zip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n ct.strs.push(f);\n add_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n }\n\n f = \"xl/workbook.\" + wbext;\n zip_add_file(zip, f, write_wb(wb, f, opts));\n ct.workbooks.push(f);\n add_rels(opts.rels, 1, f, RELS.WB);\n /* TODO: something more intelligent with themes */\n\n f = \"xl/theme/theme1.xml\";\n zip_add_file(zip, f, write_theme(wb.Themes, opts));\n ct.themes.push(f);\n add_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n /* TODO: something more intelligent with styles */\n\n f = \"xl/styles.\" + wbext;\n zip_add_file(zip, f, write_sty(wb, f, opts));\n ct.styles.push(f);\n add_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n if (wb.vbaraw && vbafmt) {\n f = \"xl/vbaProject.bin\";\n zip_add_file(zip, f, wb.vbaraw);\n ct.vba.push(f);\n add_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n }\n\n zip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n delete opts.revssf;\n delete opts.ssf;\n return zip;\n }\n\n function firstbyte(f, o) {\n var x = \"\";\n\n switch ((o || {}).type || \"base64\") {\n case 'buffer':\n return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n case 'base64':\n x = Base64.decode(f.slice(0, 12));\n break;\n\n case 'binary':\n x = f;\n break;\n\n case 'array':\n return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n default:\n throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n }\n\n return [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n }\n\n function read_cfb(cfb, opts) {\n if (CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n return parse_xlscfb(cfb, opts);\n }\n\n function read_zip(data, opts) {\n var zip,\n d = data;\n var o = opts || {};\n if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n zip = zip_read(d, o);\n return parse_zip(zip, o);\n }\n\n function read_plaintext(data, o) {\n var i = 0;\n\n main: while (i < data.length) {\n switch (data.charCodeAt(i)) {\n case 0x0A:\n case 0x0D:\n case 0x20:\n ++i;\n break;\n\n case 0x3C:\n return parse_xlml(data.slice(i), o);\n\n default:\n break main;\n }\n }\n\n return PRN.to_workbook(data, o);\n }\n\n function read_plaintext_raw(data, o) {\n var str = \"\",\n bytes = firstbyte(data, o);\n\n switch (o.type) {\n case 'base64':\n str = Base64.decode(data);\n break;\n\n case 'binary':\n str = data;\n break;\n\n case 'buffer':\n str = data.toString('binary');\n break;\n\n case 'array':\n str = cc2str(data);\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n\n if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n return read_plaintext(str, o);\n }\n\n function read_utf16(data, o) {\n var d = data;\n if (o.type == 'base64') d = Base64.decode(d);\n d = cptable.utils.decode(1200, d.slice(2), 'str');\n o.type = \"binary\";\n return read_plaintext(d, o);\n }\n\n function bstrify(data) {\n return !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n }\n\n function read_prn(data, d, o, str) {\n if (str) {\n o.type = \"string\";\n return PRN.to_workbook(data, o);\n }\n\n return PRN.to_workbook(d, o);\n }\n\n function readSync(data, opts) {\n reset_cp();\n var o = opts || {};\n if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n var d = data,\n n = [0, 0, 0, 0],\n str = false;\n\n if (o.cellStyles) {\n o.cellNF = true;\n o.sheetStubs = true;\n }\n\n _ssfopts = {};\n if (o.dateNF) _ssfopts.dateNF = o.dateNF;\n if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n\n if (o.type == \"file\") {\n o.type = has_buf ? \"buffer\" : \"binary\";\n d = read_binary(data);\n }\n\n if (o.type == \"string\") {\n str = true;\n o.type = \"binary\";\n o.codepage = 65001;\n d = bstrify(data);\n }\n\n if (o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n // $FlowIgnore\n var ab = new ArrayBuffer(3),\n vu = new Uint8Array(ab);\n vu.foo = \"bar\"; // $FlowIgnore\n\n if (!vu.foo) {\n o = dup(o);\n o.type = 'array';\n return readSync(ab2a(d), o);\n }\n }\n\n switch ((n = firstbyte(d, o))[0]) {\n case 0xD0:\n if (n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o);\n break;\n\n case 0x09:\n if (n[1] <= 0x08) return parse_xlscfb(d, o);\n break;\n\n case 0x3C:\n return parse_xlml(d, o);\n\n case 0x49:\n if (n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n if (n[1] === 0x44) return read_wb_ID(d, o);\n break;\n\n case 0x54:\n if (n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o);\n break;\n\n case 0x50:\n return n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09 ? read_zip(d, o) : read_prn(data, d, o, str);\n\n case 0xEF:\n return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\n case 0xFF:\n if (n[1] === 0xFE) {\n return read_utf16(d, o);\n }\n\n break;\n\n case 0x00:\n if (n[1] === 0x00 && n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n break;\n\n case 0x03:\n case 0x83:\n case 0x8B:\n case 0x8C:\n return DBF.to_workbook(d, o);\n\n case 0x7B:\n if (n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o);\n break;\n\n case 0x0A:\n case 0x0D:\n case 0x20:\n return read_plaintext_raw(d, o);\n }\n\n if (DBF.versions.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n return read_prn(data, d, o, str);\n }\n\n function readFileSync(filename, opts) {\n var o = opts || {};\n o.type = 'file';\n return readSync(filename, o);\n }\n\n function write_cfb_ctr(cfb, o) {\n switch (o.type) {\n case \"base64\":\n case \"binary\":\n break;\n\n case \"buffer\":\n case \"array\":\n o.type = \"\";\n break;\n\n case \"file\":\n return write_dl(o.file, CFB.write(cfb, {\n type: has_buf ? 'buffer' : \"\"\n }));\n\n case \"string\":\n throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n\n return CFB.write(cfb, o);\n }\n\n function write_zip_type(wb, opts) {\n var o = dup(opts || {});\n var z = write_zip(wb, o);\n var oopts = {};\n if (o.compression) oopts.compression = 'DEFLATE';\n if (o.password) oopts.type = has_buf ? \"nodebuffer\" : \"string\";else switch (o.type) {\n case \"base64\":\n oopts.type = \"base64\";\n break;\n\n case \"binary\":\n oopts.type = \"string\";\n break;\n\n case \"string\":\n throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n case \"buffer\":\n case \"file\":\n oopts.type = has_buf ? \"nodebuffer\" : \"string\";\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n var out = z.FullPaths ? CFB.write(z, {\n fileType: \"zip\",\n type: {\n \"nodebuffer\": \"buffer\",\n \"string\": \"binary\"\n }[oopts.type] || oopts.type\n }) : z.generate(oopts);\n /*jshint -W083 */\n\n if (o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n\n /*jshint +W083 */\n\n if (o.type === \"file\") return write_dl(o.file, out);\n return o.type == \"string\" ? utf8read(out) : out;\n }\n\n function write_cfb_type(wb, opts) {\n var o = opts || {};\n var cfb = write_xlscfb(wb, o);\n return write_cfb_ctr(cfb, o);\n }\n\n function write_string_type(out, opts, bom) {\n if (!bom) bom = \"\";\n var o = bom + out;\n\n switch (opts.type) {\n case \"base64\":\n return Base64.encode(utf8write(o));\n\n case \"binary\":\n return utf8write(o);\n\n case \"string\":\n return out;\n\n case \"file\":\n return write_dl(opts.file, o, 'utf8');\n\n case \"buffer\":\n {\n if (has_buf) return Buffer_from(o, 'utf8');else return write_string_type(o, {\n type: 'binary'\n }).split(\"\").map(function (c) {\n return c.charCodeAt(0);\n });\n }\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function write_stxt_type(out, opts) {\n switch (opts.type) {\n case \"base64\":\n return Base64.encode(out);\n\n case \"binary\":\n return out;\n\n case \"string\":\n return out;\n\n /* override in sheet_to_txt */\n\n case \"file\":\n return write_dl(opts.file, out, 'binary');\n\n case \"buffer\":\n {\n if (has_buf) return Buffer_from(out, 'binary');else return out.split(\"\").map(function (c) {\n return c.charCodeAt(0);\n });\n }\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n /* TODO: test consistency */\n\n\n function write_binary_type(out, opts) {\n switch (opts.type) {\n case \"string\":\n case \"base64\":\n case \"binary\":\n var bstr = \"\"; // $FlowIgnore\n\n for (var i = 0; i < out.length; ++i) {\n bstr += String.fromCharCode(out[i]);\n }\n\n return opts.type == 'base64' ? Base64.encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\n case \"file\":\n return write_dl(opts.file, out);\n\n case \"buffer\":\n return out;\n\n default:\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n }\n\n function writeSync(wb, opts) {\n reset_cp();\n check_wb(wb);\n var o = dup(opts || {});\n\n if (o.cellStyles) {\n o.cellNF = true;\n o.sheetStubs = true;\n }\n\n if (o.type == \"array\") {\n o.type = \"binary\";\n var out = writeSync(wb, o);\n o.type = \"array\";\n return s2ab(out);\n }\n\n switch (o.bookType || 'xlsb') {\n case 'xml':\n case 'xlml':\n return write_string_type(write_xlml(wb, o), o);\n\n case 'slk':\n case 'sylk':\n return write_string_type(write_slk_str(wb, o), o);\n\n case 'htm':\n case 'html':\n return write_string_type(write_htm_str(wb, o), o);\n\n case 'txt':\n return write_stxt_type(write_txt_str(wb, o), o);\n\n case 'csv':\n return write_string_type(write_csv_str(wb, o), o, \"\\uFEFF\");\n\n case 'dif':\n return write_string_type(write_dif_str(wb, o), o);\n\n case 'dbf':\n return write_binary_type(write_dbf_buf(wb, o), o);\n\n case 'prn':\n return write_string_type(write_prn_str(wb, o), o);\n\n case 'rtf':\n return write_string_type(write_rtf_str(wb, o), o);\n\n case 'eth':\n return write_string_type(write_eth_str(wb, o), o);\n\n case 'fods':\n return write_string_type(write_ods(wb, o), o);\n\n case 'biff2':\n if (!o.biff) o.biff = 2;\n\n /* falls through */\n\n case 'biff3':\n if (!o.biff) o.biff = 3;\n\n /* falls through */\n\n case 'biff4':\n if (!o.biff) o.biff = 4;\n return write_binary_type(write_biff_buf(wb, o), o);\n\n case 'biff5':\n if (!o.biff) o.biff = 5;\n\n /* falls through */\n\n case 'biff8':\n case 'xla':\n case 'xls':\n if (!o.biff) o.biff = 8;\n return write_cfb_type(wb, o);\n\n case 'xlsx':\n case 'xlsm':\n case 'xlam':\n case 'xlsb':\n case 'ods':\n return write_zip_type(wb, o);\n\n default:\n throw new Error(\"Unrecognized bookType |\" + o.bookType + \"|\");\n }\n }\n\n function resolve_book_type(o) {\n if (o.bookType) return;\n var _BT = {\n \"xls\": \"biff8\",\n \"htm\": \"html\",\n \"slk\": \"sylk\",\n \"socialcalc\": \"eth\",\n \"Sh33tJS\": \"WTF\"\n };\n var ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n if (ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n o.bookType = _BT[o.bookType] || o.bookType;\n }\n\n function writeFileSync(wb, filename, opts) {\n var o = opts || {};\n o.type = 'file';\n o.file = filename;\n resolve_book_type(o);\n return writeSync(wb, o);\n }\n\n function writeFileAsync(filename, wb, opts, cb) {\n var o = opts || {};\n o.type = 'file';\n o.file = filename;\n resolve_book_type(o);\n o.type = 'buffer';\n var _cb = cb;\n if (!(_cb instanceof Function)) _cb = opts;\n return _fs.writeFile(filename, writeSync(wb, o), _cb);\n }\n\n function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {\n var rr = encode_row(R);\n var defval = o.defval,\n raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n var isempty = true;\n var row = header === 1 ? [] : {};\n\n if (header !== 1) {\n if (Object.defineProperty) try {\n Object.defineProperty(row, '__rowNum__', {\n value: R,\n enumerable: false\n });\n } catch (e) {\n row.__rowNum__ = R;\n } else row.__rowNum__ = R;\n }\n\n if (!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n var val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n if (val === undefined || val.t === undefined) {\n if (defval === undefined) continue;\n\n if (hdr[C] != null) {\n row[hdr[C]] = defval;\n }\n\n continue;\n }\n\n var v = val.v;\n\n switch (val.t) {\n case 'z':\n if (v == null) break;\n continue;\n\n case 'e':\n v = v == 0 ? null : void 0;\n break;\n\n case 's':\n case 'd':\n case 'b':\n case 'n':\n break;\n\n default:\n throw new Error('unrecognized type ' + val.t);\n }\n\n if (hdr[C] != null) {\n if (v == null) {\n if (val.t == \"e\" && v === null) row[hdr[C]] = null;else if (defval !== undefined) row[hdr[C]] = defval;else if (raw && v === null) row[hdr[C]] = null;else continue;\n } else {\n row[hdr[C]] = raw || o.rawNumbers && val.t == \"n\" ? v : format_cell(val, v, o);\n }\n\n if (v != null) isempty = false;\n }\n }\n return {\n row: row,\n isempty: isempty\n };\n }\n\n function sheet_to_json(sheet, opts) {\n if (sheet == null || sheet[\"!ref\"] == null) return [];\n var val = {\n t: 'n',\n v: 0\n },\n header = 0,\n offset = 1,\n hdr = [],\n v = 0,\n vv = \"\";\n var r = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var o = opts || {};\n var range = o.range != null ? o.range : sheet[\"!ref\"];\n if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;else if (o.header == null) header = 0;\n\n switch (typeof range) {\n case 'string':\n r = safe_decode_range(range);\n break;\n\n case 'number':\n r = safe_decode_range(sheet[\"!ref\"]);\n r.s.r = range;\n break;\n\n default:\n r = range;\n }\n\n if (header > 0) offset = 0;\n var rr = encode_row(r.s.r);\n var cols = [];\n var out = [];\n var outi = 0,\n counter = 0;\n var dense = Array.isArray(sheet);\n var R = r.s.r,\n C = 0,\n CC = 0;\n if (dense && !sheet[R]) sheet[R] = [];\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n cols[C] = encode_col(C);\n val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n switch (header) {\n case 1:\n hdr[C] = C - r.s.c;\n break;\n\n case 2:\n hdr[C] = cols[C];\n break;\n\n case 3:\n hdr[C] = o.header[C - r.s.c];\n break;\n\n default:\n if (val == null) val = {\n w: \"__EMPTY\",\n t: \"s\"\n };\n vv = v = format_cell(val, null, o);\n counter = 0;\n\n for (CC = 0; CC < hdr.length; ++CC) {\n if (hdr[CC] == vv) vv = v + \"_\" + ++counter;\n }\n\n hdr[C] = vv;\n }\n }\n\n for (R = r.s.r + offset; R <= r.e.r; ++R) {\n var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n }\n\n out.length = outi;\n return out;\n }\n\n var qreg = /\"/g;\n\n function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {\n var isempty = true;\n var row = [],\n txt = \"\",\n rr = encode_row(R);\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!cols[C]) continue;\n var val = o.dense ? (sheet[R] || [])[C] : sheet[cols[C] + rr];\n if (val == null) txt = \"\";else if (val.v != null) {\n isempty = false;\n txt = '' + (o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\n for (var i = 0, cc = 0; i !== txt.length; ++i) {\n if ((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {\n txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\";\n break;\n }\n }\n\n if (txt == \"ID\") txt = '\"ID\"';\n } else if (val.f != null && !val.F) {\n isempty = false;\n txt = '=' + val.f;\n if (txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n } else txt = \"\";\n /* NOTE: Excel CSV does not support array formulae */\n\n row.push(txt);\n }\n\n if (o.blankrows === false && isempty) return null;\n return row.join(FS);\n }\n\n function sheet_to_csv(sheet, opts) {\n var out = [];\n var o = opts == null ? {} : opts;\n if (sheet == null || sheet[\"!ref\"] == null) return \"\";\n var r = safe_decode_range(sheet[\"!ref\"]);\n var FS = o.FS !== undefined ? o.FS : \",\",\n fs = FS.charCodeAt(0);\n var RS = o.RS !== undefined ? o.RS : \"\\n\",\n rs = RS.charCodeAt(0);\n var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n var row = \"\",\n cols = [];\n o.dense = Array.isArray(sheet);\n var colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n }\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n if ((rowinfo[R] || {}).hidden) continue;\n row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\n if (row == null) {\n continue;\n }\n\n if (o.strip) row = row.replace(endregex, \"\");\n out.push(row + RS);\n }\n\n delete o.dense;\n return out.join(\"\");\n }\n\n function sheet_to_txt(sheet, opts) {\n if (!opts) opts = {};\n opts.FS = \"\\t\";\n opts.RS = \"\\n\";\n var s = sheet_to_csv(sheet, opts);\n if (typeof cptable == 'undefined' || opts.type == 'string') return s;\n var o = cptable.utils.encode(1200, s, 'str');\n return String.fromCharCode(255) + String.fromCharCode(254) + o;\n }\n\n function sheet_to_formulae(sheet) {\n var y = \"\",\n x,\n val = \"\";\n if (sheet == null || sheet[\"!ref\"] == null) return [];\n var r = safe_decode_range(sheet['!ref']),\n rr = \"\",\n cols = [],\n C;\n var cmds = [];\n var dense = Array.isArray(sheet);\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n cols[C] = encode_col(C);\n }\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n rr = encode_row(R);\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n y = cols[C] + rr;\n x = dense ? (sheet[R] || [])[C] : sheet[y];\n val = \"\";\n if (x === undefined) continue;else if (x.F != null) {\n y = x.F;\n if (!x.f) continue;\n val = x.f;\n if (y.indexOf(\":\") == -1) y = y + \":\" + y;\n }\n if (x.f != null) val = x.f;else if (x.t == 'z') continue;else if (x.t == 'n' && x.v != null) val = \"\" + x.v;else if (x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";else if (x.w !== undefined) val = \"'\" + x.w;else if (x.v === undefined) continue;else if (x.t == 's') val = \"'\" + x.v;else val = \"\" + x.v;\n cmds[cmds.length] = y + \"=\" + val;\n }\n }\n\n return cmds;\n }\n\n function sheet_add_json(_ws, js, opts) {\n var o = opts || {};\n var offset = +!o.skipHeader;\n var ws = _ws || {};\n var _R = 0,\n _C = 0;\n\n if (ws && o.origin != null) {\n if (typeof o.origin == 'number') _R = o.origin;else {\n var _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n _R = _origin.r;\n _C = _origin.c;\n }\n }\n\n var cell;\n var range = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: _C,\n r: _R + js.length - 1 + offset\n }\n };\n\n if (ws['!ref']) {\n var _range = safe_decode_range(ws['!ref']);\n\n range.e.c = Math.max(range.e.c, _range.e.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n\n if (_R == -1) {\n _R = _range.e.r + 1;\n range.e.r = _R + js.length - 1 + offset;\n }\n } else {\n if (_R == -1) {\n _R = 0;\n range.e.r = js.length - 1 + offset;\n }\n }\n\n var hdr = o.header || [],\n C = 0;\n js.forEach(function (JS, R) {\n keys(JS).forEach(function (k) {\n if ((C = hdr.indexOf(k)) == -1) hdr[C = hdr.length] = k;\n var v = JS[k];\n var t = 'z';\n var z = \"\";\n var ref = encode_cell({\n c: _C + C,\n r: _R + R + offset\n });\n cell = utils.sheet_get_cell(ws, ref);\n\n if (v && typeof v === 'object' && !(v instanceof Date)) {\n ws[ref] = v;\n } else {\n if (typeof v == 'number') t = 'n';else if (typeof v == 'boolean') t = 'b';else if (typeof v == 'string') t = 's';else if (v instanceof Date) {\n t = 'd';\n\n if (!o.cellDates) {\n t = 'n';\n v = datenum(v);\n }\n\n z = o.dateNF || SSF._table[14];\n } else if (v === null && o.nullError) {\n t = 'e';\n v = 0;\n }\n if (!cell) ws[ref] = cell = {\n t: t,\n v: v\n };else {\n cell.t = t;\n cell.v = v;\n delete cell.w;\n delete cell.R;\n if (z) cell.z = z;\n }\n if (z) cell.z = z;\n }\n });\n });\n range.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\n var __R = encode_row(_R);\n\n if (offset) for (C = 0; C < hdr.length; ++C) {\n ws[encode_col(C + _C) + __R] = {\n t: 's',\n v: hdr[C]\n };\n }\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function json_to_sheet(js, opts) {\n return sheet_add_json(null, js, opts);\n }\n\n var utils = {\n encode_col: encode_col,\n encode_row: encode_row,\n encode_cell: encode_cell,\n encode_range: encode_range,\n decode_col: decode_col,\n decode_row: decode_row,\n split_cell: split_cell,\n decode_cell: decode_cell,\n decode_range: decode_range,\n format_cell: format_cell,\n get_formulae: sheet_to_formulae,\n make_csv: sheet_to_csv,\n make_json: sheet_to_json,\n make_formulae: sheet_to_formulae,\n sheet_add_aoa: sheet_add_aoa,\n sheet_add_json: sheet_add_json,\n sheet_add_dom: sheet_add_dom,\n aoa_to_sheet: aoa_to_sheet,\n json_to_sheet: json_to_sheet,\n table_to_sheet: parse_dom_table,\n table_to_book: table_to_book,\n sheet_to_csv: sheet_to_csv,\n sheet_to_txt: sheet_to_txt,\n sheet_to_json: sheet_to_json,\n sheet_to_html: HTML_.from_sheet,\n sheet_to_formulae: sheet_to_formulae,\n sheet_to_row_object_array: sheet_to_json\n };\n\n (function (utils) {\n utils.consts = utils.consts || {};\n\n function add_consts(R\n /*Array*/\n ) {\n R.forEach(function (a) {\n utils.consts[a[0]] = a[1];\n });\n }\n\n function get_default(x, y, z) {\n return x[y] != null ? x[y] : x[y] = z;\n }\n /* get cell, creating a stub if necessary */\n\n\n function ws_get_cell_stub(ws, R, C) {\n /* A1 cell address */\n if (typeof R == \"string\") {\n /* dense */\n if (Array.isArray(ws)) {\n var RC = decode_cell(R);\n if (!ws[RC.r]) ws[RC.r] = [];\n return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {\n t: 'z'\n });\n }\n\n return ws[R] || (ws[R] = {\n t: 'z'\n });\n }\n /* cell address object */\n\n\n if (typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n /* R and C are 0-based indices */\n\n return ws_get_cell_stub(ws, encode_cell({\n r: R,\n c: C || 0\n }));\n }\n\n utils.sheet_get_cell = ws_get_cell_stub;\n /* find sheet index for given name / validate index */\n\n function wb_sheet_idx(wb, sh) {\n if (typeof sh == \"number\") {\n if (sh >= 0 && wb.SheetNames.length > sh) return sh;\n throw new Error(\"Cannot find sheet # \" + sh);\n } else if (typeof sh == \"string\") {\n var idx = wb.SheetNames.indexOf(sh);\n if (idx > -1) return idx;\n throw new Error(\"Cannot find sheet name |\" + sh + \"|\");\n } else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n }\n /* simple blank workbook object */\n\n\n utils.book_new = function () {\n return {\n SheetNames: [],\n Sheets: {}\n };\n };\n /* add a worksheet to the end of a given workbook */\n\n\n utils.book_append_sheet = function (wb, ws, name) {\n if (!name) for (var i = 1; i <= 0xFFFF; ++i, name = undefined) {\n if (wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n }\n if (!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n check_ws_name(name);\n if (wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n wb.SheetNames.push(name);\n wb.Sheets[name] = ws;\n };\n /* set sheet visibility (visible/hidden/very hidden) */\n\n\n utils.book_set_sheet_visibility = function (wb, sh, vis) {\n get_default(wb, \"Workbook\", {});\n get_default(wb.Workbook, \"Sheets\", []);\n var idx = wb_sheet_idx(wb, sh); // $FlowIgnore\n\n get_default(wb.Workbook.Sheets, idx, {});\n\n switch (vis) {\n case 0:\n case 1:\n case 2:\n break;\n\n default:\n throw new Error(\"Bad sheet visibility setting \" + vis);\n } // $FlowIgnore\n\n\n wb.Workbook.Sheets[idx].Hidden = vis;\n };\n\n add_consts([[\"SHEET_VISIBLE\", 0], [\"SHEET_HIDDEN\", 1], [\"SHEET_VERY_HIDDEN\", 2]]);\n /* set number format */\n\n utils.cell_set_number_format = function (cell, fmt) {\n cell.z = fmt;\n return cell;\n };\n /* set cell hyperlink */\n\n\n utils.cell_set_hyperlink = function (cell, target, tooltip) {\n if (!target) {\n delete cell.l;\n } else {\n cell.l = {\n Target: target\n };\n if (tooltip) cell.l.Tooltip = tooltip;\n }\n\n return cell;\n };\n\n utils.cell_set_internal_link = function (cell, range, tooltip) {\n return utils.cell_set_hyperlink(cell, \"#\" + range, tooltip);\n };\n /* add to cell comments */\n\n\n utils.cell_add_comment = function (cell, text, author) {\n if (!cell.c) cell.c = [];\n cell.c.push({\n t: text,\n a: author || \"SheetJS\"\n });\n };\n /* set array formula and flush related cells */\n\n\n utils.sheet_set_array_formula = function (ws, range, formula) {\n var rng = typeof range != \"string\" ? range : safe_decode_range(range);\n var rngstr = typeof range == \"string\" ? range : encode_range(range);\n\n for (var R = rng.s.r; R <= rng.e.r; ++R) {\n for (var C = rng.s.c; C <= rng.e.c; ++C) {\n var cell = ws_get_cell_stub(ws, R, C);\n cell.t = 'n';\n cell.F = rngstr;\n delete cell.v;\n if (R == rng.s.r && C == rng.s.c) cell.f = formula;\n }\n }\n\n return ws;\n };\n\n return utils;\n })(utils);\n\n if (has_buf && typeof require != 'undefined') (function () {\n var Readable = require('stream').Readable;\n\n var write_csv_stream = function write_csv_stream(sheet, opts) {\n var stream = Readable();\n var o = opts == null ? {} : opts;\n\n if (sheet == null || sheet[\"!ref\"] == null) {\n stream.push(null);\n return stream;\n }\n\n var r = safe_decode_range(sheet[\"!ref\"]);\n var FS = o.FS !== undefined ? o.FS : \",\",\n fs = FS.charCodeAt(0);\n var RS = o.RS !== undefined ? o.RS : \"\\n\",\n rs = RS.charCodeAt(0);\n var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n var row = \"\",\n cols = [];\n o.dense = Array.isArray(sheet);\n var colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n }\n\n var R = r.s.r;\n var BOM = false;\n\n stream._read = function () {\n if (!BOM) {\n BOM = true;\n return stream.push(\"\\uFEFF\");\n }\n\n while (R <= r.e.r) {\n ++R;\n if ((rowinfo[R - 1] || {}).hidden) continue;\n row = make_csv_row(sheet, r, R - 1, cols, fs, rs, FS, o);\n\n if (row != null) {\n if (o.strip) row = row.replace(endregex, \"\");\n stream.push(row + RS);\n break;\n }\n }\n\n if (R > r.e.r) return stream.push(null);\n };\n\n return stream;\n };\n\n var write_html_stream = function write_html_stream(ws, opts) {\n var stream = Readable();\n var o = opts || {};\n var header = o.header != null ? o.header : HTML_.BEGIN;\n var footer = o.footer != null ? o.footer : HTML_.END;\n stream.push(header);\n var r = decode_range(ws['!ref']);\n o.dense = Array.isArray(ws);\n stream.push(HTML_._preamble(ws, r, o));\n var R = r.s.r;\n var end = false;\n\n stream._read = function () {\n if (R > r.e.r) {\n if (!end) {\n end = true;\n stream.push(\"\" + footer);\n }\n\n return stream.push(null);\n }\n\n while (R <= r.e.r) {\n stream.push(HTML_._row(ws, r, R, o));\n ++R;\n break;\n }\n };\n\n return stream;\n };\n\n var write_json_stream = function write_json_stream(sheet, opts) {\n var stream = Readable({\n objectMode: true\n });\n\n if (sheet == null || sheet[\"!ref\"] == null) {\n stream.push(null);\n return stream;\n }\n\n var val = {\n t: 'n',\n v: 0\n },\n header = 0,\n offset = 1,\n hdr = [],\n v = 0,\n vv = \"\";\n var r = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var o = opts || {};\n var range = o.range != null ? o.range : sheet[\"!ref\"];\n if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;\n\n switch (typeof range) {\n case 'string':\n r = safe_decode_range(range);\n break;\n\n case 'number':\n r = safe_decode_range(sheet[\"!ref\"]);\n r.s.r = range;\n break;\n\n default:\n r = range;\n }\n\n if (header > 0) offset = 0;\n var rr = encode_row(r.s.r);\n var cols = [];\n var counter = 0;\n var dense = Array.isArray(sheet);\n var R = r.s.r,\n C = 0,\n CC = 0;\n if (dense && !sheet[R]) sheet[R] = [];\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n cols[C] = encode_col(C);\n val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n switch (header) {\n case 1:\n hdr[C] = C - r.s.c;\n break;\n\n case 2:\n hdr[C] = cols[C];\n break;\n\n case 3:\n hdr[C] = o.header[C - r.s.c];\n break;\n\n default:\n if (val == null) val = {\n w: \"__EMPTY\",\n t: \"s\"\n };\n vv = v = format_cell(val, null, o);\n counter = 0;\n\n for (CC = 0; CC < hdr.length; ++CC) {\n if (hdr[CC] == vv) vv = v + \"_\" + ++counter;\n }\n\n hdr[C] = vv;\n }\n }\n\n R = r.s.r + offset;\n\n stream._read = function () {\n if (R > r.e.r) return stream.push(null);\n\n while (R <= r.e.r) {\n //if ((rowinfo[R-1]||{}).hidden) continue;\n var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n ++R;\n\n if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n stream.push(row.row);\n break;\n }\n }\n };\n\n return stream;\n };\n\n XLSX.stream = {\n to_json: write_json_stream,\n to_html: write_html_stream,\n to_csv: write_csv_stream\n };\n })();\n if (typeof parse_xlscfb !== \"undefined\") XLSX.parse_xlscfb = parse_xlscfb;\n XLSX.parse_zip = parse_zip;\n XLSX.read = readSync; //xlsread\n\n XLSX.readFile = readFileSync; //readFile\n\n XLSX.readFileSync = readFileSync;\n XLSX.write = writeSync;\n XLSX.writeFile = writeFileSync;\n XLSX.writeFileSync = writeFileSync;\n XLSX.writeFileAsync = writeFileAsync;\n XLSX.utils = utils;\n XLSX.SSF = SSF;\n if (typeof CFB !== \"undefined\") XLSX.CFB = CFB;\n}\n/*global define */\n\n\nif (typeof exports !== 'undefined') make_xlsx_lib(exports);else if (typeof module !== 'undefined' && module.exports) make_xlsx_lib(module.exports);else if (typeof define === 'function' && define.amd) define('xlsx-dist', function () {\n if (!XLSX.version) make_xlsx_lib(XLSX);\n return XLSX;\n});else make_xlsx_lib(XLSX);\n/* NOTE: the following extra line is needed for \"Lightning Locker Service\" */\n\nif (typeof window !== 'undefined' && !window.XLSX) window.XLSX = XLSX;\n/*exported XLS, ODS */\n\nvar XLS = XLSX,\n ODS = XLSX;"],"names":["XLSX","version","current_codepage","current_ansi","cptable","g","window","VALID_ANSI","i","push","CS2CP","set_ansi","cp","indexOf","set_cp","reset_cp","char_codes","data","o","len","length","charCodeAt","debom","c1","c2","String","fromCharCode","join","utf16leread","slice","utf16beread","_getchar","x","_getansi","utils","decode","map","Base64","encode","input","c3","e1","e2","e3","e4","isNaN","charAt","replace","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","from","e","buf","enc","bind","alloc","n","allocUnsafe","new_raw_buf","Array","new_unsafe_buf","s2a","s","split","s2ab","ArrayBuffer","view","Uint8Array","a2s","isArray","c","ab2a","Error","bconcat","bufs","concat","apply","chr0","chr1","SSF","make_ssf","_strrev","fill","l","pad0","v","d","t","pad_","rpad_","p2_32","Math","pow","pad0r","round","pad0r1","pad0r2","isgeneral","days","months","init_table","table_fmt","default_map","defi","default_str","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","floor","q","parse_date_code","opts","b2","date","time","dow","dout","out","T","u","y","m","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","fix_hijri","basedate","dnthresh","getTime","base1904","datenum_local","epoch","getTimezoneOffset","_general_int","toString","general_fmt_num","trailing_zeroes_and_decimal","strip_decimal","mantissa_zeroes_and_decimal","exp_with_single_digit","V","log","LOG10E","toPrecision","w","toFixed","toExponential","small_exp","substr","large_exp","normalize_exp","toUpperCase","general_fmt","format","write_date","type","fmt","val","ss0","ss","tt","outl","commaify","j","_general_num","_general","write_num","pct1","write_num_exp","idx","match","period","ee","fakee","$$","$1","$2","$3","frac1","dec1","closeparen","phone","hashq","str","cc","rnd","dd","dec","_frac","write_num_flt","ffmt","write_num_cm","sfmt","mul","write_num_pct","r","ri","ff","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f1","carry","oa","min","max","lres","rres","flr","write_num_exp2","write_num_int","write_num_cm2","write_num_pct2","write_num_f2","lastIndexOf","split_fmt","in_str","_split","abstime","fmt_is_date","eval_fmt","flen","dt","lst","hr","toLowerCase","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","is_date","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","dateNF","table","f","lat","m1","m2","choose_fmt","load_entry","undefined","load","_table","get_table","load_table","tbl","CRC32","XLMLFormatMap","SSFImplicit","dateNFregex","signed_crc_table","Int32Array","crc32_bstr","bstr","seed","C","L","crc32_buf","crc32_buf_8","crc32_str","factory","_fs","CFB","fs","exports","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_extra_field","blob","prep_blob","flags","read_shift","sz","tgt","mtime","atime","ctime","mt","get_fs","parse","file","options","parse_zip","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","chk","HEADER_SIGNATURE","check_get_mver","header","shift","check_shifts","dir_cnt","sectors","nsectors","ceil","sectorify","sleuth_fat","sector_list","sl","chkd","buf_chain","modulus","k","seen","addr","__readInt32LE","nodes","__toBuffer","make_sector_list","name","ENDOFCHAIN","Paths","FileIndex","FullPaths","files","mini","minifat_store","pl","sector","namelen","__utf16le","color","R","clsid","state","start","size","ct","read_date","storage","get_sector_list","content","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","raw","entry","payload","MSSZ","new_buf","cnt","offset","__readUInt32LE","init_cfb","cfb","root","CLSID","nm","find","rebuild_cfb","seed_cfb","gc","_file","pop","now","HEADER_CLSID","sort","Z","namecmp","elt","_write","_opts","fileType","cdirs","method","compression","start_cd","fcnt","fp","fi","crcs","sz_cd","namebuf","outbuf","_deflateRawSync","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","use_typed_arrays","bitswap8","bit_swap_n","b","rev","read_bits_2","bl","h","read_bits_3","read_bits_5","read_bits_7","read_bits_n","realloc","copy","a","set","zero_fill_array","_deflateRaw","boff","off","build_tree","clens","cmap","MAX","maxlen","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","next_code","hcodes","h1","h2","_inflate","usz","woff","OL","max_len_1","max_len_2","bits","code","len_eb","dst_eb","dst","inflate","warn_or_throw","wrn","msg","console","error","csz","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_dos_date","crc32","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","_crc32","cfb_add","unsafe","fpath","cfb_gc","path","UCFullPaths","UCPaths","UCPath","read","readFileSync","read_file","write","writeFileSync","writeFile","cfb_new","cfb_del","splice","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","message","_inflateRaw","blobify","a2u","write_dl","fname","utf8write","IE_SaveFile","Blob","navigator","msSaveBlob","saveAs","URL","document","createElement","createObjectURL","url","chrome","downloads","download","revokeObjectURL","setTimeout","href","body","appendChild","click","removeChild","$","File","Folder","open","encoding","close","keys","ks","Object","o2","prototype","hasOwnProperty","call","evert_key","obj","key","K","evert","evert_num","datenum","refdate","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date","good_pd","parseDate","fixdate","cc2str","arr","dup","JSON","stringify","fuzzynum","Number","isFinite","NaN","test","wt","fuzzydate","getYear","jszip","safe_split_regex","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdata","getdatabin","safegetzipfile","zip","getzipfile","getzipdata","safe","getzipstr","zip_add_file","zip_new","zip_read","base64","resolve_path","result","target","step","JSZipSync","module","XML_HEADER","attregexg","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","skip_LC","z","eq","quot","trim","strip_ns","encregex","coderegex","encodings","rencoding","unescapexml","text","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","xlml_fixstr","entregex","entrepl","xlml_unfixstr","parsexmlbool","value","utf8read","orig","utf8readb","ww","corpus","utf8readc","mtcache","entities","vt_cache","matchtag","RegExp","htmldecode","vtregex","vtvregex","vtmregex","parseVector","matches","baseType","res","WTF","forEach","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","__lpp4","___lpp4","XMLNS","XLMLNS","___toBuffer","__readUInt16LE","___utf16le","__hexlify","___hexlify","__utf8","__readUInt8","___utf8","__lpstr","___lpstr","__cpstr","___cpstr","__lpwstr","___lpwstr","__double","___double","__8lpp4","___8lpp4","Infinity","read_double_le","is_buf","isBuffer","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","this","lens","__writeUInt16LE","WriteShift","cppayload","end","__writeUInt32LE","bs","av","LN2","write_double_le","__writeInt32LE","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","write_record","ba","XLSBRE","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","cstr","fix_row","encode_range_xls","encode_row","encode_col","decode_row","rowstr","row","decode_col","colstr","col","decode_cell","decode_range","encode_range","cs","ce","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","BErr","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","origin","_origin","_range","__R","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","O","_crypto","crypto","rc4","md5","hex","createHash","update","digest","make_offcrypto","parse_BrtCommentText","write_BrtCommentText","run","write_StrRun","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBShortCell","write_XLSBShortCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","write_BrtColor","auto","index","theme","nTS","tint","rgb","parse_ClipboardFormatOrString","VT_STRING","VT_CUSTOM","DocSummaryPIDDSI","VT_VECTOR","SummaryPIDSI","SpecialProperties","DocSummaryRE","SummaryRE","CountryEnum","XLSFillPattern","XLSIcv","RBErr","ct2type","CT_LIST","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","styles","type2ct","evert_arr","CT","CTYPE_XML_ROOT","xsd","xsi","CTYPE_DEFAULTS","rels","RELS","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","VBA","get_rels_path","parse_rels","currentFilePath","hash","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","RELS_EXTERN","add_rels","rId","relobj","targetmode","write_rdf_type","write_meta_ods","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","dc","dcterms","dcmitype","cp_doit","EXT_PROPS","load_props_pairs","HP","TOP","props","hp","parts","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","EXT_PROPS_XML_ROOT","vt","CUST_PROPS","custregex","CUST_PROPS_XML_ROOT","write_cust_props","pid","write_vt","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","Application","LastPrinted","CreatedDate","ModifiedDate","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","evert_XLMLDPM","xlml_set_prop","Props","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","parse_dictionary","CodePage","dict","parse_BLOB","bytes","ret","Size","parse_ClipboardData","parse_VtUnalignedString","cElements","parse_VtVecHeadingPairValue","parse_VtVecLpwstrValue","parse_VtVecUnalignedLpstrValue","write_TypedPropertyValue","write_FILETIME","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","XLSPSSkip","guess_property_type","write_PropertySet","entries","RE","hdr","piao","prop","pr","pio","unshift","pinfo","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","write_PropertySetStream","entries2","clsid2","ps0","ps1","parsenoop2","writebool","parseuint16","writeuint16","parseuint16a","parslurp","write_Bes","parse_ShortXLUnicodeString","cch","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","write_XLUnicodeRichExtendedString","xlstr","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_HyperlinkMoniker","extra","parse_URLMoniker","cAnti","preamble","ansiPath","parse_FileMoniker","parse_HyperlinkString","write_HyperlinkString","write_Hyperlink","hl","hashidx","F","Pretarget","parse_LongRGBA","parse_LongRGB","parse_XLSCell","ixfe","write_XLSCell","parse_XTI","parse_RkRec","parse_Ref8U","rwFirst","rwLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtSkip","FtTab","cf","fSharedNote","parse_BOF","BIFFVer","write_BOF","wb","bookType","write_BoundSheet8","hs","parse_DefaultRowHeight","miyRw","Unsynced","DyZero","ExAsc","ExDsc","write_Format","b5","parse_BIFF2Format","parse_Dimensions","write_XF","ixfeP","style","parse_BoolErr","parse_Bes","parse_XLHeaderFooter","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","sbcch","udfName","parse_AddinUdf","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","rgcb","parse_Rgce","parse_RgbExtra","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_Array","ref","parse_ArrayParsedFormula","parse_BIFF5OT","write_HLink","write_HLinkTooltip","TT","Tooltip","parse_ColInfo","cellStyles","colFirst","colLast","coldx","level","cchName","parse_Blank","parse_Scl","parse_String","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","fields","field","hend","sheetRows","dbf_to_aoa","_RLEN","to_workbook","to_sheet","from_sheet","aoa","sheet_to_json","headers","hcnt","coltypes","guess","_guess","hf","_f","hb","rout","_s","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","sylk_char_regex","sylk_char_fn","_","decode_sylk_char","newcc","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","record","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","rc_to_a1","shrbase","shift_formula_str","F_seen","hidden","wch","process_col","hpt","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_aoa","write_ws_cell_sylk","a1_to_rc","RS","rec","wpx","width2px","px2char","rows","px2pt","write_ws_rows_sylk","coord","DIF","dif_to_aoa_str","metadata","dif_to_sheet","dif_to_aoa","push_field","push_value","sheet_to_dif","topic","ETH","eth_to_sheet","eth_to_aoa","sep","meta","sheet_to_eth_data","PRN","set_text_arr","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","sepcc","startcc","_re","finish_cell","Y","datestr","timestr","dateNF_fix","cellText","cellNF","outer","prn_to_sheet_str","lines","prn_to_aoa_str","prn_to_sheet","firstbyte","WK_","lotus_to_workbook_buf","sidx","snames","refguess","Enum","WK1Enum","WK3Enum","qpro","lotushopper","Rn","vers","parse_cell","parse_LABEL","parse_cell_3","parse_NUMBER_17","v1","v2","parse_NUMBER_27","parse_rs","tregex","rpregex","parse_r","rpr","font","pass","shadow","outline","strike","uval","family","valign","parse_rpr","rregex","rend","rs","filter","rs_to_html","nlregex","r_to_html","terms","intro","outro","align","parse_rpr2","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","SST","straywsregex","write_sst_xml","sst","bookSST","xmlns","main","count","Count","uniqueCount","Unique","sitag","write_BrtSSTItem","write_sst_bin","write_BrtBeginSst","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceMapEntry","comps","parse_Primary","U","W","parse_TransformInfoHeader","ename","cmode","parse_EncryptionHeader","Flags","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","KeyData","xml","encryptedHmacKey","encryptedHmacValue","encs","uri","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordDecoded","PadArray","InitialCode","XorMatrix","XorRor","crypto_CreateXorArray_Method1","byte1","byte2","Byte","password","Temp","PasswordLastChar","PadIndex","XorKey","CurrentElement","Char","CreateXorKey_Method1","Index","ObfuscationArray","crypto_MakeXorDecryptor","XorArrayIndex","XorArray","Data","Value","crypto_DecryptData_Method1","parse_FilePassHeader","Info","EncryptionVersionInfo","EncryptedVerifier","EncryptedVerifierHash","parse_RC4Header","EncryptionHeader","EncryptionVerifier","parse_RC4CryptoHeader","RTF","rtf_to_sheet","rtf_to_sheet_str","rowtf","rtfre","last_index","exec","lastIndex","rgb2Hex","rgb_tint","hsl","G","H6","L2","rgb2HSL","hex2RGB","X","h6","hsl2RGB","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","delta","_MDW","coll","customWidth","pt","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","XLMLPatternTypeMap","cellXF_uint","cellXF_bool","parse_sty_xml","themes","NumberFmt","formatCode","parse_numFmts","Fonts","bold","italic","underline","condense","extend","vertAlign","scheme","indexed","icv","themeElements","clrScheme","parse_fonts","Fills","patternType","bgColor","fgColor","parse_fills","Borders","border","diagonalUp","diagonalDown","parse_borders","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","parse_cellXfs","STYLES_XML_ROOT","write_sty_xml","NF","write_numFmts","cellXfs","write_cellXfs","write_BrtFmt","write_BrtFont","grbit","write_FontFlags","sss","charset","STY","rev_XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","write_BrtXF","write_Blxf","parse_BrtBorder","write_BORDERS_bin","write_BrtBorder","write_STYLES_bin","xfId","builtinId","write_BrtStyle","write_TABLESTYLES_bin","defTableStyle","defPivotStyle","write_BrtBeginTableStyles","write_sty_bin","write_FMTS_bin","write_FONTS_bin","write_FILLS_bin","fontId","fillId","borderId","write_CELLSTYLEXFS_bin","write_CELLXFS_bin","write_DXFS_bin","THEME","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","themeltregex","parse_theme_xml","write_theme","parse_themeElements","Themes","themeXLSX","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_ColorTheme","parse_ExtProp","extType","parse_XFExtGradient","IMG","DRAW","_shapeid","write_comments_vml","csize","bbox","joinstyle","gradientshapeok","coordsize","fillopts","angle","fillparm","fillxml","fillcolor","strokecolor","on","CMNT","CMNT_XML_ROOT","write_comments_xml","iauthor","parse_BrtCommentAuthor","write_comments_bin","comment","write_BrtCommentAuthor","write_BrtBeginComment","VBAFMTS","DS","MS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrSpaceType","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","cols","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfCol","parse_PtgElfColS","parse_PtgElfColSV","parse_PtgElfColV","parse_PtgElfLel","parse_PtgElfRadical","parse_PtgElfRadicalLel","parse_PtgElfRadicalS","parse_PtgElfRw","parse_PtgElfRwV","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","tab","parsetab","Cetab","nameindex","rl","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","area","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitSemi","bitIf","bitGoto","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","quoteCharacters","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","sname","formula_quote_sheet_name","stringify_formula","stack","nameidx","last_sp","sp","fflen","argc","func","args","lbl","names","XLSXFutureFunctions","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_SharedParsedFormula","parse_Formula","parse_FormulaValue","cbf","parse_XLSCellParsedFormula","shared","write_Formula","os","o1","write_FormulaValue","o3","bf","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","ods_to_csf_3D","_ssfopts","WS","browser_has_Map","Map","get_sst_id","has","revarr","get","col_obj_w","outlineLevel","default_margins","margins","mode","defs","left","right","top","bottom","footer","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fmtid","fillid","raw_rgb","check_ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","sheetprregex2","svsregex","parse_ws_xml","data1","data2","mtch","sheetPr","parse_ws_xml_sheetpr","parse_ws_xml_sheetpr2","ridx","parse_ws_xml_dim","svs","Views","sviewregex","zoomScale","zoom","rightToLeft","RTL","parse_ws_xml_sheetviews","columns","seencol","coli","colm","colM","parse_ws_xml_cols","parse_ws_xml_data","afilter","parse_ws_xml_autofilter","merges","_merge","hlink","location","Rel","tooltip","rng","parse_ws_xml_hlinks","margin","parse_ws_xml_margins","tmpref","codeName","CodeName","sheetprot_deffalse","sheetprot_deftrue","write_ws_xml_cell","oldt","oldv","Strings","revStrings","cellregex","rowregex","isregex","refregex","match_v","match_f","sdata","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","rstarti","outa","ht","rslice","cellFormula","xlfn","___f","si","_tag","_r","WS_XML_ROOT","write_ws_xml","rdata","_drawing","needed","vbaraw","cname","Workbook","outlineprops","summaryBelow","summaryRight","above","write_ws_xml_sheetpr","sview","workbookViewId","write_ws_xml_sheetviews","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","write_ws_xml_cols","params","height","_cell","customHeight","write_ws_xml_data","write_ws_xml_protection","Names","Sheet","Ref","write_ws_xml_autofilter","write_ws_xml_merges","relc","ignoreEC","numberStoredAsText","sqref","write_row_header","ncolspan","lcs","caddr","first","last","write_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","parse_BrtShortReal","parse_BrtMergeCell","write_BrtMergeCell","BrtMarginKeys","write_ws_bin_cell","last_seen","ncell","write_BrtShortIsst","write_BrtCellIsst","write_BrtShortSt","write_BrtCellSt","write_BrtShortRk","write_BrtCellRk","write_BrtShortReal","write_BrtCellReal","write_BrtShortBool","write_BrtCellBool","write_BrtShortError","write_BrtCellError","write_BrtShortBlank","write_BrtCellBlank","write_MERGECELLS","write_BrtBeginMergeCells","write_COLINFOS","write_BrtColInfo","write_IGNOREECS","write_BrtCellIgnoreEC","write_HLINKS","locidx","write_BrtHLink","write_WSVIEWS2","write_BrtBeginWsView","write_SHEETPROTECT","write_BrtSheetProtection","write_ws_bin","write_BrtWsProp","cap","write_CELLTABLE","write_AUTOFILTER","write_BrtMargins","write_LEGACYDRAWING","parse_chart","csheet","nc","cache","num","nf","parse_Cache","CHART","CHARTEX","CS","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","defaults","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","badchars","check_ws_name","_good","check_wb","N","codes","cn","wbnsregex","WB_XML_ROOT","write_wb_xml","write_names","workbookPr","Hidden","sheetId","Comment","localSheetId","write_BrtBundleSh","iTabID","strRelID","parse_BrtFRTArchID$","ArchID","write_BOOKVIEWS","vistab","write_BrtBookView","write_wb_bin","write_BrtFileVersion","filterPrivacy","write_BrtWbProp","write_BUNDLESHS","parse_wb","R_n","Ptg","parse_wb_bin","dname","dnstart","parse_wb_xml","parse_ws","ai","af","aii","_d","relId","rfx","parse_ws_bin","parse_cs","parse_cs_bin","parse_cs_xml","parse_sty","parse_sty_bin","parse_sst","parse_sst_bin","parse_sst_xml","parse_cmnt","authors","author","parse_comments_bin","commentList","authtag","cmnttag","cm","authorId","guid","textMatch","parse_comments_xml","parse_cc","parse_cc_bin","parse_cc_xml","parse_xlink","parse_xlink_bin","write_wb","write_ws","write_sst","write_cmnt","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_set_custprop","Custprops","oval","safe_format_xlml","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","csty","sid","StyleID","interiors","Parent","UTC","Formula","ArrayRange","xlml_clean_comment","xlml_normalize","xlmlregex","parse_xlml_xml","opening","ishtml","_o","HTML_","tmp","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","wsprops","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","parse_xlml","fix_read_opts","write_props_xlml","xlml_write_docprops","BLACKLIST","xlml_write_custprops","write_name_xlml","write_ws_xlml_cell","attr","mi","_v","write_ws_xlml_row","write_ws_xlml","write_ws_xlml_names","skip","write_ws_xlml_table","objects","scenarios","selectLockedCells","selectUnlockedCells","write_ws_xlml_wsopts","write_xlml","write_sty_xlml","write_names_xlml","parse_compobj","AnsiUserType","AnsiClipboardFormat","parse_ClipboardFormatOrAnsiString","Reserved1","UnicodeClipboardFormat","parse_ClipboardFormatOrUnicodeString","Reserved2","slurp","insitu","XLSRecordEnum","ll","safe_format_xf","make_cell","parse_workbook","lastcell","cmnt","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","cell_valid","XFs","palette","get_rgb","addcell","line","file_depth","xfd","icvFore","icvBack","process_cell_style","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_Rn","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","RecordType","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","fDialog","fBelow","fRight","ExternCount","tmpri","biffguess","fakebs8","rknum","rkrec","_fr","_fc","_fe","_arraystart","isst","_j","_ixfe","b4idx","b2idx","cmo","lastobj","TxO","ImData","noteobj","ext","xfe","Encryption","Metadata","Country","PSCLSID","parse_xlscfb","CompObj","WorkbookP","bookVBA","newcfb","newpath","make_vba_xls","DSI","DocSummary","SI","Summary","HeadingPairs","TitlesOfParts","parse_xls_props","bookFiles","write_xlscfb","wbpath","write_biff_buf","Keys","DSEntries","SEntries","CEntries","CEntries2","write_xls_props","vba","fill_vba_xls","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","xColorType","bR","bG","bB","parse_BrtColor","ixfeParent","ifmt","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","fAlwaysCalc","display","idObj","stAuthor","parse_NoteSh","verificationBytes","verifier","parse_XORObfuscation","dyHeight","fl","Pos","Dim","CurTab","FirstTab","Selected","TabRatio","UserName","fts","parse_BIFF5Obj","parse_FtArray","ccv","rw","rkrecs","lastcol","ixfes","fStyle","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","fsxButton","parse_CellStyleXF","cmcs","ucnt","extsst","dsst","ctab","virtPath","rgst","texts","accel","parse_ControlInfo","cchText","sVer","displayName","targetFrameName","moniker","oleMoniker","fileTime","Loc","parse_Hyperlink","xnum","cUse","wzTooltip","cxfs","crc","cexts","cchComment","themeXML","parse_frtHeader","def","env","lcb","XLSRE","write_biff_rec","write_BIFF2Cell","write_ws_biff2_cell","write_BIFF2NUM","write_BIFF2BERR","write_BIFF2LABEL","write_biff2_buf","write_ws_biff2","write_FONTS_biff8","write_Font","write_ws_cols_biff8","write_ColInfo","write_ws_biff8_cell","write_Number","write_BoolErr","write_LabelSst","b8","write_Label","write_ws_biff8","_WB","_sheet","MAX_ROWS","guts","write_Guts","write_Dimensions","write_Window2","write_MergeCells","HL","write_ws_biff8_hlinks","write_FEAT","write_biff8_global","_sheets","_wb","writezeroes","write_WriteAccess","write_RRTabId","write_Window1","safe1904","write_FMTS_biff8","write_CELLXFS_biff8","write_Country","write_biff_continue","write_SST","blen","fix_write_opts","write_biff8_buf","html_to_sheet","mtch2","re","split_regex","hd","midx","colspan","rowspan","_t","make_html_row","editable","make_html_preamble","_BEGIN","_END","_row","BEGIN","END","_preamble","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","children","hasAttribute","getAttribute","innerHTML","Aelts","Aelti","parse_dom_table","element","get_computed_style","ownerDocument","defaultView","getComputedStyle","get_get_computed_style_function","getPropertyValue","number_formats","parse_content_xml","day","month","year","hours","minutes","seconds","era","quarter","sheetag","rowtag","fixed","NFtag","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","parse_ods","ods","FEtag","parse_manifest","write_styles_ods","write_content_ods","null_cell_xml","ROWS","_Fref","text_p","_tgt","fods","cidx","colobj","write_automatic_styles_ods","write_ods","manifest","rdf","write_rdf","write_manifest","write_obj_str","write_sheet_index","write_htm_str","write_csv_str","sheet_to_csv","write_slk_str","write_dif_str","write_prn_str","write_rtf_str","write_txt_str","sheet_to_txt","write_dbf_buf","write_eth_str","fix_opts_func","safe_parse_sheet","relsPath","sheetRels","stype","dfile","drelsp","draw","parse_drawing","chartp","crelsp","parse_ds","encoded","sheet_insert_comments","strip_front_slash","binname","zipentries","dir","links","coreprops","extprops","custprops","calcchains","drawings","TODO","ctext","Extension","ContentType","PartName","calcchain","parse_ct","parse_theme","link","propdata","parse_ext_props","toks","warn","parse_cust_props","deps","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","wbrels","safe_parse_wbrels","nmode","wsloop","snjseen","snj","Deps","Styles","bin","parse_xlsxcfb","parse_DataSpaceVersionInfo","dsm","parse_DataSpaceMap","seds","parse_DataSpaceDefinition","einfo","parse_EncryptionInfo","decrypt_agile","decrypt_std76","foo","vbafmt","write_core_props","_sn","_i","write_ext_props","wsrels","need_vml","rId1","write_sty","f1","f2","f3","write_ct","read_plaintext","read_prn","readSync","infile","read_binary","bstrify","ab","vu","read_cfb","OLD_WTF","read_wb_ID","read_zip","read_utf16","read_plaintext_raw","write_cfb_ctr","write_string_type","bom","write_binary_type","writeSync","write_stxt_type","write_cfb_type","oopts","generate","encrypt_agile","write_zip_type","resolve_book_type","make_json_row","defval","isempty","defineProperty","enumerable","__rowNum__","rawNumbers","outi","counter","CC","blankrows","qreg","make_csv_row","FS","txt","forceQuotes","endregex","skipHidden","strip","sheet_to_formulae","cmds","sheet_add_json","js","skipHeader","JS","sheet_get_cell","Readable","split_cell","get_formulae","make_csv","make_json","make_formulae","json_to_sheet","table_to_sheet","table_to_book","sheet_to_html","sheet_to_row_object_array","get_default","ws_get_cell_stub","RC","book_new","book_append_sheet","book_set_sheet_visibility","sh","vis","wb_sheet_idx","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","rngstr","stream","to_json","objectMode","_read","to_html","to_csv","BOM","readFile","writeFileAsync","_cb","Function","make_xlsx_lib"],"sourceRoot":""}