diff --git a/lib/xlsx-calc.js b/lib/xlsx-calc.js index e370017..a959282 100644 --- a/lib/xlsx-calc.js +++ b/lib/xlsx-calc.js @@ -1,2 +1,2 @@ -!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=8)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(4);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var u=r.split("!");a=i(u[0]),t=u[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var s,l=t.split(":"),c=parseInt(l[0].replace(/^[A-Z]+/,""),10)||0,h=l[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),s=parseInt(""==h?"500000":h,10);for(var p=n(l[0]),g=n(l[1]),v=[],w=c;w<=s;w++){var m=[];v.push(m);for(var A=p;A<=g;A++){var y=o(A)+w,x=a+"!"+y,E=e.formula_ref[x];if(E){if("new"===E.status)e.exec_formula(E);else if("working"===E.status){if(E.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(E)}"e"===f[y].t?m.push(f[y]):m.push(f[y].v)}else f[y]?"e"===f[y].t?m.push(f[y]):m.push(f[y].v):m.push(null)}}return v}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(6),i=t(12),a=t(3);let f,u;function s(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(u!==e.wb)return u=e.wb,f=null,s(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),s(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return s(e,t)?r(s(e,t),t):e}},function(r,e,t){"use strict";const n=t(4);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(9),a=t(7),f=t(17);var u=function(r){for(var e=a(r,i),t=e.length-1;t>=0;t--)i(e[t])};u.calculator=function(r){return new f(r,i)},u.set_fx=i.set_fx,u.exec_fx=i.exec_fx,u.col_str_2_int=o,u.int_2_col_str=n,u.import_functions=i.import_functions,u.import_raw_functions=i.import_raw_functions,u.xlsx_Fx=i.xlsx_Fx,u.localizeFunctions=i.localizeFunctions,u.XLSX_CALC=u,r.exports=u},function(r,e,t){"use strict";const n=t(10);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,u(e,{prefix:n+"."}))}}function u(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function s(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function l(r){s(r).update_cell_value()}f(t(15)),a(t(16)),l.set_fx=function(r,e){o[r]=e},l.exec_fx=function(r,e){return o[r].apply(this,e)},l.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},l.import_functions=f,l.import_raw_functions=a,l.build_expression=s,l.xlsx_Fx=o,r.exports=l},function(r,e,t){const n=t(11),o=t(0),i=t(13),a=t(14),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,u=e.xlsx_Fx||{},s=e.xlsx_raw_Fx||{},l=r.cell.f;"="==l[0]&&(l=l.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function w(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=v,h=""):"'"===e?(A=w,h="'"):"("===e?function(){var e,t=h.trim(),o=u[t],f=s[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,y=0;y0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),u(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),l("^",r,(function(r,e){return Math.pow(+r,+e)})),l("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),l("*",r,(function(r,e){return+r*+e})),l("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),l("&",r,(function(r,e){return""+r+e})),l("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),l(">=",r,(function(r,e){return r>=e})),l("<=",r,(function(r,e){return r<=e})),l("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!f(r)||!f(e))&&r!==e})),l("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!f(r)||!f(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r==e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e,t){"use strict";r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t,n={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43};try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){if("is_blank"===r.name&&void 0!==n[e.message])t=0;else{if("iserror"!==r.name||void 0===n[e.message])throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";let n={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":p,"_xlfn.NORM.INV":p,STDEV:function(){var r=l(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:h,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":c,"VAR.P":c,"_xlfn.COVARIANCE.P":s,"COVARIANCE.P":s,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:u,HLOOKUP:function(r,e,t,n){if(void 0===r||u(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e}};function o(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function i(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function v(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=n},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(0),a=t(3),f=t(6);r.exports={OFFSET:function(r,e,t,u,s){if(u=(u||new i(1)).calc(),s=(s||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var l=r.args[0],c=l.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),v=c.sheet_name+"!"+p+g;if(1===u&&1===s)return new f(v,l.formula).calc();var w=n(h+s-1);return new a(v+":"+(w+(g+u-1)),l.formula).calc()}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){return r.calc()?e.calc():void 0!==t&&t.calc()},AND:function(){for(var r=0;r=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); +!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=8)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(4);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var l=r.split("!");a=i(l[0]),t=l[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var u,s=t.split(":"),c=parseInt(s[0].replace(/^[A-Z]+/,""),10)||0,h=s[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),u=parseInt(""==h?"500000":h,10);for(var p=n(s[0]),g=n(s[1]),v=[],w=c;w<=u;w++){var m=[];v.push(m);for(var A=p;A<=g;A++){var y=o(A)+w,x=a+"!"+y,E=e.formula_ref[x];if(E){if("new"===E.status)e.exec_formula(E);else if("working"===E.status){if(E.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(E)}"e"===f[y].t?m.push(f[y]):m.push(f[y].v)}else f[y]?"e"===f[y].t?m.push(f[y]):m.push(f[y].v):m.push(null)}}return v}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(6),i=t(12),a=t(3);let f,l;function u(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(l!==e.wb)return l=e.wb,f=null,u(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),u(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return u(e,t)?r(u(e,t),t):e}},function(r,e,t){"use strict";const n=t(4);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(9),a=t(7),f=t(18);var l=function(r,e){for(var t=a(r,i),n=t.length-1;n>=0;n--)try{i(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};l.calculator=function(r){return new f(r,i)},l.set_fx=i.set_fx,l.exec_fx=i.exec_fx,l.col_str_2_int=o,l.int_2_col_str=n,l.import_functions=i.import_functions,l.import_raw_functions=i.import_raw_functions,l.xlsx_Fx=i.xlsx_Fx,l.localizeFunctions=i.localizeFunctions,l.XLSX_CALC=l,r.exports=l},function(r,e,t){"use strict";const n=t(10);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,l(e,{prefix:n+"."}))}}function l(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function u(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function s(r){u(r).update_cell_value()}f(t(16)),a(t(17)),s.set_fx=function(r,e){o[r]=e},s.exec_fx=function(r,e){return o[r].apply(this,e)},s.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},s.import_functions=f,s.import_raw_functions=a,s.build_expression=u,s.xlsx_Fx=o,r.exports=s},function(r,e,t){const n=t(11),o=t(0),i=t(14),a=t(15),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,l=e.xlsx_Fx||{},u=e.xlsx_raw_Fx||{},s=r.cell.f;"="==s[0]&&(s=s.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function w(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=v,h=""):"'"===e?(A=w,h="'"):"("===e?function(){var e,t=h.trim(),o=l[t],f=u[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,y=0;y=0;)e="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[newLetterIndex%26]+e,newLetterIndex=Math.floor(newLetterIndex/26)-1}function u(r){return"string"==typeof r?"s":"number"==typeof r?"n":void 0}function s(r){return null==r||""===r}function c(r){if("function"!=typeof r.calc)throw new Error("Undefined "+r)}function h(){return+t.formula.name.replace(/[^0-9]/g,"")}function p(r,e,t){for(var o=0;o0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),c(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),p("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),p("*",r,(function(r,e){return+r*+e})),p("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),p("&",r,(function(r,e){return""+r+e})),p("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),p(">=",r,(function(r,e){return r>=e})),p("<=",r,(function(r,e){return r<=e})),p("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!s(r)||!s(e))&&r!==e})),p("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!s(r)||!s(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e){r.exports=["FILTER"]},function(r,e,t){"use strict";r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t,n={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43};try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){if("is_blank"===r.name&&void 0!==n[e.message])t=0;else{if("iserror"!==r.name||void 0===n[e.message])throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";let n={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":p,"_xlfn.NORM.INV":p,STDEV:function(){var r=s(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:h,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":c,"VAR.P":c,"_xlfn.COVARIANCE.P":u,"COVARIANCE.P":u,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:l,HLOOKUP:function(r,e,t,n){if(void 0===r||l(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e}};function o(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function i(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function v(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=n},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(0),a=t(3),f=t(6);r.exports={OFFSET:function(r,e,t,l,u){if(l=(l||new i(1)).calc(),u=(u||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var s=r.args[0],c=s.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),v=c.sheet_name+"!"+p+g;if(1===l&&1===u)return new f(v,s.formula).calc();var w=n(h+u-1);return new a(v+":"+(w+(g+l-1)),s.formula).calc()}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){return r.calc()?e.calc():void 0!==t&&t.calc()},AND:function(){for(var r=0;r=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); //# sourceMappingURL=xlsx-calc.js.map \ No newline at end of file diff --git a/lib/xlsx-calc.js.map b/lib/xlsx-calc.js.map index 25de730..5d123cb 100644 --- a/lib/xlsx-calc.js.map +++ b/lib/xlsx-calc.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/RawValue.js","webpack:///./src/int_2_col_str.js","webpack:///./src/col_str_2_int.js","webpack:///./src/Range.js","webpack:///./src/getSanitizedSheetName.js","webpack:///./src/str_2_val.js","webpack:///./src/RefValue.js","webpack:///./src/find_all_cells_with_formulas.js","webpack:///./src/index.js","webpack:///./src/exec_formula.js","webpack:///./src/expression_builder.js","webpack:///./src/Exp.js","webpack:///./src/LazyValue.js","webpack:///./src/UserFnExecutor.js","webpack:///./src/UserRawFnExecutor.js","webpack:///./src/formulas.js","webpack:///./src/formulas-raw.js","webpack:///./src/Calculator.js"],"names":["root","factory","exports","module","define","amd","a","i","this","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","setValue","v","calc","modulo","dividend","columnName","guard","String","fromCharCode","col_str","colstr","replace","length","Math","pow","charCodeAt","col_str_2_int","int_2_col_str","getSanitizedSheetName","str_expression","formula","range_expression","sheet_name","sheet","indexOf","aux","split","wb","Sheets","max_row","arr","min_row","parseInt","str_max_row","min_col","max_col","matrix","row","push","j","cell_name","cell_full_name","formula_ref","status","exec_formula","cell","f","includes","Error","quotedMatch","match","RawValue","RefValue","LazyValue","Range","definedNames","getDefinedName","buffer","Workbook","Names","keys","values","forEach","Name","Ref","str_2_val","isNaN","trim","inner","substr","self","parseRef","resolved_ref","ref_cell","console","log","w","cells","find_all_cells_with_formulas","Calculator","mymodule","workbook","formulas","calculator","set_fx","exec_fx","import_functions","import_raw_functions","xlsx_Fx","localizeFunctions","XLSX_CALC","expression_builder","xlsx_raw_Fx","functions","opts","formulajs","prefix","obj","override","my_assign","dest","source","JSON","parse","stringify","k","build_expression","update_cell_value","fn","args","apply","dic","newName","oldName","Exp","UserFnExecutor","UserRawFnExecutor","common_operations","root_exp","str_formula","exp_obj","was_string","fn_stack","exp","string","char","state","start","single_quote","stack","trim_buffer","special","special_raw","ini_parentheses","pop","add_operation","exp_id","last_arg","isEmpty","checkVariable","getCurrentCellIndex","exec","op","splice","b","Array","isArray","e","id","errorValues","undefined","message","concat","Date","exec_minus","getTime","toLowerCase","user_function","result","map","floor","abs","sqrt","return_index","range_lookup","val","max","arguments","arg","col","sum","min","rate_per_period","number_of_payments","present_value","future_value","type","q","counta","range","guess","guest","NPV","normsInv","array","getArrayOfNumbers","_mean","reduce","mean","dev","itm","avg","E","var_p","covariance_p","is_blank","needle","table","index","exactmatch","searchingFor","row_num","column_num","lookupValue","matchType","match_exactly_string","match_exactly_non_string","match_less_than_or_equal","match_greater_than_or_equal","parseNumber","parseFloat","consistentSizeRanges","matrixArray","getRowCount","getColCount","rowCount","colCount","product","_i","_ij","arrays","x","today","setHours","hours","minutes","seconds","date","getDate","day","getMonth","month","getFullYear","year","text","number","substring","cond","decimalPlaces","round","roundMeasure","inv_n","avg_a","avg_b","sa","sb","elementToSum","sumResult","slice","elt","toString","option","old_text","new_text","occurrence","RegExp","significance","ceil","indexValue","idx","average","mu","sigma","Infinity","cell_ref","rows","columns","height","width","ref_value","parsed_ref","end_range_col","onerrorvalue","condition","_then","_else","expressionWithRange","colRow","colNumber","rowNumber","matrixRow","destinationColumn","destinationRow","expressions","variables","calcNames","var_name","variable","setVarOfExpression","vars","item","getRef","ref_name"],"mappings":"CAAA,SAA2CA,EAAMC,GAChD,GAAsB,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,SACb,GAAqB,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,OACP,CACJ,IAAIK,EAAIL,IACR,IAAI,IAAIM,KAAKD,GAAuB,iBAAZJ,QAAuBA,QAAUF,GAAMO,GAAKD,EAAEC,IAPxE,CASGC,MAAM,WACT,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUT,QAGnC,IAAIC,EAASM,EAAiBE,GAAY,CACzCJ,EAAGI,EACHC,GAAG,EACHV,QAAS,IAUV,OANAW,EAAQF,GAAUG,KAAKX,EAAOD,QAASC,EAAQA,EAAOD,QAASQ,GAG/DP,EAAOS,GAAI,EAGJT,EAAOD,QA0Df,OArDAQ,EAAoBK,EAAIF,EAGxBH,EAAoBM,EAAIP,EAGxBC,EAAoBO,EAAI,SAASf,EAASgB,EAAMC,GAC3CT,EAAoBU,EAAElB,EAASgB,IAClCG,OAAOC,eAAepB,EAASgB,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhET,EAAoBe,EAAI,SAASvB,GACX,oBAAXwB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAepB,EAASwB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAepB,EAAS,aAAc,CAAE0B,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBO,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAASjC,GAChC,IAAIgB,EAAShB,GAAUA,EAAO4B,WAC7B,WAAwB,OAAO5B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAO,EAAoBO,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRT,EAAoBU,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG5B,EAAoB+B,EAAI,GAIjB/B,EAAoBA,EAAoBgC,EAAI,G,+BChFrDvC,EAAOD,QAAU,SAAkB0B,GAC/BpB,KAAKmC,SAAW,SAASC,GACrBhB,EAAQgB,GAEZpC,KAAKqC,KAAO,WACR,OAAOjB,K,6BCLfzB,EAAOD,QAAU,SAAuBkC,GAKpC,IAJA,IAEIU,EAFAC,EAAWX,EAAI,EACfY,EAAa,GAEbC,EAAQ,GACLF,EAAW,GAAKE,KACnBH,GAAUC,EAAW,GAAK,GAC1BC,EAAaE,OAAOC,aAAaL,EAAS,IAAME,EAChDD,GAAYA,EAAWD,EAAS,GAAK,GAEzC,OAAOE,I,6BCVX7C,EAAOD,QAAU,SAAuBkD,GAGpC,IAFA,IAAI3B,EAAI,EACJ4B,EAASD,EAAQE,QAAQ,UAAW,IAC/B/C,EAAI8C,EAAOE,OAAQhD,KACxBkB,GAAK+B,KAAKC,IAAI,GAAIJ,EAAOE,OAAShD,EAAI,IAAM8C,EAAOK,WAAWnD,GAAK,IAEvE,OAAOkB,EAAI,I,6BCNf,MAAMkC,EAAgB,EAAQ,GACxBC,EAAgB,EAAQ,GACxBC,EAAwB,EAAQ,GAEtC1D,EAAOD,QAAU,SAAe4D,EAAgBC,GAC5CvD,KAAKqC,KAAO,WACR,IAAImB,EAAkBC,EAAYC,EAClC,IAAoC,GAAhCJ,EAAeK,QAAQ,KAAY,CACnC,IAAIC,EAAMN,EAAeO,MAAM,KAC/BJ,EAAaJ,EAAsBO,EAAI,IACvCJ,EAAmBI,EAAI,QAGvBH,EAAaF,EAAQE,WACrBD,EAAmBF,EAEvBI,EAAQH,EAAQO,GAAGC,OAAON,GAC1B,IAGIO,EAHAC,EAAMT,EAAiBK,MAAM,KAC7BK,EAAUC,SAASF,EAAI,GAAGnB,QAAQ,UAAW,IAAK,KAAO,EACzDsB,EAAcH,EAAI,GAAGnB,QAAQ,UAAW,IAExB,KAAhBsB,GAAsBV,EAAM,UAC5BU,EAAcV,EAAM,QAAQG,MAAM,KAAK,GAAGf,QAAQ,UAAW,KAGjEkB,EAAUG,SAAwB,IAAfC,EAAoB,SAAWA,EAAa,IAI/D,IAHA,IAAIC,EAAUlB,EAAcc,EAAI,IAC5BK,EAAUnB,EAAcc,EAAI,IAC5BM,EAAS,GACJxE,EAAImE,EAASnE,GAAKiE,EAASjE,IAAK,CACrC,IAAIyE,EAAM,GACVD,EAAOE,KAAKD,GACZ,IAAK,IAAIE,EAAIL,EAASK,GAAKJ,EAASI,IAAK,CACrC,IAAIC,EAAYvB,EAAcsB,GAAK3E,EAC/B6E,EAAiBnB,EAAa,IAAMkB,EACpCE,EAActB,EAAQsB,YAAYD,GACtC,GAAIC,EAAa,CACb,GAA2B,QAAvBA,EAAYC,OACZvB,EAAQwB,aAAaF,QAClB,GAA2B,YAAvBA,EAAYC,OAAsB,CACzC,GAAID,EAAYG,KAAKC,EAAEC,SAAS3B,EAAQ7C,MACpC,MAAM,IAAIyE,MAAM,gBAEpB5B,EAAQwB,aAAaF,GAEE,MAAvBnB,EAAMiB,GAAWtD,EACjBmD,EAAIC,KAAKf,EAAMiB,IAGfH,EAAIC,KAAKf,EAAMiB,GAAWvC,QAGzBsB,EAAMiB,GACgB,MAAvBjB,EAAMiB,GAAWtD,EACjBmD,EAAIC,KAAKf,EAAMiB,IAGfH,EAAIC,KAAKf,EAAMiB,GAAWvC,GAI9BoC,EAAIC,KAAK,OAIrB,OAAOF,K,6BCjEf5E,EAAOD,QAAU,SAA+B+D,GAC5C,IAAI2B,EAAc3B,EAAW4B,MAAM,YACnC,OAAID,EACOA,EAAY,GAGZ3B,I,gBCRf,MAAM6B,EAAW,EAAQ,GACnBC,EAAW,EAAQ,GACnBC,EAAY,EAAQ,IACpBC,EAAQ,EAAQ,GAItB,IAAIC,EAAc5B,EAClB,SAAS6B,EAAeC,EAAQrC,GAC5B,IAAMA,EAAQO,GAAG+B,WAAYtC,EAAQO,GAAG+B,SAASC,MAC7C,OAAO,KAEX,GAAIhC,IAAOP,EAAQO,GAGf,OAFAA,EAAKP,EAAQO,GACb4B,EAAe,KACRC,EAAeC,EAAQrC,GAElC,GAAImC,EACA,OAAOA,EAAaE,GAExB,MAAMG,EAAOlF,OAAOmF,OAAOzC,EAAQO,GAAG+B,SAASC,OAC/C,OAAoB,IAAhBC,EAAKhD,QAGT2C,EAAe,GACfK,EAAKE,QAAQ,EAAGC,OAAMC,UACbD,EAAKhB,SAAS,OACfQ,EAAaQ,GAAQC,KAItBR,EAAeC,EAAQrC,SAV9B,EAaJ5D,EAAOD,QAAU,SAAS0G,EAAUR,EAAQrC,GACxC,IAAK8C,MAAMT,GACP,OAAO,IAAIN,GAAUM,GAEzB,GAAe,SAAXA,EACA,OAAO,IAAIN,EAAS,GAExB,GAAsB,iBAAXM,EACP,OAAOA,EAKX,IAFAA,EAASA,EAAOU,OAAOxD,QAAQ,MAAO,KAE3BuC,MAAM,+BACb,OAAO,IAAII,EAAMG,EAAQrC,GAE7B,GAAIqC,EAAOP,MAAM,qCACb,OAAO,IAAII,EAAMG,EAAQrC,GAE7B,GAAIqC,EAAOP,MAAM,mBACb,OAAO,IAAII,EAAMG,EAAQrC,GAE7B,GAAIqC,EAAOP,MAAM,yBACb,OAAO,IAAII,EAAMG,EAAQrC,GAE7B,GAAIqC,EAAOP,MAAM,kBACb,OAAO,IAAIE,EAASK,EAAQrC,GAEhC,GAAIqC,EAAOP,MAAM,wBACb,OAAO,IAAIE,EAASK,EAAQrC,GAEhC,GAAIqC,EAAOP,MAAM,MAAO,CACpB,IAAIkB,EAAQH,EAAUR,EAAOY,OAAO,EAAGZ,EAAO7C,OAAO,GAAIQ,GACzD,OAAO,IAAIiC,EAAU,IAAMe,EAAMlE,OAAS,KAE9C,OAAIsD,EAAeC,EAAQrC,GAChB6C,EAAUT,EAAeC,EAAQrC,GAAUA,GAE/CqC,I,6BCtEX,MAAMvC,EAAwB,EAAQ,GAEtC1D,EAAOD,QAAU,SAAkB4D,EAAgBC,GAC/C,IAAIkD,EAAOzG,KACXA,KAAKU,KAAO,WACZV,KAAKsD,eAAiBA,EACtBtD,KAAKuD,QAAUA,EAEfkD,EAAKC,SAAW,WACZ,IAAIhD,EAAOD,EAAYkB,EACvB,IAAoC,GAAhCrB,EAAeK,QAAQ,KAAY,CACnC,IAAIC,EAAMN,EAAeO,MAAM,KAC/BJ,EAAaJ,EAAsBO,EAAI,IACvCF,EAAQH,EAAQO,GAAGC,OAAON,GAC1BkB,EAAYf,EAAI,QAGhBF,EAAQH,EAAQG,MAChBD,EAAaF,EAAQE,WACrBkB,EAAYrB,EAEhB,IAAKI,EACD,MAAMyB,MAAM,SAAW1B,EAAa,eAGxC,MAAO,CACHC,MAAOA,EACPD,WAAYA,EACZkB,UAAWA,EACXC,eALanB,EAAa,IAAMkB,IASxC3E,KAAKqC,KAAO,WACR,IAAIsE,EAAeF,EAAKC,WACpBhD,EAAQiD,EAAajD,MACrBiB,EAAYgC,EAAahC,UACzBC,EAAiB+B,EAAa/B,eAC9BgC,EAAWlD,EAAMiB,GACrB,IAAKiC,EACD,OAAO,KAEX,IAAI/B,EAActB,EAAQsB,YAAYD,GACtC,IAAIC,EAwBC,CACD,GAAmB,MAAf+B,EAASvF,EAET,MADAwF,QAAQC,IAAI,kCAAmCnC,GACzC,IAAIQ,MAAMyB,EAASG,GAE7B,OAAOH,EAASxE,EA5BhB,GAA2B,QAAvByC,EAAYC,OAAkB,CAE9B,GADAvB,EAAQwB,aAAaF,GACF,MAAf+B,EAASvF,EAET,MADAwF,QAAQC,IAAI,mCAAoClC,EAAgBgC,EAASG,GACnE,IAAI5B,MAAMyB,EAASG,GAE7B,OAAOH,EAASxE,EAEf,GAA2B,YAAvByC,EAAYC,OAAsB,CACvC,GAAI8B,EAAS3B,EAAEC,SAAS3B,EAAQ7C,MAC5B,MAAM,IAAIyE,MAAM,gBAGpB,OADA5B,EAAQwB,aAAaF,GACd7E,KAAKqC,OAEX,GAA2B,SAAvBwC,EAAYC,OAAmB,CACpC,GAAmB,MAAf8B,EAASvF,EAET,MADAwF,QAAQC,IAAI,qCAAsClC,EAAgBgC,EAASG,GACrE,IAAI5B,MAAMyB,EAASG,GAE7B,OAAOH,EAASxE,M,6BChEhCzC,EAAOD,QAAU,SAAsCoE,EAAIiB,GACvD,IAAIF,EAAc,GACdmC,EAAQ,GACZ,IAAK,IAAIvD,KAAcK,EAAGC,OAAQ,CAC9B,IAAIL,EAAQI,EAAGC,OAAON,GACtB,IAAK,IAAIkB,KAAajB,EAClB,GAAIA,EAAMiB,IAAcjB,EAAMiB,GAAWM,EAAG,CACxC,IAAI1B,EAAUsB,EAAYpB,EAAa,IAAMkB,GAAa,CACtDE,YAAaA,EACbf,GAAIA,EACJJ,MAAOA,EACPD,WAAYA,EACZuB,KAAMtB,EAAMiB,GACZjE,KAAMiE,EACNG,OAAQ,MACRC,aAAcA,GAElBiC,EAAMvC,KAAKlB,IAIvB,OAAOyD,I,6BCrBX,MAAM5D,EAAgB,EAAQ,GACxBD,EAAgB,EAAQ,GACxB4B,EAAe,EAAQ,GACvBkC,EAA+B,EAAQ,GACvCC,EAAa,EAAQ,IAE3B,IAAIC,EAAW,SAASC,GAEpB,IADA,IAAIC,EAAWJ,EAA6BG,EAAUrC,GAC7ChF,EAAIsH,EAAStE,OAAS,EAAGhD,GAAK,EAAGA,IACtCgF,EAAasC,EAAStH,KAI9BoH,EAASG,WAAa,SAAoBF,GACtC,OAAO,IAAIF,EAAWE,EAAUrC,IAGpCoC,EAASI,OAASxC,EAAawC,OAC/BJ,EAASK,QAAUzC,EAAayC,QAChCL,EAAShE,cAAgBA,EACzBgE,EAAS/D,cAAgBA,EACzB+D,EAASM,iBAAmB1C,EAAa0C,iBACzCN,EAASO,qBAAuB3C,EAAa2C,qBAC7CP,EAASQ,QAAU5C,EAAa4C,QAChCR,EAASS,kBAAoB7C,EAAa6C,kBAE1CT,EAASU,UAAYV,EAErBxH,EAAOD,QAAUyH,G,6BC5BjB,MAAMW,EAAqB,EAAQ,IAEnC,IAAIH,EAAU,GACVI,EAAc,GAKlB,SAASL,EAAqBM,EAAWC,GACrC,IAAK,IAAIvG,KAAOsG,EACZD,EAAYrG,GAAOsG,EAAUtG,GAIrC,SAAS+F,EAAiBS,EAAWD,GAEjC,IAAIE,GADJF,EAAOA,GAAQ,IACGE,QAAU,GAC5B,IAAK,IAAIzG,KAAOwG,EAAW,CACvB,IAAIE,EAAMF,EAAUxG,GACA,mBAAV,GACFuG,EAAKI,UAAaV,EAAQQ,EAASzG,KACnCiG,EAAQQ,EAASzG,GAAO0G,GAQP,iBAAV,GACXX,EAAiBW,EAAKE,EAAUL,EAAM,CAAEE,OAAQzG,EAAM,QAKlE,SAAS4G,EAAUC,EAAMC,GACrB,IAAIJ,EAAMK,KAAKC,MAAMD,KAAKE,UAAUJ,IACpC,IAAK,IAAIK,KAAKJ,EACVJ,EAAIQ,GAAKJ,EAAOI,GAEpB,OAAOR,EAGX,SAASS,EAAiBtF,GACtB,OAAOuE,EAAmBvE,EAAS,CAACoE,QAASA,EAASI,YAAaA,IAGvE,SAAShD,EAAaxB,GACHsF,EAAiBtF,GACvBuF,oBA5CbrB,EAAiB,EAAQ,KACzBC,EAAqB,EAAQ,KA8C7B3C,EAAawC,OAAS,SAAgB7G,EAAMqI,GACxCpB,EAAQjH,GAAQqI,GAGpBhE,EAAayC,QAAU,SAAiB9G,EAAMsI,GAC1C,OAAOrB,EAAQjH,GAAMuI,MAAMjJ,KAAMgJ,IAGrCjE,EAAa6C,kBAAoB,SAASsB,GACtC,IAAK,IAAIC,KAAWD,EAAK,CACrB,IAAIE,EAAUF,EAAIC,GACdxB,EAAQyB,KACRzB,EAAQwB,GAAWxB,EAAQyB,IAE3BrB,EAAYqB,KACZrB,EAAYoB,GAAWpB,EAAYqB,MAK/CrE,EAAa0C,iBAAmBA,EAChC1C,EAAa2C,qBAAuBA,EACpC3C,EAAa8D,iBAAmBA,EAChC9D,EAAa4C,QAAUA,EACvBhI,EAAOD,QAAUqF,G,gBC9EjB,MAAMsE,EAAM,EAAQ,IACd/D,EAAW,EAAQ,GACnBgE,EAAiB,EAAQ,IACzBC,EAAoB,EAAQ,IAC5BC,EAAoB,CACtB,IAAK,WACL,IAAK,OACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,KACL,IAAK,KACL,IAAK,MAGT7J,EAAOD,QAAU,SAA4B6D,EAAS0E,GAClD1E,EAAQuB,OAAS,UAEjB,IAGI2E,EAHA9B,EAAUM,EAAKN,SAAW,GAC1BI,EAAcE,EAAKF,aAAe,GAGlC2B,EAAcnG,EAAQyB,KAAKC,EACT,KAAlByE,EAAY,KACZA,EAAcA,EAAYlD,OAAO,IAErC,IAAImD,EAAUF,EAAW,IAAIJ,EAAI9F,GAC7BqC,EAAS,GACTgE,GAAa,EACbC,EAAW,CAAC,CACZC,IAAKH,IAMT,SAASI,EAAOC,GACC,MAATA,GACAL,EAAQlF,KAAK,IAAIa,EAASM,IAC1BgE,GAAa,EACbhE,EAAS,GACTqE,EAAQC,GAERtE,GAAUoE,EAIlB,SAASG,EAAaH,GACL,MAATA,IACAC,EAAQC,GAEZtE,GAAUoE,EAmDd,SAASE,EAAMF,GAzBf,IACQ5H,EAAGgI,EAyBM,MAATJ,GACAC,EAAQF,EACRnE,EAAS,IACO,MAAToE,GACPC,EAAQE,EACRvE,EAAS,KACO,MAAToE,EAvDf,WACI,IAAIpJ,EAAGyJ,EAAczE,EAAOU,OACxBgE,EAAU3C,EAAQ0C,GAClBE,EAAcxC,EAAYsC,GAC9B,GAAIE,EACAD,EAAU,IAAIf,EAAkBgB,EAAahH,QAE5C,GAAI+G,EACLA,EAAU,IAAIhB,EAAegB,EAAS/G,QAErC,GAAI8G,EAEL,MAAM,IAAIlF,MAAM,IAAM5B,EAAQE,WAAa,KAAOF,EAAQ7C,KAAO,cAAgBkF,EAAS,cAE9FhF,EAAI,IAAIyI,EAAI9F,GACZsG,EAASpF,KAAK,CACVqF,IAAKlJ,EACL0J,QAASA,IAEbX,EAAU/I,EACVgF,EAAS,GAoCL4E,GACgB,MAATR,GAjCJI,EAAQP,EAASY,OACxBd,EAAUS,EAAMN,KACRrF,KAAKmB,GACbxD,EAAIuH,EACJ/D,EAAS,GACT+D,EAAUE,EAASA,EAAS9G,OAAS,GAAG+G,IACpCM,EAAME,SACNF,EAAME,QAAQ7F,KAAKrC,GACnBuH,EAAQlF,KAAK2F,EAAME,UAGnBX,EAAQlF,KAAKrC,IAwBNoH,EAAkBQ,GApBjC,SAAuBA,GACdJ,GACDD,EAAQlF,KAAKmB,GAEjBgE,GAAa,EACbD,EAAQlF,KAAKuF,GACbpE,EAAS,GAeL8E,CAAcV,GACE,MAATA,GAAgBH,EAASA,EAAS9G,OAAS,GAAGuH,SACrDV,GAAa,EACbC,EAASA,EAAS9G,OAAS,GAAG+G,IAAIrF,KAAKmB,GACvCiE,EAASA,EAAS9G,OAAS,GAAGuH,QAAQ7F,KAAKoF,EAASA,EAAS9G,OAAS,GAAG+G,KACzED,EAASA,EAAS9G,OAAS,GAAG+G,IAAMH,EAAU,IAAIN,EAAI9F,GACtDqC,EAAS,IACO,MAAToE,IACPpE,GAAUoE,GAMlB,IAFA,IAAIC,EAAQC,EAEHnK,EAAI,EAAGA,EAAI2J,EAAY3G,OAAQhD,IACpCkK,EAAMP,EAAY3J,IAGtB,OADA0J,EAAShF,KAAKmB,GACP6D,I,6BCnIX,MAAMnE,EAAW,EAAQ,GACnBG,EAAQ,EAAQ,GAChBW,EAAY,EAAQ,GAI1B,IAAIuE,EAAS,EAEbhL,EAAOD,QAAU,SAAa6D,GAC1B,IAiMIqH,EAjMAnE,EAAOzG,KA8CX,SAAS6K,EAAQzJ,GACb,OAAOA,SAAmD,KAAVA,EAGpD,SAAS0J,EAAc1C,GACnB,GAAwB,mBAAbA,EAAI/F,KACX,MAAM,IAAI8C,MAAM,aAAeiD,GAIvC,SAAS2C,IACL,OAAQtE,EAAKlD,QAAQ7C,KAAKoC,QAAQ,UAAW,IAGjD,SAASkI,EAAKC,EAAIjC,EAAMD,GACpB,IAAK,IAAIhJ,EAAI,EAAGA,EAAIiJ,EAAKjG,OAAQhD,IAC7B,GAAIiJ,EAAKjJ,KAAOkL,EACZ,IACI,GAAQ,IAAJlL,GAAc,MAALkL,EAAU,CACnBH,EAAc9B,EAAKjJ,EAAI,IACvB,IAAIkB,EAAI+H,EAAKjJ,EAAI,GAAGsC,OACpB2G,EAAKkC,OAAOnL,EAAG,EAAG,IAAIuF,EAASrE,QAC5B,CACH6J,EAAc9B,EAAKjJ,EAAI,IACvB+K,EAAc9B,EAAKjJ,EAAI,IAEvB,IAAID,EAAIkJ,EAAKjJ,EAAI,GAAGsC,OAChB8I,EAAInC,EAAKjJ,EAAI,GAAGsC,OAChB+I,MAAMC,QAAQvL,KACdA,EAAIA,EAAEiL,IAAwB,GAAG,IAEjCK,MAAMC,QAAQF,KACdA,EAAIA,EAAEJ,IAAwB,GAAG,IAGrC,IAAI9J,EAAI8H,EAAGjJ,EAAGqL,GACdnC,EAAKkC,OAAOnL,EAAI,EAAG,EAAG,IAAIuF,EAASrE,IACnClB,KAGR,MAAOuL,GAEH,MAAMA,GAvFtB7E,EAAK8E,KAAOZ,EACZlE,EAAKuC,KAAO,GACZvC,EAAK/F,KAAO,aACZ+F,EAAKqC,kBAGL,WACI,IACI,GAAIsC,MAAMC,QAAQ5E,EAAKuC,OACS,IAArBvC,EAAKuC,KAAKjG,QACV0D,EAAKuC,KAAK,aAAcvD,EAC/B,MAAMN,MAAM,WAEhB5B,EAAQyB,KAAK5C,EAAIqE,EAAKpE,OACS,iBAApBkB,EAAQyB,KAAM,EACrBzB,EAAQyB,KAAK3D,EAAI,IAEe,iBAApBkC,EAAQyB,KAAM,IAC1BzB,EAAQyB,KAAK3D,EAAI,KAGzB,MAAOiK,GACH,IAAIE,EAAc,CACd,SAAU,EACV,UAAW,EACX,UAAW,GACX,QAAS,GACT,SAAU,GACV,QAAS,GACT,OAAQ,GACR,gBAAiB,IAErB,QAA+BC,IAA3BD,EAAYF,EAAEI,SAMd,MAAMJ,EALN/H,EAAQyB,KAAK3D,EAAI,IACjBkC,EAAQyB,KAAK+B,EAAIuE,EAAEI,QACnBnI,EAAQyB,KAAK5C,EAAIoJ,EAAYF,EAAEI,SAMvC,QACInI,EAAQuB,OAAS,SAtCzB2B,EAAKlD,QAAUA,EAsHfkD,EAAKpE,KAAO,WACR,IAAI2G,EAAOvC,EAAKuC,KAAK2C,SA2DrB,GAzFJ,SAAoB3C,GAChB,IAAK,IAAIjJ,EAAIiJ,EAAKjG,OAAQhD,KACtB,GAAgB,MAAZiJ,EAAKjJ,GAAY,CACjB+K,EAAc9B,EAAKjJ,EAAI,IACvB,IAAIoL,EAAInC,EAAKjJ,EAAI,GAAGsC,OACpB,GAAItC,EAAI,GAA4B,iBAAhBiJ,EAAKjJ,EAAI,GAAiB,CAE1C,GADAiJ,EAAKkC,OAAOnL,EAAG,EAAG,KACdoL,aAAaS,KAAM,CACnBT,EAAIS,KAAKlD,MAAMyC,GACfL,EAAc9B,EAAKjJ,EAAI,IACvB,IAAID,EAAIkJ,EAAKjJ,EAAI,GAAGsC,OAChBvC,aAAa8L,OACb9L,EAAI8L,KAAKlD,MAAM5I,GA/GxB,MAgHSqL,GAhHT,MAiHSnC,EAAKkC,OAAOnL,EAAI,EAAG,EAAG,IAAIuF,EAASxF,KAG3CkJ,EAAKkC,OAAOnL,EAAI,EAAG,EAAG,IAAIuF,GAAU6F,QAEnC,CACD,GAAiB,iBAANA,EACP,MAAM,IAAIhG,MAAM,WAEpB6D,EAAKkC,OAAOnL,EAAG,EAAG,IAAIuF,GAAU6F,MAQ5CU,CAAW7C,GACXgC,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GACxB,OAAOnI,KAAKC,KAAKnD,GAAIqL,MAEzBH,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GACxB,GAAS,GAALA,EACA,MAAMhG,MAAM,WAEhB,OAASrF,GAAOqL,KAEpBH,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GACxB,OAASrL,GAAOqL,KAEpBH,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GAIxB,OAHIrL,aAAa8L,MAAqB,iBAANT,IAC5BA,GAjJG,QAmJErL,IAAOqL,KAEpBH,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GACxB,MAAO,GAAKrL,EAAIqL,KAEpBH,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GACxB,OAAOrL,EAAIqL,KAEfH,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GACxB,OAAOrL,EAAIqL,KAEfH,EAAK,KAAMhC,GAAM,SAASlJ,EAAGqL,GACzB,OAAOrL,GAAKqL,KAEhBH,EAAK,KAAMhC,GAAM,SAASlJ,EAAGqL,GACzB,OAAOrL,GAAKqL,KAEhBH,EAAK,KAAMhC,GAAM,SAASlJ,EAAGqL,GACzB,OAAIrL,aAAa8L,MAAQT,aAAaS,KAC3B9L,EAAEgM,YAAcX,EAAEW,YAEzBjB,EAAQ/K,KAAM+K,EAAQM,KAGnBrL,IAAMqL,KAEjBH,EAAK,IAAKhC,GAAM,SAASlJ,EAAGqL,GACxB,OAAIrL,aAAa8L,MAAQT,aAAaS,KAC3B9L,EAAEgM,YAAcX,EAAEW,aAEzBjB,EAAQ/K,KAAM+K,EAAQM,MAGhB,MAALrL,GAAmB,IAANqL,GAAmB,IAANrL,GAAgB,MAALqL,IAGzB,iBAANrL,GAA+B,iBAANqL,GAAkBrL,EAAEiM,gBAAkBZ,EAAEY,eAGrEjM,GAAKqL,OAEG,GAAfnC,EAAKjG,OACL,MAA6B,mBAAlBiG,EAAK,GAAO,KACZA,EAAK,GAGLA,EAAK,GAAG3G,QAM3BoE,EAAKhC,KAAO,SAASmB,GACjB,GAAIA,EAAQ,CACR,IAAIxD,EAAIgE,EAAUR,EAAQrC,GACd,MAANnB,IAA2B,KAAZwI,GAA+B,KAAZA,IAAkC,KAAZA,GAAyB,MAANxI,EAC7EqE,EAAKuC,KAAKvC,EAAKuC,KAAKjG,OAAS,IAAMX,EAGnCqE,EAAKuC,KAAKvE,KAAKrC,GAEnBwI,EAAWxI,M,6BCpNvBzC,EAAOD,QAAU,SAAmBqJ,GAChC/I,KAAKqC,KAAO,WACR,OAAO0G,O,6BCFfpJ,EAAOD,QAAU,SAAwBsM,GACrC,IAAIvF,EAAOzG,KACXyG,EAAK/F,KAAO,SACZ+F,EAAKuC,KAAO,GACZvC,EAAKpE,KAAO,WACR,IASG4J,EATCT,EAAc,CACd,SAAU,EACV,UAAW,EACX,UAAW,GACX,QAAS,GACT,SAAU,GACV,QAAS,GACT,OAAQ,GACR,gBAAiB,IAErB,IACIS,EAASD,EAAc/C,MAAMxC,EAAMA,EAAKuC,KAAKkD,IAAIjH,GAAGA,EAAE5C,SACxD,MAAOiJ,GACL,GAA2B,aAAvBU,EAActL,WACgB+K,IAA3BD,EAAYF,EAAEI,SAEjBO,EAAS,MAER,IAA2B,YAAvBD,EAActL,WACW+K,IAA3BD,EAAYF,EAAEI,SAKjB,MAAMJ,EAHNW,GAAS,GAMjB,OAAOA,GAEXxF,EAAKhC,KAAO,SAASmB,GACjBa,EAAKuC,KAAKvE,KAAKmB,M,6BCnCvBjG,EAAOD,QAAU,SAA2BsM,EAAezI,GACvD,IAAIkD,EAAOzG,KACXyG,EAAK/F,KAAO,YACZ+F,EAAKuC,KAAO,GACZvC,EAAKpE,KAAO,WACR,IACI,OAAO2J,EAAc/C,MAAMxC,EAAMA,EAAKuC,MACxC,MAAMsC,GAKJ,MAAMA,IAGd7E,EAAKhC,KAAO,SAASmB,GACjBa,EAAKuC,KAAKvE,KAAKmB,M,6BCbvB,IAAIyB,EAAW,CACX,MAASrE,KAAKmJ,MACd,mBAAoBnJ,KAAKmJ,MACzB,aAAcnJ,KAAKmJ,MACnB,IAAOnJ,KAAKoJ,IACZ,KAAQpJ,KAAKqJ,KACb,QA2uBJ,SAAiB3K,EAAK6C,EAAQ+H,EAAcC,GAAa,GAErD,IADA,IAAIC,EAAM,KACDzM,EAAI,EAAGA,EAAIwE,EAAOxB,OAAQhD,IAC/B,GAAIwE,EAAOxE,GAAG,GAAK2B,EACf8K,EAAMjI,EAAOxE,GAAGuM,EAAe,QAE9B,GAAI/H,EAAOxE,GAAG,IAAM2B,EACrB,OAAO6C,EAAOxE,GAAGuM,EAAe,GAGxC,GAAIC,GAAgBC,EAChB,OAAOA,EAEX,MAAMrH,MAAM,SAvvBZ,IAorBJ,WAEI,IADA,IAAIsH,EAAM,KACD1M,EAAI2M,UAAU3J,OAAQhD,KAAM,CACjC,IAAI4M,EAAMD,UAAU3M,GACpB,GAAIqL,MAAMC,QAAQsB,GAEd,IADA,IAAI1I,EAAM0I,EACDjI,EAAIT,EAAIlB,OAAQ2B,KAAM,CAC3B,IAAIkI,EAAM3I,EAAIS,GACd,GAAI0G,MAAMC,QAAQuB,GACd,IAAK,IAAIhE,EAAIgE,EAAI7J,OAAQ6F,MACV,MAAP6D,GAA0B,MAAVG,EAAIhE,IAAc6D,EAAMG,EAAIhE,MAC5C6D,EAAMG,EAAIhE,SAIN,MAAP6D,GAAuB,MAAPG,GAAeH,EAAMG,KAC1CH,EAAMG,QAIRvG,MAAMsG,KAAgB,MAAPF,GAAuB,MAAPE,GAAeF,EAAME,KAC1DF,EAAME,GAGd,OAAOF,GA3sBP,IAAOI,EACP,IA6sBJ,WAEI,IADA,IAAIC,EAAM,KACD/M,EAAI2M,UAAU3J,OAAQhD,KAAM,CACjC,IAAI4M,EAAMD,UAAU3M,GACpB,GAAIqL,MAAMC,QAAQsB,GAEd,IADA,IAAI1I,EAAM0I,EACDjI,EAAIT,EAAIlB,OAAQ2B,KAAM,CAC3B,IAAIkI,EAAM3I,EAAIS,GACd,GAAI0G,MAAMC,QAAQuB,GACd,IAAK,IAAIhE,EAAIgE,EAAI7J,OAAQ6F,MACV,MAAPkE,GAA0B,MAAVF,EAAIhE,IAAckE,EAAMF,EAAIhE,MAC5CkE,EAAMF,EAAIhE,SAIN,MAAPkE,GAAuB,MAAPF,GAAeE,EAAMF,KAC1CE,EAAMF,QAIRvG,MAAMsG,KAAgB,MAAPG,GAAuB,MAAPH,GAAeG,EAAMH,KAC1DG,EAAMH,GAGd,OAAOG,GApuBP,YAkpBJ,WAEI,IADA,IAAI7L,EAAI,GACClB,EAAI,EAAGA,EAAI2M,UAAU3J,OAAQhD,IAAK,CACvC,IAAI4M,EAAMD,UAAU3M,GAChB4M,UACJ1L,GAAK0L,GAET,OAAO1L,GAxpBP,IAioBJ,SAAa8L,EAAiBC,EAAoBC,EAAeC,EAAcC,GAG3E,GAFAA,EAAOA,GAAQ,EACfD,EAAeA,GAAgB,EACR,GAAnBH,EAAwB,CAExB,IAAIK,EAAIpK,KAAKC,IAAI,EAAI8J,EAAiBC,GACtC,OAASD,GAAmBG,EAAgBE,EAAIH,MAAsB,EAAIG,IAAM,EAAIL,EAAkB,IAGrG,GAA0B,GAAtBC,EAEL,QAASE,EAAeD,GAAiBD,EAE7C,OAAO,GA7oBP,OAAUK,EACV,IA8kBJ,SAAaC,EAAOC,GAChB,IAAIT,GAAO,EACPL,EAAM,EACN7K,EAAI,EACR,EAAG,CAGC,IAFA,IAAI4L,GAASV,EAAML,GAAO,EACtBgB,EAAM,EACD1N,EAAI,EAAGA,EAAIuN,EAAMvK,OAAQhD,IAAK,CACnC,IAAI4M,EAAMW,EAAMvN,GAChB0N,GAAOd,EAAI,GAAK3J,KAAKC,IAAK,EAAIuK,EAAQzN,GAEtC0N,EAAM,GACFX,IAAQL,IACRA,GAAOzJ,KAAKoJ,IAAIoB,IAEpBV,EAAMU,GAGNf,EAAMe,EAEV5L,UACKoB,KAAKoJ,IAAIqB,GAAO,MAAY7L,EAAI,KAEzC,OAAO4L,GApmBP,WAAYE,EACZ,iBAAkBA,EAClB,MA8cJ,WACI,IAAIC,EAAQC,EAAkBlB,WAE9B,SAASmB,EAAMF,GACX,OAAOA,EAAMG,QAAO,SAAShO,EAAGqL,GAC5B,OAAOrL,EAAIqL,KACVwC,EAAM5K,OAEf,IAAIgL,EAAOF,EAAMF,GACbK,EAAML,EAAMzB,KAAI,SAAS+B,GACrB,OAAQA,EAAMF,IAASE,EAAMF,MAErC,OAAO/K,KAAKqJ,KAAK2B,EAAIF,QAAO,SAAShO,EAAGqL,GACpC,OAAOrL,EAAIqL,MACTwC,EAAM5K,OAAS,KA3drB,QAAWmL,EACX,IAocJ,SAAatM,GACT,OAAOoB,KAAKC,IAAID,KAAKmL,EAAGvM,IApcxB,GAAMoB,KAAK8D,IACX,cAAesH,EACf,QAASA,EACT,qBAAsBC,EACtB,eAAgBA,EAChB,KA6WJ,SAAcvO,GACV,OAAQ,GAAKA,GAAGwG,QA7WhB,IAwWJ,SAAaxG,GACT,OAAQ,GAAKA,GAAGiD,QAxWhB,QAAWuL,EACX,QA4UJ,SAAiBC,EAAQC,EAAOC,EAAOC,GACnC,QAAsB,IAAXH,GAA8BD,EAAUC,GAC/C,MAAMpJ,MAAM,QAGhBsJ,EAAQA,GAAS,EACjB,IAAoB1O,EAAG4O,EAAnBnK,EAAMgK,EAAM,GAEhB,GAAsB,iBAAXD,GAEP,IADAI,EAAeJ,EAAOxC,cACjBhM,EAAI,EAAGA,EAAIyE,EAAIzB,OAAQhD,IACxB,GAAI2O,GAAclK,EAAIzE,KAAO4O,IAAgE,IAAhDnK,EAAIzE,GAAGgM,cAAcpI,QAAQgL,GACtE,OAAOF,EAAQD,EAAMzL,OAAS,EAAIyL,EAAMC,EAAQ,GAAG1O,GAAKyO,EAAM,GAAGzO,QAKzE,IADA4O,EAAeJ,EACVxO,EAAI,EAAGA,EAAIyE,EAAIzB,OAAQhD,IACxB,GAAI2O,GAAclK,EAAIzE,KAAO4O,GAAgBnK,EAAIzE,KAAO4O,EACpD,OAAOF,EAAQD,EAAMzL,OAAS,EAAIyL,EAAMC,EAAQ,GAAG1O,GAAKyO,EAAM,GAAGzO,GAI7E,MAAMoF,MAAM,SAlWZ,MA0TJ,SAAeZ,EAAQqK,EAASC,GAC5B,GAAID,GAAWrK,EAAOxB,OAAQ,CAC1B,IAAIyB,EAAMD,EAAOqK,EAAU,GAC3B,IAAIxD,MAAMC,QAAQ7G,GAOd,OAAOD,EAAOqK,GANd,IAAKC,EACD,OAAOrK,EACJ,GAAIqK,GAAcrK,EAAIzB,OACzB,OAAOyB,EAAIqK,EAAa,GAMpC,MAAM1J,MAAM,UAtUZ,MA2RJ,SAAe2J,EAAavK,EAAQwK,GAC5B3D,MAAMC,QAAQ9G,IACO,IAAlBA,EAAOxB,QACPqI,MAAMC,QAAQ9G,EAAO,MACxBA,EAASA,EAAO,IAEpB,IAAKuK,IAAgBvK,EACjB,MAAMY,MAAM,QAES,IAArBuH,UAAU3J,SACVgM,EAAY,GAEhB,KAAMxK,aAAkB6G,OACpB,MAAMjG,MAAM,QAEhB,GAAkB,IAAd4J,EACA,MAA2B,iBAAhBD,EACAE,EAAqBzK,EAAQuK,GAE7BG,EAAyB1K,EAAQuK,GAEzC,GAAkB,IAAdC,EACP,OAAOG,EAAyB3K,EAAQuK,GACrC,IAAmB,IAAfC,EACP,OAAOI,EAA4B5K,EAAQuK,GAE3C,MAAM3J,MAAM,SApThB,WAuFJ,WACI,IAAIiK,EAAc,SAAUrF,GACxB,YAAe0B,IAAX1B,GAAmC,KAAXA,GAA4B,OAAXA,GAGxC1D,MAAM0D,GAFA,EAGAsF,WAAWtF,IAI1BuF,EAAuB,SAAUC,GAU7B,IATA,IAAIC,EAAc,SAASjL,GACnB,OAAOA,EAAOxB,QAElB0M,EAAc,SAASlL,GACnB,OAAOA,EAAO,GAAGxB,QAErB2M,EAAWF,EAAYD,EAAY,IACnCI,EAAWF,EAAYF,EAAY,IAE9BxP,EAAI,EAAGA,EAAIwP,EAAYxM,OAAQhD,IACpC,GAAIyP,EAAYD,EAAYxP,MAAQ2P,GAC7BD,EAAYF,EAAYxP,MAAQ4P,EACnC,OAAO,EAGf,OAAO,GAGX,IAAKjD,WAAkC,IAArBA,UAAU3J,OACxB,MAAMoC,MAAM,WAEhB,IAAKmK,EAAqB5C,WACtB,MAAMvH,MAAM,WAGhB,IAAK,IAAIpF,EAAI,EAAGA,EAAI2M,UAAU3J,OAAQhD,IAAK,CACvC,IAAIyE,EAAMkI,UAAU3M,GACpB,GAAIqL,MAAMC,QAAQ7G,GACd,IAAK,IAAIE,EAAI,EAAGA,EAAIF,EAAIzB,OAAQ2B,IAAK,CACjC,IAAIkI,EAAMpI,EAAIE,GACd,GAAI0G,MAAMC,QAAQuB,GACd,IAAK,IAAIhE,EAAI,EAAGA,EAAIgE,EAAI7J,OAAQ6F,IAAK,CACjC,IAAI5D,EACJ,IADIA,EAAO4H,EAAIhE,KACa,iBAAT5D,GAAgC,MAAXA,EAAK3D,EACzC,MAAM8D,MAAMH,EAAK+B,QAMzB,IADI/B,EAAO4H,IACiB,iBAAT5H,GAAgC,MAAXA,EAAK3D,EACzC,MAAM8D,MAAMH,EAAK+B,QAO7B,IADI/B,EAAOR,IACiB,iBAATQ,GAAgC,MAAXA,EAAK3D,EACzC,MAAM8D,MAAMH,EAAK+B,GAK7B,IAEI6I,EAEAC,EACAC,EALAC,EAASrD,UAAU3J,OAAS,EAC5BkJ,EAAS,EAKb,IAASlM,EAAI,EAAGA,EAAI2M,UAAU,GAAG3J,OAAQhD,IACrC,GAAM2M,UAAU,GAAG3M,aAAcqL,MAS7B,IAAS1G,EAAI,EAAGA,EAAIgI,UAAU,GAAG3M,GAAGgD,OAAQ2B,IAAK,CAE7C,IADAkL,EAAU,EACLhH,EAAI,EAAGA,EAAImH,EAAQnH,IACpBkH,EAAMV,EAAY1C,UAAU9D,EAAI,GAAG7I,GAAG2E,IAEtCkL,GAAWE,EAEf7D,GAAU2D,MAhBuB,CAErC,IADAA,EAAU,EACLhH,EAAI,EAAGA,EAAImH,EAAQnH,IACpBiH,EAAKT,EAAY1C,UAAU9D,EAAI,GAAG7I,IAElC6P,GAAWC,EAEf5D,GAAU2D,EAalB,OAAO3D,GAlLP,SAkFJ,SAAkB+D,GACd,OAAQ3J,MAAM2J,IAlFd,MA2EJ,WACI,IAAIC,EAAQ,IAAIrE,KAEhB,OADAqE,EAAMC,SAAS,EAAG,EAAG,EAAG,GACjBD,GA7EP,QAguBJ,WAGI,OAAO,GAluBP,KAquBJ,SAAcE,EAAOC,EAASC,GAE1B,OAAiD,KAAhB,IAAhB,GAARF,EAAaC,GAAgBC,GADnB,OAruBnB,IAyuBJ,SAAaC,GACT,IAAKA,EAAKC,QACN,MAAMpL,MAAM,WAEhB,IAAIqL,EAAMF,EAAKC,UACf,GAAIlK,MAAMmK,GACN,MAAMrL,MAAM,WAEhB,OAAOqL,GAhvBP,MAmvBJ,SAAeF,GACX,IAAKA,EAAKG,SACN,MAAMtL,MAAM,WAEhB,IAAIuL,EAAQJ,EAAKG,WACjB,GAAIpK,MAAMqK,GACN,MAAMvL,MAAM,WAEhB,OAAOuL,EAAQ,GA1vBf,KA6vBJ,SAAcJ,GACV,IAAKA,EAAKK,YACN,MAAMxL,MAAM,WAEhB,IAAIyL,EAAON,EAAKK,cAChB,GAAItK,MAAMuK,GACN,MAAMzL,MAAM,WAEhB,OAAOyL,GApwBP,MAuwBJ,SAAeC,EAAMC,GAGjB,GAFAA,OAAqBrF,IAAXqF,EAAwB,EAAIzB,WAAWyB,GAE7CzK,MAAMyK,GACN,MAAM3L,MAAM,WAGZ0L,EADAA,QACO,GAEA,GAAKA,EAEhB,OAAOA,EAAKE,UAAUF,EAAK9N,OAAS+N,IAjxBpC,KAoxBJ,SAAcD,EAAMC,GAGhB,GAFAA,OAAqBrF,IAAXqF,EAAwB,EAAIzB,WAAWyB,GAE7CzK,MAAMyK,GACN,MAAM3L,MAAM,WAGZ0L,EADAA,QACO,GAEA,GAAKA,EAEhB,OAAOA,EAAKE,UAAU,EAAGD,IA9xBzB,IAiyBJ,WACI,IAAK,IAAI/Q,EAAI,EAAGA,EAAI,EAAI2M,UAAU3J,OAAQhD,GAAG,EAAG,CAC5C,IAAIiR,EAAOtE,UAAU3M,GACjByM,EAAME,UAAU3M,EAAE,GACtB,GAAIiR,EACA,OAAOxE,EAGf,MAAMrH,MAAM,SAxyBZ,MA2DJ,SAAe/D,EAAO6P,GAClB,GAAyB,IAArBvE,UAAU3J,OAAc,MAAM,IAAIoC,MAAM,WAC5C,GAAyB,IAArBuH,UAAU3J,OAAc,OAAOC,KAAKkO,MAAM9P,GAC9C,IAAI+P,EAAenO,KAAKC,IAAI,GAAIgO,GAChC,OAAOjO,KAAKkO,MAAMC,EAAa/P,GAAO+P,GA9DtC,OA+BJ,SAAgBrR,EAAEqL,GAKd,GAHArL,EAAI8N,EAAkB9N,GACtBqL,EAAIyC,EAAkBzC,GAElBrL,EAAEiD,SAAWoI,EAAEpI,OACf,MAAO,MAQX,IANA,IAAIqO,EAAQ,GAAOtR,EAAEiD,OAAO,GACxBsO,EAAQxE,EAAI5D,MAAMjJ,KAAMF,GAAKA,EAAEiD,OAC/BuO,EAAQzE,EAAI5D,MAAMjJ,KAAMmL,GAAKA,EAAEpI,OAC/Bb,EAAI,EACJqP,EAAK,EACLC,EAAG,EACEzR,EAAI,EAAGA,EAAID,EAAEiD,OAAQhD,IAC1BmC,IAAMpC,EAAEC,GAAKsR,IAAUlG,EAAEpL,GAAKuR,GAE9BC,GAAIvO,KAAKC,IAAInD,EAAEC,GAAG,GAClByR,GAAIxO,KAAKC,IAAIkI,EAAEpL,GAAG,GAMtB,OAHAwR,EAAGvO,KAAKqJ,KAAKkF,EAAGH,GAChBI,EAAGxO,KAAKqJ,KAAKmF,EAAGJ,GAETlP,GAAKkP,EAAMG,EAAGC,IAtDrB,MAUJ,WAEI,IAAIC,EAAe/E,UAAU,GACzBgF,EAAY,EAchB,MAZA,GAAGC,MAAMrR,KAAKoM,WAAW,GAAG,GAAGzG,QAAQ,CAAC2L,EAAIlQ,KAE9B,OAANkQ,IAEAA,EAAMA,EAAIC,YACF/O,QAAQ,MAAO,MAAQ2O,IACtBpL,MAAM,GAAGsL,MAAMrR,KAAKoM,WAAW,GAAG,GAAGhL,MACtCgQ,GAAa,GAAGC,MAAMrR,KAAKoM,WAAW,GAAG,GAAGhL,OAKrDgQ,GA1BP,OAKJ,SAAgBI,GACZ,OAAOpF,UAAUoF,IALjB,WA2yBJ,SAAoBjB,EAAMkB,EAAUC,EAAUC,GAC1C,GAAGA,GAAc,EACf,MAAM9M,MAAM,WAEd,IAAK0L,IAASkB,IAAcC,GAAyB,KAAbA,EACtC,OAAOnB,EACF,QAAmBpF,IAAfwG,EACT,OAAOpB,EAAK/N,QAAQ,IAAIoP,OAAoBH,EAVnCjP,QAAQ,8BAA+B,QAUO,KAAMkP,GAI7D,IAFA,IAAIvD,EAAQ,EACR1O,EAAI,EACD8Q,EAAKlN,QAAQoO,EAAUtD,GAAS,GAGrC,GAFAA,EAAQoC,EAAKlN,QAAQoO,EAAUtD,EAAQ,KACvC1O,IACUkS,EACR,OAAOpB,EAAKE,UAAU,EAAGtC,GAASuD,EAAWnB,EAAKE,UAAUtC,EAAQsD,EAAShP,SAzzBnF,QA+zBJ,SAAiB+N,EAAQqB,GACrB,OAAOnP,KAAKoP,KAAKtB,EAASqB,GAAgBA,IA1pB9C,SAASjD,EAAyB3K,EAAQuK,GAGtC,IAFA,IAAIL,EACA4D,EACKC,EAAM,EAAGA,EAAM/N,EAAOxB,OAAQuP,IAAO,CAC1C,GAAI/N,EAAO+N,KAASxD,EAChB,OAAOwD,EAAM,EACN/N,EAAO+N,GAAOxD,IAChBuD,EAGM9N,EAAO+N,GAAOD,IACrB5D,EAAQ6D,EAAM,EACdD,EAAa9N,EAAO+N,KAJpB7D,EAAQ6D,EAAM,EACdD,EAAa9N,EAAO+N,KAOhC,IAAK7D,EACD,MAAMtJ,MAAM,QAEhB,OAAOsJ,EAGX,SAASO,EAAqBzK,EAAQuK,GAClC,IAAK,IAAIwD,EAAM,EAAGA,EAAM/N,EAAOxB,OAAQuP,IAEnC,GADAxD,EAAcA,EAAYhM,QAAQ,MAAO,KACrCsI,MAAMC,QAAQ9G,EAAO+N,KACrB,GAA2B,IAAvB/N,EAAO+N,GAAKvP,QACiB,iBAAnBwB,EAAO+N,GAAK,IACd/N,EAAO+N,GAAK,GAAGvG,gBAAkB+C,EAAY/C,cAC7C,OAAOuG,EAAM,OAGtB,GAA2B,iBAAhB/N,EAAO+N,IACjB/N,EAAO+N,GAAKvG,gBAAkB+C,EAAY/C,cAC1C,OAAOuG,EAAM,EAKzB,MAAMnN,MAAM,QAGhB,SAAS8J,EAAyB1K,EAAQuK,GACtC,IAAK,IAAIwD,EAAM,EAAGA,EAAM/N,EAAOxB,OAAQuP,IACnC,GAAIlH,MAAMC,QAAQ9G,EAAO+N,KACrB,GAA2B,IAAvB/N,EAAO+N,GAAKvP,QACRwB,EAAO+N,GAAK,KAAOxD,EACnB,OAAOwD,EAAM,OAGlB,GAAI/N,EAAO+N,KAASxD,EACvB,OAAOwD,EAAM,EAGrB,MAAMnN,MAAM,QAQhB,SAASgK,EAA4B5K,EAAQuK,GAGzC,IAFA,IAAIL,EACA4D,EACKC,EAAM,EAAGA,EAAM/N,EAAOxB,OAAQuP,IACnC,GAAIlH,MAAMC,QAAQ9G,EAAO+N,KAAS/N,EAAO+N,GAAKvP,OAAS,EAAG,CAEtD,GAAIwB,EAAO+N,GAAK,KAAOxD,EACnB,OAAOwD,EAAM,EACN/N,EAAO+N,GAAK,GAAKxD,IACnBuD,EAGM9N,EAAO+N,GAAK,GAAKD,IACxB5D,EAAQ6D,EAAM,EACdD,EAAa9N,EAAO+N,GAAK,KAJzB7D,EAAQ6D,EAAM,EACdD,EAAa9N,EAAO+N,GAAK,SAM9B,CAEH,GAAI/N,EAAO+N,KAASxD,EAChB,OAAOwD,EAAM,EACN/N,EAAO+N,GAAOxD,IAChBuD,EAGM9N,EAAO+N,GAAOD,IACrB5D,EAAQ6D,EAAM,EACdD,EAAa9N,EAAO+N,KAJpB7D,EAAQ6D,EAAM,EACdD,EAAa9N,EAAO+N,KAQpC,IAAK7D,EACD,MAAMtJ,MAAM,QAEhB,OAAOsJ,EAoFX,SAASH,EAASxO,GAEd,OAAQA,EAGZ,SAASuO,EAAavO,EAAGqL,GAGrB,GAFArL,EAAI8N,EAAkB9N,GACtBqL,EAAIyC,EAAkBzC,GAClBrL,EAAEiD,QAAUoI,EAAEpI,OACd,MAAO,MAMX,IAJA,IAAIqO,EAAQ,EAAMtR,EAAEiD,OAChBsO,EAAQxE,EAAI5D,MAAMjJ,KAAMF,GAAKA,EAAEiD,OAC/BuO,EAAQzE,EAAI5D,MAAMjJ,KAAMmL,GAAKA,EAAEpI,OAC/Bb,EAAI,EACCnC,EAAI,EAAGA,EAAID,EAAEiD,OAAQhD,IAC1BmC,IAAMpC,EAAEC,GAAKsR,IAAUlG,EAAEpL,GAAKuR,GAElC,OAAOpP,EAAIkP,EAGf,SAASxD,EAAkBN,GAEvB,IADA,IAAIrJ,EAAM,GACDlE,EAAI,EAAGA,EAAIuN,EAAMvK,OAAQhD,IAAK,CACnC,IAAI4M,EAAMW,EAAMvN,GAChB,GAAIqL,MAAMC,QAAQsB,IAEd,IADA,IAAIpI,EAASoI,EACJjI,EAAIH,EAAOxB,OAAQ2B,KACxB,GAAyB,iBAAdH,EAAOG,GACdT,EAAIQ,KAAKF,EAAOG,SAEf,GAAI0G,MAAMC,QAAQ9G,EAAOG,IAC1B,IAAK,IAAIkE,EAAIrE,EAAOG,GAAG3B,OAAQ6F,KACC,iBAAjBrE,EAAOG,GAAGkE,IACjB3E,EAAIQ,KAAKF,EAAOG,GAAGkE,QAUhB,iBAAT,GACN3E,EAAIQ,KAAKkI,GAIrB,OAAO1I,EAGX,SAASmK,IAIL,IAHA,IAAImE,EAAUrE,EAAIjF,MAAMjJ,KAAM0M,WAC1BxK,EAAI,EACJ1B,EAAI,EACCT,EAAI,EAAGA,EAAI2M,UAAU3J,OAAQhD,IAAK,CACvC,IAAI4M,EAAMD,UAAU3M,GACpB,GAAIqL,MAAMC,QAAQsB,GAEd,IADA,IAAIpI,EAASoI,EACJjI,EAAIH,EAAOxB,OAAQ2B,KACxB,IAAK,IAAIkE,EAAIrE,EAAOG,GAAG3B,OAAQ6F,KACN,OAAjBrE,EAAOG,GAAGkE,SAAgC6C,IAAjBlH,EAAOG,GAAGkE,KACnC1G,GAAKc,KAAKC,IAAIsB,EAAOG,GAAGkE,GAAK2J,EAAS,GACtC/R,UAMZ0B,GAAKc,KAAKC,IAAI0J,EAAM4F,EAAS,GAC7B/R,IAGR,OAAO0B,EAAI1B,EAOf,SAAS0N,IACL,OAAOrB,EAAI5D,MAAMjJ,KAAM0M,WAAaW,EAAOpE,MAAMjJ,KAAM0M,WAyC3D,SAASgB,EAASzL,EAAGuQ,EAAIC,GACrB,GAAIxQ,EAAI,GAAKA,EAAI,EACb,KAAM,2DAEV,GAAIwQ,EAAQ,EACR,KAAM,gDAGV,OAAS,GAALxQ,GACQyQ,IAEH,GAALzQ,EACOyQ,IAEE,GAATD,EACOD,GAKXpF,EAAInL,EAAI,GAQJe,KAAKoJ,IAAIgB,IAAM,KAEfZ,EACIY,SAAe,oBAFnBnM,EAAI,QAAUmM,EAAIA,GAGE,mBAAyBnM,EAAI,kBAAyBA,EAC1D,mBAAyBA,EAAI,mBAAyBA,EAC1D,oBAAyBA,EAAI,oBAAyBA,EAC1D,2BAAmC,kBAAJA,EACvB,oBAAyBA,EAAI,mBAAwBA,EACzD,oBAAyBA,EAAI,mBAAyBA,EAC1D,mBAAwBA,EAAI,mBAAyBA,EAAI,IAM7DA,EADAmM,EAAI,EACA,EAAInL,EAEJA,EAOJuK,GALJvL,EAAI+B,KAAKqJ,MAAMrJ,KAAK8D,IAAI7F,MAGf,SAEY,sBADjBA,IAAM,KAEc,qBAA2BA,EAAI,mBACnCA,EAAI,oBAA0BA,EAClC,oBAA0BA,EAAI,mBAClCA,EAAI,mBAAyBA,EACjC,2BACgB,sBADiBA,EACW,sBAChCA,EAAI,qBAA2BA,EACnC,oBAAyBA,EAAI,gBACjCA,EAAI,oBAAyBA,EACjC,mBAA0BA,EAAI,UAIjB,uBADjBA,IAAM,GAEc,uBAA6BA,EACjC,sBAA2BA,EAAI,qBACnCA,EAAI,oBAAyBA,EACjC,oBAAyBA,EAAI,mBACjCA,EAAI,0BACQ,sBADwBA,EACK,sBACjCA,EAAI,uBAA4BA,EACpC,sBAA2BA,EAAI,qBAA2BA,EAAI,mBAAyBA,EAC3F,kBAAyBA,EAAI,GAGjCmM,EAAI,IACJZ,GAAOA,IAIRgG,EAAKC,EAAQjG,GAlEpB,IAAIY,EAAGnM,EAAGuL,EA+Fd,SAASa,IAEL,IADA,IAAIpM,EAAI,EACClB,EAAI2M,UAAU3J,OAAQhD,KAAM,CACjC,IAAI4M,EAAMD,UAAU3M,GACpB,GAAIqL,MAAMC,QAAQsB,GAEd,IADA,IAAIpI,EAASoI,EACJjI,EAAIH,EAAOxB,OAAQ2B,KACxB,IAAK,IAAIkE,EAAIrE,EAAOG,GAAG3B,OAAQ6F,KACN,OAAjBrE,EAAOG,GAAGkE,SAAgC6C,IAAjBlH,EAAOG,GAAGkE,IACnC3H,SAMR0L,SACA1L,IAIZ,OAAOA,EA6BX,SAAS4L,IAEL,IADA,IAAI5L,EAAI,EACClB,EAAI2M,UAAU3J,OAAQhD,KAAM,CACjC,IAAI4M,EAAMD,UAAU3M,GACpB,GAAIqL,MAAMC,QAAQsB,GAEd,IADA,IAAIpI,EAASoI,EACJjI,EAAIH,EAAOxB,OAAQ2B,KACxB,IAAK,IAAIkE,EAAIrE,EAAOG,GAAG3B,OAAQ6F,KACtBvC,MAAM9B,EAAOG,GAAGkE,MACjB3H,IAAMsD,EAAOG,GAAGkE,SAM5B3H,IAAM0L,EAGd,OAAO1L,EAyLXtB,EAAOD,QAAU2H,G,6BCp3BjB,MAAMjE,EAAgB,EAAQ,GACxBD,EAAgB,EAAQ,GACxBmC,EAAW,EAAQ,GACnBG,EAAQ,EAAQ,GAChBF,EAAW,EAAQ,GAgGzB5F,EAAOD,QAAU,CACb,OA/FJ,SAAoBiT,EAAUC,EAAMC,EAASC,EAAQC,GAGjD,GAFAD,GAAUA,GAAU,IAAIxN,EAAS,IAAIjD,OACrC0Q,GAASA,GAAS,IAAIzN,EAAS,IAAIjD,OACN,IAAzBsQ,EAAS3J,KAAKjG,QAA0C,aAA1B4P,EAAS3J,KAAK,GAAGtI,KAAqB,CACpE,IAAIsS,EAAYL,EAAS3J,KAAK,GAC1BiK,EAAaD,EAAUtM,WACvBkG,EAAMzJ,EAAc8P,EAAWtO,WAAakO,EAAQxQ,OACpDO,EAAUQ,EAAcwJ,GACxBpI,GAAOyO,EAAWtO,UAAU7B,QAAQ,WAAY,IAAM8P,EAAKvQ,OAC3DsC,EAAYsO,EAAWxP,WAAa,IAAMb,EAAU4B,EACxD,GAAe,IAAXsO,GAA0B,IAAVC,EAChB,OAAO,IAAIxN,EAASZ,EAAWqO,EAAUzP,SAASlB,OAGlD,IAAI6Q,EAAgB9P,EAAcwJ,EAAMmG,EAAQ,GAIhD,OAAO,IAAItN,EADUd,EAAY,KADjBuO,GADI1O,EAAMsO,EAAS,IAGFE,EAAUzP,SAASlB,SA8E5D,QAzEJ,SAAiBsQ,EAAUQ,GACvB,IACI,IAAI/R,EAAQuR,EAAStQ,OACrB,MAAqB,iBAAVjB,IAAuBiF,MAAMjF,IAAUA,IAAUsR,KAAYtR,KAAWsR,IAG5EtR,EAFI+R,EAAa9Q,OAG1B,MAAMiJ,GACJ,OAAO6H,EAAa9Q,SAkExB,GA9DJ,SAAa+Q,EAAWC,EAAOC,GAC3B,OAAIF,EAAU/Q,OAMHgR,EAAMhR,YAGQ,IAAViR,GAGAA,EAAMjR,QAkDrB,IA7CJ,WACI,IAAK,IAAItC,EAAI,EAAGA,EAAI2M,UAAU3J,OAAQhD,IAClC,IAAI2M,UAAU3M,GAAGsC,OAAQ,OAAO,EAEpC,OAAO,GA0CP,GAvCJ,WACI,IAAK,IAAItC,EAAI,EAAGA,EAAI2M,UAAU3J,OAAQhD,IAClC,GAAG2M,UAAU3M,GAAGsC,OAAQ,OAAO,EAEnC,OAAO,GAoCP,UAjCJ,SAAmBkR,GACf,IAIIhP,EAJQgP,EAAoBvK,KAAK,GAIlB3G,OAEfmR,EADWD,EAAoBhQ,QAAQ7C,KACrB2E,MAAM,oBACxB3B,EAAQ6P,EAAoBhQ,QAAQG,MAGpC+P,EAAYtQ,EAAcqQ,EAAO,IACjCE,GAAaF,EAAO,GACxB,IAAK,IAAIzT,EAAI,EAAGA,EAAIwE,EAAOxB,OAAQhD,IAAK,CACpC,IAAI4T,EAAYpP,EAAOxE,GACvB,IAAK,IAAI2E,EAAI,EAAGA,EAAIiP,EAAU5Q,OAAQ2B,IAAK,CACvC,IAAIkP,EAAoBH,EAAY1T,EAChC8T,EAAiBH,EAAYhP,EAC7BtD,EAAQuS,EAAUjP,GAEtBhB,EAAMN,EAAcwQ,GAAqBC,GAAgBzR,EAAIhB,GAIrE,OAAOmD,EAAO,GAAG,M,6BCjGrB,MAAMe,EAAW,EAAQ,GACnBc,EAAY,EAAQ,GACpBa,EAA+B,EAAQ,GAiF7CtH,EAAOD,QA/EP,MAEI,YAAY0H,EAAUrC,GAClB/E,KAAKoH,SAAWA,EAChBpH,KAAK8T,YAAc,GACnB9T,KAAK+E,aAAeA,EACpB/E,KAAK+T,UAAY,GACjB/T,KAAKqH,SAAWJ,EAA6BG,EAAUrC,GACvD,IAAK,IAAIhF,EAAIC,KAAKqH,SAAStE,OAAS,EAAGhD,GAAK,EAAGA,IAAK,CAChD,IAAI+J,EAAM/E,EAAa8D,iBAAiB7I,KAAKqH,SAAStH,IACtDC,KAAK8T,YAAYrP,KAAKqF,GAE1B9J,KAAKgU,YAGT,OAAOC,EAAU7S,GACb,IAAI8S,EAAWlU,KAAK+T,UAAUE,GAC1BC,EACAA,EAAS/R,SAASf,GAElBpB,KAAK8T,YAAY7N,QAAQ6D,IACrB9J,KAAKmU,mBAAmBrK,EAAKmK,EAAU7S,KAKnD,UACI,IAAIgT,EAAO,GACX,IAAK,IAAIxL,KAAK5I,KAAK+T,UACfK,EAAKxL,GAAK5I,KAAK+T,UAAUnL,GAAGvG,OAEhC,OAAO+R,EAGX,YACSpU,KAAKoH,UAAapH,KAAKoH,SAASvB,UAAa7F,KAAKoH,SAASvB,SAASC,OAGzE9F,KAAKoH,SAASvB,SAASC,MAAMG,QAAQoO,IACjC,IAAI7H,EAAMxM,KAAKsU,OAAOD,EAAKlO,KAC3BnG,KAAK+T,UAAUM,EAAKnO,MAAQsG,EAC5BxM,KAAK8T,YAAY7N,QAAQ6D,IACrB9J,KAAKmU,mBAAmBrK,EAAKuK,EAAKnO,UAK9C,OAAOqO,GACH,IAAKvU,KAAKqH,SAAStE,OACf,MAAM,IAAIoC,MAAM,qBAEpB,IAEI5B,EAAU,CACVsB,YAHgB7E,KAAKqH,SAAS,GACFxC,YAG5Bf,GAAI9D,KAAKoH,SACTrC,aAAc/E,KAAK+E,cAEvB,OAAOqB,EAAUmO,EAAUhR,GAG/B,mBAAmBuG,EAAKmK,EAAU7S,GAC9B,IAAK,IAAIrB,EAAI,EAAGA,EAAI+J,EAAId,KAAKjG,OAAQhD,IAAK,CACtC,IAAI4M,EAAM7C,EAAId,KAAKjJ,GACf4M,IAAQsH,EACRnK,EAAId,KAAKjJ,GAAKC,KAAK+T,UAAUE,KAAcjU,KAAK+T,UAAUE,GAAY,IAAI3O,EAASlE,IAC7D,iBAARuL,GAAkC,eAAbA,EAAIjM,MAAsC,WAAbiM,EAAIjM,MACpEV,KAAKmU,mBAAmBxH,EAAKsH,EAAU7S,IAKnD,UACIpB,KAAK8T,YAAY7N,QAAQ6D,IACrBA,EAAIhB","file":"xlsx-calc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","\"use strict\";\n\nmodule.exports = function RawValue(value) {\n this.setValue = function(v) {\n value = v;\n };\n this.calc = function() {\n return value;\n };\n};\n","\"use strict\";\n\nmodule.exports = function int_2_col_str(n) {\n var dividend = n + 1;\n var columnName = '';\n var modulo;\n var guard = 10;\n while (dividend > 0 && guard--) {\n modulo = (dividend - 1) % 26;\n columnName = String.fromCharCode(modulo + 65) + columnName;\n dividend = (dividend - modulo - 1) / 26;\n }\n return columnName;\n};","\"use strict\";\n\nmodule.exports = function col_str_2_int(col_str) {\n var r = 0;\n var colstr = col_str.replace(/[0-9]+$/, '');\n for (var i = colstr.length; i--;) {\n r += Math.pow(26, colstr.length - i - 1) * (colstr.charCodeAt(i) - 64);\n }\n return r - 1;\n};","\"use strict\";\n\nconst col_str_2_int = require('./col_str_2_int.js');\nconst int_2_col_str = require('./int_2_col_str.js');\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function Range(str_expression, formula) {\n this.calc = function() {\n var range_expression, sheet_name, sheet;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n range_expression = aux[1];\n }\n else {\n sheet_name = formula.sheet_name;\n range_expression = str_expression;\n }\n sheet = formula.wb.Sheets[sheet_name];\n var arr = range_expression.split(':');\n var min_row = parseInt(arr[0].replace(/^[A-Z]+/, ''), 10) || 0;\n var str_max_row = arr[1].replace(/^[A-Z]+/, '');\n var max_row;\n if (str_max_row === '' && sheet['!ref']) {\n str_max_row = sheet['!ref'].split(':')[1].replace(/^[A-Z]+/, '');\n }\n // the max is 1048576, but TLE\n max_row = parseInt(str_max_row == '' ? '500000' : str_max_row, 10);\n var min_col = col_str_2_int(arr[0]);\n var max_col = col_str_2_int(arr[1]);\n var matrix = [];\n for (var i = min_row; i <= max_row; i++) {\n var row = [];\n matrix.push(row);\n for (var j = min_col; j <= max_col; j++) {\n var cell_name = int_2_col_str(j) + i;\n var cell_full_name = sheet_name + '!' + cell_name;\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n } else if (formula_ref.status === 'working') {\n if (formula_ref.cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n }\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else if (sheet[cell_name]) {\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else {\n row.push(null);\n }\n }\n }\n return matrix;\n };\n};\n","\"use strict\";\n\nmodule.exports = function getSanitizedSheetName(sheet_name) {\n var quotedMatch = sheet_name.match(/^'(.*)'$/);\n if (quotedMatch) {\n return quotedMatch[1];\n }\n else {\n return sheet_name;\n }\n};\n","const RawValue = require('./RawValue.js');\nconst RefValue = require('./RefValue.js');\nconst LazyValue = require('./LazyValue.js');\nconst Range = require('./Range.js');\n\n// this is used to _cache_ range names so that it doesn't need to be queried\n// every time a range is used\nlet definedNames, wb;\nfunction getDefinedName(buffer, formula) {\n if (!(formula.wb.Workbook && formula.wb.Workbook.Names)) {\n return null;\n }\n if (wb !== formula.wb) {\n wb = formula.wb;\n definedNames = null;\n return getDefinedName(buffer, formula);\n }\n if (definedNames) {\n return definedNames[buffer];\n }\n const keys = Object.values(formula.wb.Workbook.Names);\n if (keys.length === 0) {\n return;\n }\n definedNames = {};\n keys.forEach(({ Name, Ref }) => {\n if (!Name.includes('.')) {\n definedNames[Name] = Ref;\n }\n });\n\n return getDefinedName(buffer, formula);\n}\n\nmodule.exports = function str_2_val(buffer, formula) {\n if (!isNaN(buffer)) {\n return new RawValue(+buffer);\n }\n if (buffer === 'TRUE') {\n return new RawValue(1);\n }\n if (typeof buffer !== 'string') {\n return buffer;\n }\n\n buffer = buffer.trim().replace(/\\$/g, '')\n\n if (buffer.match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/%$/)) {\n var inner = str_2_val(buffer.substr(0, buffer.length-1), formula)\n return new LazyValue(() => inner.calc() / 100)\n }\n if (getDefinedName(buffer, formula)) {\n return str_2_val(getDefinedName(buffer, formula), formula);\n }\n return buffer;\n};\n","\"use strict\";\n\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function RefValue(str_expression, formula) {\n var self = this;\n this.name = 'RefValue';\n this.str_expression = str_expression;\n this.formula = formula;\n\n self.parseRef = function() {\n var sheet, sheet_name, cell_name, cell_full_name;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n sheet = formula.wb.Sheets[sheet_name];\n cell_name = aux[1];\n }\n else {\n sheet = formula.sheet;\n sheet_name = formula.sheet_name;\n cell_name = str_expression;\n }\n if (!sheet) {\n throw Error(\"Sheet \" + sheet_name + \" not found.\");\n }\n cell_full_name = sheet_name + '!' + cell_name;\n return {\n sheet: sheet,\n sheet_name: sheet_name,\n cell_name: cell_name,\n cell_full_name: cell_full_name\n };\n };\n\n this.calc = function() {\n var resolved_ref = self.parseRef();\n var sheet = resolved_ref.sheet;\n var cell_name = resolved_ref.cell_name;\n var cell_full_name = resolved_ref.cell_full_name;\n var ref_cell = sheet[cell_name];\n if (!ref_cell) {\n return null;\n }\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n if (ref_cell.t === 'e') {\n console.log('ref is an error with new formula', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n else if (formula_ref.status === 'working') {\n if (ref_cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n return this.calc();\n }\n else if (formula_ref.status === 'done') {\n if (ref_cell.t === 'e') {\n console.log('ref is an error after formula eval', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n }\n else {\n if (ref_cell.t === 'e') {\n console.log('ref is an error with no formula', cell_name);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n };\n};\n","\"use strict\";\n\nmodule.exports = function find_all_cells_with_formulas(wb, exec_formula) {\n let formula_ref = {};\n let cells = [];\n for (let sheet_name in wb.Sheets) {\n let sheet = wb.Sheets[sheet_name];\n for (let cell_name in sheet) {\n if (sheet[cell_name] && sheet[cell_name].f) {\n let formula = formula_ref[sheet_name + '!' + cell_name] = {\n formula_ref: formula_ref,\n wb: wb,\n sheet: sheet,\n sheet_name: sheet_name,\n cell: sheet[cell_name],\n name: cell_name,\n status: 'new',\n exec_formula: exec_formula\n };\n cells.push(formula);\n }\n }\n }\n return cells;\n};\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst exec_formula = require('./exec_formula.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\nconst Calculator = require('./Calculator.js');\n\nvar mymodule = function(workbook) {\n var formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (var i = formulas.length - 1; i >= 0; i--) {\n exec_formula(formulas[i]);\n }\n};\n\nmymodule.calculator = function calculator(workbook) {\n return new Calculator(workbook, exec_formula);\n};\n\nmymodule.set_fx = exec_formula.set_fx;\nmymodule.exec_fx = exec_formula.exec_fx;\nmymodule.col_str_2_int = col_str_2_int;\nmymodule.int_2_col_str = int_2_col_str;\nmymodule.import_functions = exec_formula.import_functions;\nmymodule.import_raw_functions = exec_formula.import_raw_functions;\nmymodule.xlsx_Fx = exec_formula.xlsx_Fx;\nmymodule.localizeFunctions = exec_formula.localizeFunctions;\n\nmymodule.XLSX_CALC = mymodule\n\nmodule.exports = mymodule;\n","\"use strict\";\n\nconst expression_builder = require('./expression_builder.js');\n\nlet xlsx_Fx = {};\nlet xlsx_raw_Fx = {};\n\nimport_functions(require('./formulas.js'));\nimport_raw_functions(require('./formulas-raw.js'));\n\nfunction import_raw_functions(functions, opts) {\n for (var key in functions) {\n xlsx_raw_Fx[key] = functions[key];\n }\n}\n\nfunction import_functions(formulajs, opts) {\n opts = opts || {};\n var prefix = opts.prefix || '';\n for (var key in formulajs) {\n var obj = formulajs[key];\n if (typeof(obj) === 'function') {\n if (opts.override || !xlsx_Fx[prefix + key]) {\n xlsx_Fx[prefix + key] = obj;\n }\n // else {\n // console.log(prefix + key, 'already exists.');\n // console.log(' to override:');\n // console.log(' XLSX_CALC.import_functions(yourlib, {override: true})');\n // }\n }\n else if (typeof(obj) === 'object') {\n import_functions(obj, my_assign(opts, { prefix: key + '.' }));\n }\n }\n}\n\nfunction my_assign(dest, source) {\n var obj = JSON.parse(JSON.stringify(dest));\n for (var k in source) {\n obj[k] = source[k];\n }\n return obj;\n}\n\nfunction build_expression(formula) {\n return expression_builder(formula, {xlsx_Fx: xlsx_Fx, xlsx_raw_Fx: xlsx_raw_Fx});\n}\n\nfunction exec_formula(formula) {\n let root_exp = build_expression(formula);\n root_exp.update_cell_value();\n}\n\nexec_formula.set_fx = function set_fx(name, fn) {\n xlsx_Fx[name] = fn;\n};\n\nexec_formula.exec_fx = function exec_fx(name, args) {\n return xlsx_Fx[name].apply(this, args);\n};\n\nexec_formula.localizeFunctions = function(dic) {\n for (let newName in dic) {\n let oldName = dic[newName];\n if (xlsx_Fx[oldName]) {\n xlsx_Fx[newName] = xlsx_Fx[oldName];\n }\n if (xlsx_raw_Fx[oldName]) {\n xlsx_raw_Fx[newName] = xlsx_raw_Fx[oldName];\n }\n }\n};\n\nexec_formula.import_functions = import_functions;\nexec_formula.import_raw_functions = import_raw_functions;\nexec_formula.build_expression = build_expression;\nexec_formula.xlsx_Fx = xlsx_Fx;\nmodule.exports = exec_formula;\n","const Exp = require('./Exp.js');\nconst RawValue = require('./RawValue.js');\nconst UserFnExecutor = require('./UserFnExecutor.js');\nconst UserRawFnExecutor = require('./UserRawFnExecutor.js');\nconst common_operations = {\n '*': 'multiply',\n '+': 'plus',\n '-': 'minus',\n '/': 'divide',\n '^': 'power',\n '&': 'concat',\n '<': 'lt',\n '>': 'gt',\n '=': 'eq'\n};\n\nmodule.exports = function expression_builder(formula, opts) {\n formula.status = 'working';\n\n var xlsx_Fx = opts.xlsx_Fx || {};\n var xlsx_raw_Fx = opts.xlsx_raw_Fx || {};\n\n var root_exp;\n var str_formula = formula.cell.f;\n if (str_formula[0] == '=') {\n str_formula = str_formula.substr(1);\n }\n var exp_obj = root_exp = new Exp(formula);\n var buffer = '',\n was_string = false;\n var fn_stack = [{\n exp: exp_obj\n }];\n\n /**\n * state pattern in functional way\n */\n function string(char) {\n if (char === '\"') {\n exp_obj.push(new RawValue(buffer));\n was_string = true;\n buffer = '';\n state = start;\n } else {\n buffer += char;\n }\n }\n\n function single_quote(char) {\n if (char === \"'\") {\n state = start;\n }\n buffer += char;\n }\n\n function ini_parentheses() {\n var o, trim_buffer = buffer.trim(),\n special = xlsx_Fx[trim_buffer];\n var special_raw = xlsx_raw_Fx[trim_buffer];\n if (special_raw) {\n special = new UserRawFnExecutor(special_raw, formula);\n }\n else if (special) {\n special = new UserFnExecutor(special, formula);\n }\n else if (trim_buffer) {\n //Error: \"Worksheet 1\"!D145: Function INDEX not found\n throw new Error('\"' + formula.sheet_name + '\"!' + formula.name + ': Function ' + buffer + ' not found');\n }\n o = new Exp(formula);\n fn_stack.push({\n exp: o,\n special: special\n });\n exp_obj = o;\n buffer = '';\n }\n\n function end_parentheses() {\n var v, stack = fn_stack.pop();\n exp_obj = stack.exp;\n exp_obj.push(buffer);\n v = exp_obj;\n buffer = '';\n exp_obj = fn_stack[fn_stack.length - 1].exp;\n if (stack.special) {\n stack.special.push(v);\n exp_obj.push(stack.special);\n }\n else {\n exp_obj.push(v);\n }\n }\n\n function add_operation(char) {\n if (!was_string) {\n exp_obj.push(buffer);\n }\n was_string = false;\n exp_obj.push(char);\n buffer = '';\n }\n\n function start(char) {\n if (char === '\"') {\n state = string;\n buffer = '';\n } else if (char === \"'\") {\n state = single_quote;\n buffer = \"'\";\n } else if (char === '(') {\n ini_parentheses();\n } else if (char === ')') {\n end_parentheses();\n } else if (common_operations[char]) {\n add_operation(char);\n } else if (char === ',' && fn_stack[fn_stack.length - 1].special) {\n was_string = false;\n fn_stack[fn_stack.length - 1].exp.push(buffer);\n fn_stack[fn_stack.length - 1].special.push(fn_stack[fn_stack.length - 1].exp);\n fn_stack[fn_stack.length - 1].exp = exp_obj = new Exp(formula);\n buffer = '';\n } else if (char !== ' ') {\n buffer += char;\n }\n }\n \n var state = start;\n\n for (var i = 0; i < str_formula.length; i++) {\n state(str_formula[i]);\n }\n root_exp.push(buffer);\n return root_exp;\n\n}","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst str_2_val = require('./str_2_val.js');\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nvar exp_id = 0;\n\nmodule.exports = function Exp(formula) {\n var self = this;\n self.id = ++exp_id;\n self.args = [];\n self.name = 'Expression';\n self.update_cell_value = update_cell_value;\n self.formula = formula;\n \n function update_cell_value() {\n try {\n if (Array.isArray(self.args) \n && self.args.length === 1\n && self.args[0] instanceof Range) {\n throw Error('#VALUE!');\n }\n formula.cell.v = self.calc();\n if (typeof(formula.cell.v) === 'string') {\n formula.cell.t = 's';\n }\n else if (typeof(formula.cell.v) === 'number') {\n formula.cell.t = 'n';\n }\n }\n catch (e) {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n };\n if (errorValues[e.message] !== undefined) {\n formula.cell.t = 'e';\n formula.cell.w = e.message;\n formula.cell.v = errorValues[e.message];\n }\n else {\n throw e;\n }\n }\n finally {\n formula.status = 'done';\n }\n }\n function isEmpty(value) {\n return value === undefined || value === null || value === \"\";\n }\n \n function checkVariable(obj) {\n if (typeof obj.calc !== 'function') {\n throw new Error('Undefined ' + obj);\n }\n }\n\n function getCurrentCellIndex() {\n return +self.formula.name.replace(/[^0-9]/g, '');\n }\n \n function exec(op, args, fn) {\n for (var i = 0; i < args.length; i++) {\n if (args[i] === op) {\n try {\n if (i===0 && op==='+') {\n checkVariable(args[i + 1]);\n let r = args[i + 1].calc();\n args.splice(i, 2, new RawValue(r));\n } else {\n checkVariable(args[i - 1]);\n checkVariable(args[i + 1]);\n\n let a = args[i - 1].calc();\n let b = args[i + 1].calc();\n if (Array.isArray(a)) {\n a = a[getCurrentCellIndex() - 1][0];\n }\n if (Array.isArray(b)) {\n b = b[getCurrentCellIndex() - 1][0];\n }\n\n let r = fn(a, b);\n args.splice(i - 1, 3, new RawValue(r));\n i--;\n }\n }\n catch (e) {\n // console.log('[Exp.js] - ' + formula.name + ': evaluating ' + formula.cell.f + '\\n' + e.message);\n throw e;\n }\n }\n }\n }\n\n function exec_minus(args) {\n for (var i = args.length; i--;) {\n if (args[i] === '-') {\n checkVariable(args[i + 1]);\n var b = args[i + 1].calc();\n if (i > 0 && typeof args[i - 1] !== 'string') {\n args.splice(i, 1, '+');\n if (b instanceof Date) {\n b = Date.parse(b);\n checkVariable(args[i - 1]);\n var a = args[i - 1].calc();\n if (a instanceof Date) {\n a = Date.parse(a) / MS_PER_DAY;\n b = b / MS_PER_DAY;\n args.splice(i - 1, 1, new RawValue(a));\n }\n }\n args.splice(i + 1, 1, new RawValue(-b));\n }\n else {\n if (typeof b === 'string') {\n throw new Error('#VALUE!');\n }\n args.splice(i, 2, new RawValue(-b));\n }\n }\n }\n }\n\n self.calc = function() {\n let args = self.args.concat();\n exec_minus(args);\n exec('^', args, function(a, b) {\n return Math.pow(+a, +b);\n });\n exec('/', args, function(a, b) {\n if (b == 0) {\n throw Error('#DIV/0!');\n }\n return (+a) / (+b);\n });\n exec('*', args, function(a, b) {\n return (+a) * (+b);\n });\n exec('+', args, function(a, b) {\n if (a instanceof Date && typeof b === 'number') {\n b = b * MS_PER_DAY;\n }\n return (+a) + (+b);\n });\n exec('&', args, function(a, b) {\n return '' + a + b;\n });\n exec('<', args, function(a, b) {\n return a < b;\n });\n exec('>', args, function(a, b) {\n return a > b;\n });\n exec('>=', args, function(a, b) {\n return a >= b;\n });\n exec('<=', args, function(a, b) {\n return a <= b;\n });\n exec('<>', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() !== b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return false;\n }\n return a !== b;\n });\n exec('=', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return true;\n }\n if ((a == null && b === 0) || (a === 0 && b == null)) {\n return true;\n }\n if (typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase()) {\n return true;\n }\n return a == b;\n });\n if (args.length == 1) {\n if (typeof(args[0].calc) !== 'function') {\n return args[0];\n }\n else {\n return args[0].calc();\n }\n }\n };\n\n var last_arg;\n self.push = function(buffer) {\n if (buffer) {\n var v = str_2_val(buffer, formula);\n if (((v === '=') && (last_arg == '>' || last_arg == '<')) || (last_arg == '<' && v === '>')) {\n self.args[self.args.length - 1] += v;\n }\n else {\n self.args.push(v);\n }\n last_arg = v;\n //console.log(self.id, '-->', v);\n }\n };\n};","\"use strict\";\n\nmodule.exports = function LazyValue(fn) {\n this.calc = function() {\n return fn();\n };\n};\n","\"use strict\";\n\nmodule.exports = function UserFnExecutor(user_function) {\n var self = this;\n self.name = 'UserFn';\n self.args = [];\n self.calc = function() {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n }, result;\n try {\n result = user_function.apply(self, self.args.map(f=>f.calc()));\n } catch (e) {\n if (user_function.name === 'is_blank'\n && errorValues[e.message] !== undefined) {\n // is_blank applied to an error cell doesn't propagate the error\n result = 0;\n }\n else if (user_function.name === 'iserror'\n && errorValues[e.message] !== undefined) {\n // iserror applied to an error doesn't propagate the error and returns true\n result = true;\n }\n else {\n throw e;\n }\n }\n return result;\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};","\"use strict\";\n\nmodule.exports = function UserRawFnExecutor(user_function, formula) {\n var self = this;\n self.name = 'UserRawFn';\n self.args = [];\n self.calc = function() {\n try {\n return user_function.apply(self, self.args);\n } catch(e) {\n // debug\n // console.log('----------------', user_function);\n // console.log(formula.name);\n // console.log(self);\n throw e;\n }\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};\n","\"use strict\";\n\n// +---------------------+\n// | FORMULAS REGISTERED |\n// +---------------------+\nlet formulas = {\n 'FLOOR': Math.floor,\n '_xlfn.FLOOR.MATH': Math.floor,\n 'FLOOR.MATH': Math.floor,\n 'ABS': Math.abs,\n 'SQRT': Math.sqrt,\n 'VLOOKUP': vlookup,\n 'MAX': max,\n 'SUM': sum,\n 'MIN': min,\n 'CONCATENATE': concatenate,\n 'PMT': pmt,\n 'COUNTA': counta,\n 'IRR': irr,\n 'NORM.INV': normsInv,\n '_xlfn.NORM.INV': normsInv,\n 'STDEV': stDeviation,\n 'AVERAGE': avg,\n 'EXP': EXP,\n 'LN': Math.log,\n '_xlfn.VAR.P': var_p,\n 'VAR.P': var_p,\n '_xlfn.COVARIANCE.P': covariance_p,\n 'COVARIANCE.P': covariance_p,\n 'TRIM': trim,\n 'LEN': len,\n 'ISBLANK': is_blank,\n 'HLOOKUP': hlookup,\n 'INDEX': index,\n 'MATCH': match,\n 'SUMPRODUCT': sumproduct,\n 'ISNUMBER': isnumber,\n 'TODAY': today,\n 'ISERROR': iserror,\n 'TIME': time,\n 'DAY': day,\n 'MONTH': month,\n 'YEAR': year,\n 'RIGHT': right,\n 'LEFT': left,\n 'IFS': ifs,\n 'ROUND': round,\n 'CORREL': correl, // missing test\n 'SUMIF': sumif, // missing test,\n 'CHOOSE': choose,\n 'SUBSTITUTE': substitute,\n 'CEILING': ceiling,\n};\n\nfunction choose(option) {\n return arguments[option];\n}\n\nfunction sumif(){\n\n let elementToSum = arguments[1];\n let sumResult = 0;\n\n [].slice.call(arguments)[0][0].forEach((elt,key) =>{\n \n if (elt!==null){\n //if the element is not a string but a number, number has no replace function, so converting to string.\n elt = elt.toString();\n if( elt.replace(/\\'/g, \"\") === elementToSum){\n if (!isNaN([].slice.call(arguments)[2][0][key])){\n sumResult += [].slice.call(arguments)[2][0][key]\n }\n }\n }\n });\n return sumResult\n}\n\nfunction correl(a,b){\n\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n\n if (a.length !== b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / (a.length-1);\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n var sa = 0;\n var sb=0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n\n sa+=Math.pow(a[i],2);\n sb+=Math.pow(b[i],2);\n }\n\n sa=Math.sqrt(sa/inv_n);\n sb=Math.sqrt(sb/inv_n);\n\n return s / (inv_n*sa*sb);\n}\n\nfunction round(value, decimalPlaces) {\n if (arguments.length === 0) throw new Error(\"Err:511\");\n if (arguments.length === 1) return Math.round(value);\n let roundMeasure = Math.pow(10, decimalPlaces);\n return Math.round(roundMeasure*value)/roundMeasure\n}\n\nfunction today() {\n var today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n}\n\nfunction isnumber(x) {\n return !isNaN(x);\n}\n\nfunction sumproduct() {\n var parseNumber = function (string) {\n if (string === undefined || string === '' || string === null) {\n return 0;\n }\n if (!isNaN(string)) {\n return parseFloat(string);\n }\n return 0;\n },\n consistentSizeRanges = function (matrixArray) {\n var getRowCount = function(matrix) {\n return matrix.length;\n },\n getColCount = function(matrix) {\n return matrix[0].length;\n },\n rowCount = getRowCount(matrixArray[0]),\n colCount = getColCount(matrixArray[0]);\n\n for (var i = 1; i < matrixArray.length; i++) {\n if (getRowCount(matrixArray[i]) !== rowCount\n || getColCount(matrixArray[i]) !== colCount) {\n return false;\n }\n }\n return true;\n };\n\n if (!arguments || arguments.length === 0) {\n throw Error('#VALUE!');\n }\n if (!consistentSizeRanges(arguments)) {\n throw Error('#VALUE!');\n }\n // throw error if any of the cells passed in arguments is in error\n for (var i = 0; i < arguments.length; i++) {\n var row = arguments[i];\n if (Array.isArray(row)) {\n for (var j = 0; j < row.length; j++) {\n var col = row[j];\n if (Array.isArray(col)) {\n for (var k = 0; k < col.length; k++) {\n var cell = col[k];\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n else {\n var cell = col;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n }\n else {\n var cell = row;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n\n var arrays = arguments.length + 1;\n var result = 0;\n var product;\n var k;\n var _i;\n var _ij;\n for (var i = 0; i < arguments[0].length; i++) {\n if (!(arguments[0][i] instanceof Array)) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _i = parseNumber(arguments[k - 1][i]);\n\n product *= _i;\n }\n result += product;\n } else {\n for (var j = 0; j < arguments[0][i].length; j++) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _ij = parseNumber(arguments[k - 1][i][j]);\n\n product *= _ij;\n }\n result += product;\n }\n }\n }\n return result;\n}\n\nfunction match_less_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] < lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] > indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match_exactly_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n lookupValue = lookupValue.replace(/\\?/g, '.');\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1\n && typeof matrix[idx][0] === 'string') {\n if (matrix[idx][0].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n } else if (typeof matrix[idx] === 'string') {\n if (matrix[idx].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n\n }\n throw Error('#N/A');\n}\n\nfunction match_exactly_non_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1) {\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n }\n }\n } else if (matrix[idx] === lookupValue) {\n return idx + 1;\n }\n }\n throw Error('#N/A');\n}\n\n// +---------------------+\n// | THE IMPLEMENTATIONS |\n// +---------------------+\n\n\nfunction match_greater_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx]) && matrix[idx].length > 0) {\n // For array in column\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx][0] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n } else if (matrix[idx][0] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n }\n }\n } else {\n // For array in row\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match(lookupValue, matrix, matchType) {\n if (Array.isArray(matrix)\n && matrix.length === 1\n && Array.isArray(matrix[0])) {\n matrix = matrix[0];\n }\n if (!lookupValue && !matrix) {\n throw Error('#N/A');\n }\n if (arguments.length === 2) {\n matchType = 1;\n }\n if (!(matrix instanceof Array)) {\n throw Error('#N/A');\n }\n if (matchType === 0) {\n if (typeof lookupValue === 'string') {\n return match_exactly_string(matrix, lookupValue);\n } else {\n return match_exactly_non_string(matrix, lookupValue);\n }\n } else if (matchType === 1) {\n return match_less_than_or_equal(matrix, lookupValue);\n } else if (matchType === -1) {\n return match_greater_than_or_equal(matrix, lookupValue);\n } else {\n throw Error('#N/A');\n }\n}\n\nfunction index(matrix, row_num, column_num) {\n if (row_num <= matrix.length) {\n var row = matrix[row_num - 1];\n if (Array.isArray(row)) {\n if (!column_num) {\n return row;\n } else if (column_num <= row.length) {\n return row[column_num - 1];\n }\n } else {\n return matrix[row_num];\n }\n }\n throw Error('#REF!');\n}\n\n// impl ported from https://github.com/FormulaPages/hlookup\nfunction hlookup(needle, table, index, exactmatch) {\n if (typeof needle === \"undefined\" || (0, is_blank)(needle)) {\n throw Error('#N/A');\n }\n\n index = index || 0;\n let row = table[0], i, searchingFor;\n\n if (typeof needle === 'string') {\n searchingFor = needle.toLowerCase();\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i].toLowerCase().indexOf(searchingFor) !== -1) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n } else {\n searchingFor = needle;\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i] === searchingFor) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n }\n throw Error('#N/A');\n}\n\nfunction len(a) {\n return ('' + a).length;\n}\n\nfunction trim(a) {\n return ('' + a).trim();\n}\n\nfunction is_blank(a) {\n // console.log(a)\n return !a;\n}\n\nfunction covariance_p(a, b) {\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n if (a.length != b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / a.length;\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n }\n return s * inv_n;\n}\n\nfunction getArrayOfNumbers(range) {\n var arr = [];\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n if (typeof(matrix[j]) == 'number') {\n arr.push(matrix[j]);\n }\n else if (Array.isArray(matrix[j])) {\n for (var k = matrix[j].length; k--;) {\n if (typeof(matrix[j][k]) == 'number') {\n arr.push(matrix[j][k]);\n }\n }\n }\n // else {\n // wtf is that?\n // }\n }\n }\n else {\n if (typeof(arg) == 'number') {\n arr.push(arg);\n }\n }\n }\n return arr;\n}\n\nfunction var_p() {\n var average = avg.apply(this, arguments);\n var s = 0.0;\n var c = 0;\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n s += Math.pow(matrix[j][k] - average, 2);\n c++;\n }\n }\n }\n }\n else {\n s += Math.pow(arg - average, 2);\n c++;\n }\n }\n return s / c;\n}\n\nfunction EXP(n) {\n return Math.pow(Math.E, n);\n}\n\nfunction avg() {\n return sum.apply(this, arguments) / counta.apply(this, arguments);\n}\n\nfunction stDeviation() {\n var array = getArrayOfNumbers(arguments);\n\n function _mean(array) {\n return array.reduce(function(a, b) {\n return a + b;\n }) / array.length;\n }\n var mean = _mean(array),\n dev = array.map(function(itm) {\n return (itm - mean) * (itm - mean);\n });\n return Math.sqrt(dev.reduce(function(a, b) {\n return a + b;\n }) / (array.length - 1));\n}\n\n/// Original C++ implementation found at http://www.wilmott.com/messageview.cfm?catid=10&threadid=38771\n/// C# implementation found at http://weblogs.asp.net/esanchez/archive/2010/07/29/a-quick-and-dirty-implementation-of-excel-norminv-function-in-c.aspx\n/*\n * Compute the quantile function for the normal distribution.\n *\n * For small to moderate probabilities, algorithm referenced\n * below is used to obtain an initial approximation which is\n * polished with a final Newton step.\n *\n * For very large arguments, an algorithm of Wichura is used.\n *\n * REFERENCE\n *\n * Beasley, J. D. and S. G. Springer (1977).\n * Algorithm AS 111: The percentage points of the normal distribution,\n * Applied Statistics, 26, 118-121.\n *\n * Wichura, M.J. (1988).\n * Algorithm AS 241: The Percentage Points of the Normal Distribution.\n * Applied Statistics, 37, 477-484.\n */\nfunction normsInv(p, mu, sigma) {\n if (p < 0 || p > 1) {\n throw \"The probality p must be bigger than 0 and smaller than 1\";\n }\n if (sigma < 0) {\n throw \"The standard deviation sigma must be positive\";\n }\n\n if (p == 0) {\n return -Infinity;\n }\n if (p == 1) {\n return Infinity;\n }\n if (sigma == 0) {\n return mu;\n }\n\n var q, r, val;\n\n q = p - 0.5;\n\n /*-- use AS 241 --- */\n /* double ppnd16_(double *p, long *ifault)*/\n /* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3\n Produces the normal deviate Z corresponding to a given lower\n tail area of P; Z is accurate to about 1 part in 10**16.\n */\n if (Math.abs(q) <= .425) { /* 0.075 <= p <= 0.925 */\n r = .180625 - q * q;\n val =\n q * (((((((r * 2509.0809287301226727 +\n 33430.575583588128105) * r + 67265.770927008700853) * r +\n 45921.953931549871457) * r + 13731.693765509461125) * r +\n 1971.5909503065514427) * r + 133.14166789178437745) * r +\n 3.387132872796366608) / (((((((r * 5226.495278852854561 +\n 28729.085735721942674) * r + 39307.89580009271061) * r +\n 21213.794301586595867) * r + 5394.1960214247511077) * r +\n 687.1870074920579083) * r + 42.313330701600911252) * r + 1);\n }\n else { /* closer than 0.075 from {0,1} boundary */\n\n /* r = min(p, 1-p) < 0.075 */\n if (q > 0)\n r = 1 - p;\n else\n r = p;\n\n r = Math.sqrt(-Math.log(r));\n /* r = sqrt(-log(r)) <==> min(p, 1-p) = exp( - r^2 ) */\n\n if (r <= 5) { /* <==> min(p,1-p) >= exp(-25) ~= 1.3888e-11 */\n r += -1.6;\n val = (((((((r * 7.7454501427834140764e-4 +\n .0227238449892691845833) * r + .24178072517745061177) *\n r + 1.27045825245236838258) * r +\n 3.64784832476320460504) * r + 5.7694972214606914055) *\n r + 4.6303378461565452959) * r +\n 1.42343711074968357734) / (((((((r *\n 1.05075007164441684324e-9 + 5.475938084995344946e-4) *\n r + .0151986665636164571966) * r +\n .14810397642748007459) * r + .68976733498510000455) *\n r + 1.6763848301838038494) * r +\n 2.05319162663775882187) * r + 1);\n }\n else { /* very close to 0 or 1 */\n r += -5;\n val = (((((((r * 2.01033439929228813265e-7 +\n 2.71155556874348757815e-5) * r +\n .0012426609473880784386) * r + .026532189526576123093) *\n r + .29656057182850489123) * r +\n 1.7848265399172913358) * r + 5.4637849111641143699) *\n r + 6.6579046435011037772) / (((((((r *\n 2.04426310338993978564e-15 + 1.4215117583164458887e-7) *\n r + 1.8463183175100546818e-5) * r +\n 7.868691311456132591e-4) * r + .0148753612908506148525) * r + .13692988092273580531) * r +\n .59983220655588793769) * r + 1);\n }\n\n if (q < 0.0) {\n val = -val;\n }\n }\n\n return mu + sigma * val;\n}\n\nfunction irr(range, guess) {\n var min = -2.0;\n var max = 1.0;\n var n = 0;\n do {\n var guest = (min + max) / 2;\n var NPV = 0;\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n NPV += arg[0] / Math.pow((1 + guest), i);\n }\n if (NPV > 0) {\n if (min === max) {\n max += Math.abs(guest);\n }\n min = guest;\n }\n else {\n max = guest;\n }\n n++;\n } while (Math.abs(NPV) > 0.000001 && n < 100000);\n //console.log(n);\n return guest;\n}\n\nfunction counta() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n r++;\n }\n }\n }\n }\n else {\n if (arg !== null && arg !== undefined) {\n r++;\n }\n }\n }\n return r;\n}\n\nfunction pmt(rate_per_period, number_of_payments, present_value, future_value, type) {\n type = type || 0;\n future_value = future_value || 0;\n if (rate_per_period != 0.0) {\n // Interest rate exists\n var q = Math.pow(1 + rate_per_period, number_of_payments);\n return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));\n\n }\n else if (number_of_payments != 0.0) {\n // No interest rate, but number of payments exists\n return -(future_value + present_value) / number_of_payments;\n }\n return 0;\n}\n\nfunction concatenate() {\n var r = '';\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (arg === null || arg === undefined) continue;\n r += arg;\n }\n return r;\n}\n\nfunction sum() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (!isNaN(matrix[j][k])) {\n r += +matrix[j][k];\n }\n }\n }\n }\n else {\n r += +arg;\n }\n }\n return r;\n}\n\nfunction max() {\n var max = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (max == null || (col[k] != null && max < col[k])) {\n max = col[k];\n }\n }\n }\n else if (max == null || (col != null && max < col)) {\n max = col;\n }\n }\n }\n else if (!isNaN(arg) && (max == null || (arg != null && max < arg))) {\n max = arg;\n }\n }\n return max;\n}\n\nfunction min() {\n var min = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (min == null || (col[k] != null && min > col[k])) {\n min = col[k];\n }\n }\n }\n else if (min == null || (col != null && min > col)) {\n min = col;\n }\n }\n }\n else if (!isNaN(arg) && (min == null || (arg != null && min > arg))) {\n min = arg;\n }\n }\n return min;\n}\n\nfunction vlookup(key, matrix, return_index, range_lookup=true) {\n var val = null;\n for (var i = 0; i < matrix.length; i++) {\n if (matrix[i][0] < key) {\n val = matrix[i][return_index - 1];\n }\n else if (matrix[i][0] == key) {\n return matrix[i][return_index - 1];\n }\n }\n if (range_lookup && val) {\n return val;\n }\n throw Error('#N/A');\n}\n\nfunction iserror() {\n // if an error is catched before getting there, true will be returned from the catch block\n // if we get here then it's not an error\n return false;\n}\n\nfunction time(hours, minutes, seconds) {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n return ((hours * 60 + minutes) * 60 + seconds) * 1000 / MS_PER_DAY;\n}\n\nfunction day(date) {\n if (!date.getDate) {\n throw Error('#VALUE!');\n }\n var day = date.getDate();\n if (isNaN(day)) {\n throw Error('#VALUE!');\n }\n return day;\n}\n\nfunction month(date) {\n if (!date.getMonth) {\n throw Error('#VALUE!');\n }\n var month = date.getMonth();\n if (isNaN(month)) {\n throw Error('#VALUE!');\n }\n return month + 1;\n}\n\nfunction year(date) {\n if (!date.getFullYear) {\n throw Error('#VALUE!');\n }\n var year = date.getFullYear();\n if (isNaN(year)) {\n throw Error('#VALUE!');\n }\n return year;\n}\n\nfunction right(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(text.length - number);\n}\n\nfunction left(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(0, number);\n}\n\nfunction ifs(/*_cond1, _val1, _cond2, _val2, _cond3, _val3, ... */) {\n for (var i = 0; i + 1 < arguments.length; i+=2) {\n var cond = arguments[i];\n var val = arguments[i+1];\n if (cond) {\n return val;\n }\n }\n throw Error('#N/A');\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\nfunction substitute(text, old_text, new_text, occurrence) {\n if(occurrence <= 0) {\n throw Error('#VALUE!');\n }\n if (!text || !old_text || (!new_text && new_text !== '')) {\n return text;\n } else if (occurrence === undefined) {\n return text.replace(new RegExp(escapeRegExp(old_text), 'g'), new_text);\n } else {\n var index = 0;\n var i = 0;\n while (text.indexOf(old_text, index) > 0) {\n index = text.indexOf(old_text, index + 1);\n i++;\n if (i === occurrence) {\n return text.substring(0, index) + new_text + text.substring(index + old_text.length);\n }\n }\n }\n };\n\nfunction ceiling(number, significance) {\n return Math.ceil(number / significance) * significance\n}\n\nmodule.exports = formulas;\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst RefValue = require('./RefValue.js');\n\nfunction raw_offset(cell_ref, rows, columns, height, width) {\n height = (height || new RawValue(1)).calc();\n width = (width || new RawValue(1)).calc();\n if (cell_ref.args.length === 1 && cell_ref.args[0].name === 'RefValue') {\n var ref_value = cell_ref.args[0];\n var parsed_ref = ref_value.parseRef();\n var col = col_str_2_int(parsed_ref.cell_name) + columns.calc();\n var col_str = int_2_col_str(col);\n var row = +parsed_ref.cell_name.replace(/^[A-Z]+/g, '') + rows.calc();\n var cell_name = parsed_ref.sheet_name + '!' + col_str + row;\n if (height === 1 && width === 1) {\n return new RefValue(cell_name, ref_value.formula).calc();\n }\n else {\n var end_range_col = int_2_col_str(col + width - 1);\n var end_range_row = row + height - 1;\n var end_range = end_range_col + end_range_row;\n var str_expression = cell_name + ':' + end_range;\n return new Range(str_expression, ref_value.formula).calc();\n }\n }\n}\n\nfunction iferror(cell_ref, onerrorvalue) {\n try {\n var value = cell_ref.calc();\n if (typeof value === 'number' && (isNaN(value) || value === Infinity || value === -Infinity)) {\n return onerrorvalue.calc();\n }\n return value;\n } catch(e) {\n return onerrorvalue.calc();\n }\n}\n\nfunction _if(condition, _then, _else) {\n if (condition.calc()) {\n // console.log(condition.formula.name)\n // if (condition.formula.name === 'P40') {\n // console.log('P40 =', _then.calc());\n // console.log(' -->', _then.args[1].calc());\n // }\n return _then.calc();\n }\n else {\n if (typeof _else === 'undefined') {\n return false;\n } else {\n return _else.calc();\n }\n }\n}\n\nfunction and() {\n for (var i = 0; i < arguments.length; i++) {\n if(!arguments[i].calc()) return false;\n }\n return true;\n}\n\nfunction _or() {\n for (var i = 0; i < arguments.length; i++) {\n if(arguments[i].calc()) return true;\n }\n return false;\n}\n\nfunction transpose(expressionWithRange) {\n let range = expressionWithRange.args[0];\n // console.log(expressionWithRange.args[0])\n // console.log(expressionWithRange.formula.wb.Sheets.Sheet1)\n // console.log(range.calc())\n let matrix = range.calc();\n let cellName = expressionWithRange.formula.name;\n let colRow = cellName.match(/([A-Z]+)([0-9]+)/);\n let sheet = expressionWithRange.formula.sheet;\n // console.log(colRow[1], colRow[2]);\n // console.log(col_str_2_int(colRow[1]));\n let colNumber = col_str_2_int(colRow[1]);\n let rowNumber = +colRow[2];\n for (let i = 0; i < matrix.length; i++) {\n let matrixRow = matrix[i];\n for (let j = 0; j < matrixRow.length; j++) {\n let destinationColumn = colNumber + i;\n let destinationRow = rowNumber + j;\n let value = matrixRow[j];\n // console.log(int_2_col_str(destinationColumn), destinationRow, value);\n sheet[int_2_col_str(destinationColumn) + destinationRow].v = value;\n }\n }\n // console.log(expressionWithRange.formula.name)\n return matrix[0][0];\n}\n\nmodule.exports = {\n 'OFFSET': raw_offset,\n 'IFERROR': iferror,\n 'IF': _if,\n 'AND': and,\n 'OR': _or,\n 'TRANSPOSE': transpose\n};\n","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst str_2_val = require('./str_2_val.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\n\nclass Calculator {\n \n constructor(workbook, exec_formula) {\n this.workbook = workbook;\n this.expressions = [];\n this.exec_formula = exec_formula;\n this.variables = {};\n this.formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (let i = this.formulas.length - 1; i >= 0; i--) {\n let exp = exec_formula.build_expression(this.formulas[i]);\n this.expressions.push(exp);\n }\n this.calcNames();\n }\n \n setVar(var_name, value) {\n let variable = this.variables[var_name];\n if (variable) {\n variable.setValue(value);\n } else {\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, var_name, value);\n });\n }\n }\n \n getVars() {\n let vars = {};\n for (let k in this.variables) {\n vars[k] = this.variables[k].calc();\n }\n return vars;\n }\n \n calcNames() {\n if (!this.workbook || !this.workbook.Workbook || !this.workbook.Workbook.Names) {\n return;\n }\n this.workbook.Workbook.Names.forEach(item => {\n let val = this.getRef(item.Ref);\n this.variables[item.Name] = val;\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, item.Name);\n });\n });\n }\n \n getRef(ref_name) {\n if (!this.formulas.length) {\n throw new Error(\"No formula found.\");\n }\n let first_formula = this.formulas[0];\n let formula_ref = first_formula.formula_ref;\n let formula = {\n formula_ref: formula_ref,\n wb: this.workbook,\n exec_formula: this.exec_formula\n };\n return str_2_val(ref_name, formula);\n }\n \n setVarOfExpression(exp, var_name, value) {\n for (let i = 0; i < exp.args.length; i++) {\n let arg = exp.args[i];\n if (arg === var_name) {\n exp.args[i] = this.variables[var_name] || (this.variables[var_name] = new RawValue(value));\n } else if (typeof arg === 'object' && (arg.name === 'Expression' || arg.name === 'UserFn')) {\n this.setVarOfExpression(arg, var_name, value);\n }\n }\n }\n \n execute() {\n this.expressions.forEach(exp => {\n exp.update_cell_value();\n });\n }\n}\n\nmodule.exports = Calculator;"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/RawValue.js","webpack:///./src/int_2_col_str.js","webpack:///./src/col_str_2_int.js","webpack:///./src/Range.js","webpack:///./src/getSanitizedSheetName.js","webpack:///./src/str_2_val.js","webpack:///./src/RefValue.js","webpack:///./src/find_all_cells_with_formulas.js","webpack:///./src/index.js","webpack:///./src/exec_formula.js","webpack:///./src/expression_builder.js","webpack:///./src/Exp.js","webpack:///./src/LazyValue.js","webpack:///./src/dynamic_array_formulas.js","webpack:///./src/UserFnExecutor.js","webpack:///./src/UserRawFnExecutor.js","webpack:///./src/formulas.js","webpack:///./src/formulas-raw.js","webpack:///./src/Calculator.js"],"names":["root","factory","exports","module","define","amd","a","i","this","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","setValue","v","calc","modulo","dividend","columnName","guard","String","fromCharCode","col_str","colstr","replace","length","Math","pow","charCodeAt","col_str_2_int","int_2_col_str","getSanitizedSheetName","str_expression","formula","range_expression","sheet_name","sheet","indexOf","aux","split","wb","Sheets","max_row","arr","min_row","parseInt","str_max_row","min_col","max_col","matrix","row","push","j","cell_name","cell_full_name","formula_ref","status","exec_formula","cell","f","includes","Error","quotedMatch","match","RawValue","RefValue","LazyValue","Range","definedNames","getDefinedName","buffer","Workbook","Names","keys","values","forEach","Name","Ref","str_2_val","isNaN","trim","inner","substr","self","parseRef","resolved_ref","ref_cell","console","log","w","cells","find_all_cells_with_formulas","Calculator","mymodule","workbook","options","formulas","error","continue_after_error","log_error","calculator","set_fx","exec_fx","import_functions","import_raw_functions","xlsx_Fx","localizeFunctions","XLSX_CALC","expression_builder","xlsx_raw_Fx","functions","opts","formulajs","prefix","obj","override","my_assign","dest","source","JSON","parse","stringify","k","build_expression","update_cell_value","fn","args","apply","dic","newName","oldName","Exp","UserFnExecutor","UserRawFnExecutor","common_operations","root_exp","str_formula","exp_obj","was_string","fn_stack","exp","string","char","state","start","single_quote","stack","trim_buffer","special","special_raw","ini_parentheses","pop","add_operation","dynamicArrayFormulas","exp_id","last_arg","getCellLetter","columnIndex","newCellLetter","newLetterIndex","floor","getCellType","cellValue","isEmpty","checkVariable","getCurrentCellIndex","exec","op","splice","b","Array","isArray","e","id","RegExp","join","array","result","validateResultMatrix","existingCell","existingCellLetter","existingCellNumber","newCellNumber","newCellValue","newCellType","newCell","errorValues","undefined","message","concat","Date","exec_minus","getTime","toLowerCase","user_function","map","abs","sqrt","return_index","range_lookup","val","max","arguments","arg","col","sum","min","rate_per_period","number_of_payments","present_value","future_value","type","q","counta","range","guess","guest","NPV","normsInv","getArrayOfNumbers","_mean","reduce","mean","dev","itm","avg","E","var_p","covariance_p","is_blank","needle","table","index","exactmatch","searchingFor","row_num","column_num","lookupValue","matchType","match_exactly_string","match_exactly_non_string","match_less_than_or_equal","match_greater_than_or_equal","parseNumber","parseFloat","consistentSizeRanges","matrixArray","getRowCount","getColCount","rowCount","colCount","product","_i","_ij","arrays","x","today","setHours","hours","minutes","seconds","date","getDate","day","getMonth","month","getFullYear","year","text","number","substring","cond","decimalPlaces","round","roundMeasure","inv_n","avg_a","avg_b","sa","sb","elementToSum","sumResult","slice","elt","toString","option","old_text","new_text","occurrence","significance","ceil","indexValue","idx","average","mu","sigma","Infinity","cell_ref","rows","columns","height","width","ref_value","parsed_ref","end_range_col","onerrorvalue","condition","_then","_else","expressionWithRange","colRow","colNumber","rowNumber","matrixRow","destinationColumn","destinationRow","data","conditions","cellName","colAndRow","returnValue","destinationCellName","expressions","variables","calcNames","var_name","variable","setVarOfExpression","vars","item","getRef","ref_name"],"mappings":"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","file":"xlsx-calc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","\"use strict\";\n\nmodule.exports = function RawValue(value) {\n this.setValue = function(v) {\n value = v;\n };\n this.calc = function() {\n return value;\n };\n};\n","\"use strict\";\n\nmodule.exports = function int_2_col_str(n) {\n var dividend = n + 1;\n var columnName = '';\n var modulo;\n var guard = 10;\n while (dividend > 0 && guard--) {\n modulo = (dividend - 1) % 26;\n columnName = String.fromCharCode(modulo + 65) + columnName;\n dividend = (dividend - modulo - 1) / 26;\n }\n return columnName;\n};","\"use strict\";\n\nmodule.exports = function col_str_2_int(col_str) {\n var r = 0;\n var colstr = col_str.replace(/[0-9]+$/, '');\n for (var i = colstr.length; i--;) {\n r += Math.pow(26, colstr.length - i - 1) * (colstr.charCodeAt(i) - 64);\n }\n return r - 1;\n};","\"use strict\";\n\nconst col_str_2_int = require('./col_str_2_int.js');\nconst int_2_col_str = require('./int_2_col_str.js');\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function Range(str_expression, formula) {\n this.calc = function() {\n var range_expression, sheet_name, sheet;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n range_expression = aux[1];\n }\n else {\n sheet_name = formula.sheet_name;\n range_expression = str_expression;\n }\n sheet = formula.wb.Sheets[sheet_name];\n var arr = range_expression.split(':');\n var min_row = parseInt(arr[0].replace(/^[A-Z]+/, ''), 10) || 0;\n var str_max_row = arr[1].replace(/^[A-Z]+/, '');\n var max_row;\n if (str_max_row === '' && sheet['!ref']) {\n str_max_row = sheet['!ref'].split(':')[1].replace(/^[A-Z]+/, '');\n }\n // the max is 1048576, but TLE\n max_row = parseInt(str_max_row == '' ? '500000' : str_max_row, 10);\n var min_col = col_str_2_int(arr[0]);\n var max_col = col_str_2_int(arr[1]);\n var matrix = [];\n for (var i = min_row; i <= max_row; i++) {\n var row = [];\n matrix.push(row);\n for (var j = min_col; j <= max_col; j++) {\n var cell_name = int_2_col_str(j) + i;\n var cell_full_name = sheet_name + '!' + cell_name;\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n } else if (formula_ref.status === 'working') {\n if (formula_ref.cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n }\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else if (sheet[cell_name]) {\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else {\n row.push(null);\n }\n }\n }\n return matrix;\n };\n};\n","\"use strict\";\n\nmodule.exports = function getSanitizedSheetName(sheet_name) {\n var quotedMatch = sheet_name.match(/^'(.*)'$/);\n if (quotedMatch) {\n return quotedMatch[1];\n }\n else {\n return sheet_name;\n }\n};\n","const RawValue = require('./RawValue.js');\nconst RefValue = require('./RefValue.js');\nconst LazyValue = require('./LazyValue.js');\nconst Range = require('./Range.js');\n\n// this is used to _cache_ range names so that it doesn't need to be queried\n// every time a range is used\nlet definedNames, wb;\nfunction getDefinedName(buffer, formula) {\n if (!(formula.wb.Workbook && formula.wb.Workbook.Names)) {\n return null;\n }\n if (wb !== formula.wb) {\n wb = formula.wb;\n definedNames = null;\n return getDefinedName(buffer, formula);\n }\n if (definedNames) {\n return definedNames[buffer];\n }\n const keys = Object.values(formula.wb.Workbook.Names);\n if (keys.length === 0) {\n return;\n }\n definedNames = {};\n keys.forEach(({ Name, Ref }) => {\n if (!Name.includes('.')) {\n definedNames[Name] = Ref;\n }\n });\n\n return getDefinedName(buffer, formula);\n}\n\nmodule.exports = function str_2_val(buffer, formula) {\n if (!isNaN(buffer)) {\n return new RawValue(+buffer);\n }\n if (buffer === 'TRUE') {\n return new RawValue(1);\n }\n if (typeof buffer !== 'string') {\n return buffer;\n }\n\n buffer = buffer.trim().replace(/\\$/g, '')\n\n if (buffer.match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/%$/)) {\n var inner = str_2_val(buffer.substr(0, buffer.length-1), formula)\n return new LazyValue(() => inner.calc() / 100)\n }\n if (getDefinedName(buffer, formula)) {\n return str_2_val(getDefinedName(buffer, formula), formula);\n }\n return buffer;\n};\n","\"use strict\";\n\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function RefValue(str_expression, formula) {\n var self = this;\n this.name = 'RefValue';\n this.str_expression = str_expression;\n this.formula = formula;\n\n self.parseRef = function() {\n var sheet, sheet_name, cell_name, cell_full_name;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n sheet = formula.wb.Sheets[sheet_name];\n cell_name = aux[1];\n }\n else {\n sheet = formula.sheet;\n sheet_name = formula.sheet_name;\n cell_name = str_expression;\n }\n if (!sheet) {\n throw Error(\"Sheet \" + sheet_name + \" not found.\");\n }\n cell_full_name = sheet_name + '!' + cell_name;\n return {\n sheet: sheet,\n sheet_name: sheet_name,\n cell_name: cell_name,\n cell_full_name: cell_full_name\n };\n };\n\n this.calc = function() {\n var resolved_ref = self.parseRef();\n var sheet = resolved_ref.sheet;\n var cell_name = resolved_ref.cell_name;\n var cell_full_name = resolved_ref.cell_full_name;\n var ref_cell = sheet[cell_name];\n if (!ref_cell) {\n return null;\n }\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n if (ref_cell.t === 'e') {\n console.log('ref is an error with new formula', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n else if (formula_ref.status === 'working') {\n if (ref_cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n return this.calc();\n }\n else if (formula_ref.status === 'done') {\n if (ref_cell.t === 'e') {\n console.log('ref is an error after formula eval', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n }\n else {\n if (ref_cell.t === 'e') {\n console.log('ref is an error with no formula', cell_name);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n };\n};\n","\"use strict\";\n\nmodule.exports = function find_all_cells_with_formulas(wb, exec_formula) {\n let formula_ref = {};\n let cells = [];\n for (let sheet_name in wb.Sheets) {\n let sheet = wb.Sheets[sheet_name];\n for (let cell_name in sheet) {\n if (sheet[cell_name] && sheet[cell_name].f) {\n let formula = formula_ref[sheet_name + '!' + cell_name] = {\n formula_ref: formula_ref,\n wb: wb,\n sheet: sheet,\n sheet_name: sheet_name,\n cell: sheet[cell_name],\n name: cell_name,\n status: 'new',\n exec_formula: exec_formula\n };\n cells.push(formula);\n }\n }\n }\n return cells;\n};\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst exec_formula = require('./exec_formula.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\nconst Calculator = require('./Calculator.js');\n\nvar mymodule = function(workbook, options) {\n var formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (var i = formulas.length - 1; i >= 0; i--) {\n try {\n exec_formula(formulas[i]);\n } catch (error) {\n if (!options || !options.continue_after_error) {\n throw error\n }\n if (options.log_error) {\n console.log('error executing formula', 'sheet', formulas[i].sheet_name, 'cell', formulas[i].name, error)\n }\n }\n }\n};\n\nmymodule.calculator = function calculator(workbook) {\n return new Calculator(workbook, exec_formula);\n};\n\nmymodule.set_fx = exec_formula.set_fx;\nmymodule.exec_fx = exec_formula.exec_fx;\nmymodule.col_str_2_int = col_str_2_int;\nmymodule.int_2_col_str = int_2_col_str;\nmymodule.import_functions = exec_formula.import_functions;\nmymodule.import_raw_functions = exec_formula.import_raw_functions;\nmymodule.xlsx_Fx = exec_formula.xlsx_Fx;\nmymodule.localizeFunctions = exec_formula.localizeFunctions;\n\nmymodule.XLSX_CALC = mymodule\n\nmodule.exports = mymodule;\n","\"use strict\";\n\nconst expression_builder = require('./expression_builder.js');\n\nlet xlsx_Fx = {};\nlet xlsx_raw_Fx = {};\n\nimport_functions(require('./formulas.js'));\nimport_raw_functions(require('./formulas-raw.js'));\n\nfunction import_raw_functions(functions, opts) {\n for (var key in functions) {\n xlsx_raw_Fx[key] = functions[key];\n }\n}\n\nfunction import_functions(formulajs, opts) {\n opts = opts || {};\n var prefix = opts.prefix || '';\n for (var key in formulajs) {\n var obj = formulajs[key];\n if (typeof(obj) === 'function') {\n if (opts.override || !xlsx_Fx[prefix + key]) {\n xlsx_Fx[prefix + key] = obj;\n }\n // else {\n // console.log(prefix + key, 'already exists.');\n // console.log(' to override:');\n // console.log(' XLSX_CALC.import_functions(yourlib, {override: true})');\n // }\n }\n else if (typeof(obj) === 'object') {\n import_functions(obj, my_assign(opts, { prefix: key + '.' }));\n }\n }\n}\n\nfunction my_assign(dest, source) {\n var obj = JSON.parse(JSON.stringify(dest));\n for (var k in source) {\n obj[k] = source[k];\n }\n return obj;\n}\n\nfunction build_expression(formula) {\n return expression_builder(formula, {xlsx_Fx: xlsx_Fx, xlsx_raw_Fx: xlsx_raw_Fx});\n}\n\nfunction exec_formula(formula) {\n let root_exp = build_expression(formula);\n root_exp.update_cell_value();\n}\n\nexec_formula.set_fx = function set_fx(name, fn) {\n xlsx_Fx[name] = fn;\n};\n\nexec_formula.exec_fx = function exec_fx(name, args) {\n return xlsx_Fx[name].apply(this, args);\n};\n\nexec_formula.localizeFunctions = function(dic) {\n for (let newName in dic) {\n let oldName = dic[newName];\n if (xlsx_Fx[oldName]) {\n xlsx_Fx[newName] = xlsx_Fx[oldName];\n }\n if (xlsx_raw_Fx[oldName]) {\n xlsx_raw_Fx[newName] = xlsx_raw_Fx[oldName];\n }\n }\n};\n\nexec_formula.import_functions = import_functions;\nexec_formula.import_raw_functions = import_raw_functions;\nexec_formula.build_expression = build_expression;\nexec_formula.xlsx_Fx = xlsx_Fx;\nmodule.exports = exec_formula;\n","const Exp = require('./Exp.js');\nconst RawValue = require('./RawValue.js');\nconst UserFnExecutor = require('./UserFnExecutor.js');\nconst UserRawFnExecutor = require('./UserRawFnExecutor.js');\nconst common_operations = {\n '*': 'multiply',\n '+': 'plus',\n '-': 'minus',\n '/': 'divide',\n '^': 'power',\n '&': 'concat',\n '<': 'lt',\n '>': 'gt',\n '=': 'eq'\n};\n\nmodule.exports = function expression_builder(formula, opts) {\n formula.status = 'working';\n\n var xlsx_Fx = opts.xlsx_Fx || {};\n var xlsx_raw_Fx = opts.xlsx_raw_Fx || {};\n\n var root_exp;\n var str_formula = formula.cell.f;\n if (str_formula[0] == '=') {\n str_formula = str_formula.substr(1);\n }\n var exp_obj = root_exp = new Exp(formula);\n var buffer = '',\n was_string = false;\n var fn_stack = [{\n exp: exp_obj\n }];\n\n /**\n * state pattern in functional way\n */\n function string(char) {\n if (char === '\"') {\n exp_obj.push(new RawValue(buffer));\n was_string = true;\n buffer = '';\n state = start;\n } else {\n buffer += char;\n }\n }\n\n function single_quote(char) {\n if (char === \"'\") {\n state = start;\n }\n buffer += char;\n }\n\n function ini_parentheses() {\n var o, trim_buffer = buffer.trim(),\n special = xlsx_Fx[trim_buffer];\n var special_raw = xlsx_raw_Fx[trim_buffer];\n if (special_raw) {\n special = new UserRawFnExecutor(special_raw, formula);\n }\n else if (special) {\n special = new UserFnExecutor(special, formula);\n }\n else if (trim_buffer) {\n //Error: \"Worksheet 1\"!D145: Function INDEX not found\n throw new Error('\"' + formula.sheet_name + '\"!' + formula.name + ': Function ' + buffer + ' not found');\n }\n o = new Exp(formula);\n fn_stack.push({\n exp: o,\n special: special\n });\n exp_obj = o;\n buffer = '';\n }\n\n function end_parentheses() {\n var v, stack = fn_stack.pop();\n exp_obj = stack.exp;\n exp_obj.push(buffer);\n v = exp_obj;\n buffer = '';\n exp_obj = fn_stack[fn_stack.length - 1].exp;\n if (stack.special) {\n stack.special.push(v);\n exp_obj.push(stack.special);\n }\n else {\n exp_obj.push(v);\n }\n }\n\n function add_operation(char) {\n if (!was_string) {\n exp_obj.push(buffer);\n }\n was_string = false;\n exp_obj.push(char);\n buffer = '';\n }\n\n function start(char) {\n if (char === '\"') {\n state = string;\n buffer = '';\n } else if (char === \"'\") {\n state = single_quote;\n buffer = \"'\";\n } else if (char === '(') {\n ini_parentheses();\n } else if (char === ')') {\n end_parentheses();\n } else if (common_operations[char]) {\n add_operation(char);\n } else if (char === ',' && fn_stack[fn_stack.length - 1].special) {\n was_string = false;\n fn_stack[fn_stack.length - 1].exp.push(buffer);\n fn_stack[fn_stack.length - 1].special.push(fn_stack[fn_stack.length - 1].exp);\n fn_stack[fn_stack.length - 1].exp = exp_obj = new Exp(formula);\n buffer = '';\n } else if (char !== ' ') {\n buffer += char;\n }\n }\n \n var state = start;\n\n for (var i = 0; i < str_formula.length; i++) {\n state(str_formula[i]);\n }\n root_exp.push(buffer);\n return root_exp;\n\n}","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst str_2_val = require('./str_2_val.js');\nconst dynamicArrayFormulas = require('./dynamic_array_formulas.js');\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nvar exp_id = 0;\n\nmodule.exports = function Exp(formula) {\n var self = this;\n self.id = ++exp_id;\n self.args = [];\n self.name = 'Expression';\n self.update_cell_value = update_cell_value;\n self.formula = formula;\n \n function update_cell_value() {\n try {\n if (Array.isArray(self.args) \n && self.args.length === 1\n && self.args[0] instanceof Range) {\n throw Error('#VALUE!');\n }\n formula.cell.v = self.calc();\n formula.cell.t = getCellType(formula.cell.v);\n\n if (Array.isArray(formula.cell.v && formula.cell.name && formula.cell.f && formula.cell.f.match(new RegExp(dynamicArrayFormulas.join('|'), 'i')))) {\n const array = formula.cell.v;\n if (!validateResultMatrix(array)) {\n throw new Error('#N/A');\n }\n\n const existingCell = formula.cell.name;\n const existingCellLetter = existingCell.match(/[A-Z]+/)[0];\n const existingCellNumber = existingCell.match(/[0-9]+/)[0];\n\n for (let i = 0; i < array.length; i++) {\n const newCellNumber = parseInt(existingCellNumber) + i;\n\n for (let j = 0; j < array[i].length; j++) {\n const newCellValue = array[i][j];\n let newCellType = getCellType(newCellValue);\n\n // original cell\n if (i === 0 && j === 0) {\n formula.cell.v = newCellValue;\n if (newCellType) formula.cell.t = newCellType;\n } \n // other cells\n else {\n const newLetterIndex = existingCellLetter.charCodeAt(0) - 65 + j;\n const newCellLetter = getCellLetter(newLetterIndex);\n\n const newCell = newCellLetter + newCellNumber;\n formula.sheet[newCell] = {\n v: newCellValue,\n t: newCellType,\n };\n }\n }\n }\n }\n }\n catch (e) {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n };\n if (errorValues[e.message] !== undefined) {\n formula.cell.t = 'e';\n formula.cell.w = e.message;\n formula.cell.v = errorValues[e.message];\n }\n else {\n throw e;\n }\n }\n finally {\n formula.status = 'done';\n }\n }\n\n function getCellLetter(columnIndex) {\n let newCellLetter = '';\n while (newLetterIndex >= 0) {\n newCellLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[newLetterIndex % 26] + newCellLetter;\n newLetterIndex = Math.floor(newLetterIndex / 26) - 1;\n }\n }\n\n function getCellType(cellValue) {\n if (typeof(cellValue) === 'string') {\n return 's';\n }\n else if (typeof(cellValue) === 'number') {\n return 'n';\n }\n }\n\n function validateResultMatrix(result) {\n // array must be greater than 0 and be symmetrical\n if (Array.isArray(result)) {\n for (let i = 0; i < result.length; i++) {\n if (!(result[i] instanceof Array)) {\n return false;\n }\n if (result[i].length !== result[0].length) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n function isEmpty(value) {\n return value === undefined || value === null || value === \"\";\n }\n \n function checkVariable(obj) {\n if (typeof obj.calc !== 'function') {\n throw new Error('Undefined ' + obj);\n }\n }\n\n function getCurrentCellIndex() {\n return +self.formula.name.replace(/[^0-9]/g, '');\n }\n \n function exec(op, args, fn) {\n for (var i = 0; i < args.length; i++) {\n if (args[i] === op) {\n try {\n if (i===0 && op==='+') {\n checkVariable(args[i + 1]);\n let r = args[i + 1].calc();\n args.splice(i, 2, new RawValue(r));\n } else {\n checkVariable(args[i - 1]);\n checkVariable(args[i + 1]);\n\n let a = args[i - 1].calc();\n let b = args[i + 1].calc();\n if (Array.isArray(a)) {\n a = a[getCurrentCellIndex() - 1][0];\n }\n if (Array.isArray(b)) {\n b = b[getCurrentCellIndex() - 1][0];\n }\n\n let r = fn(a, b);\n args.splice(i - 1, 3, new RawValue(r));\n i--;\n }\n }\n catch (e) {\n // console.log('[Exp.js] - ' + formula.name + ': evaluating ' + formula.cell.f + '\\n' + e.message);\n throw e;\n }\n }\n }\n }\n\n function exec_minus(args) {\n for (var i = args.length; i--;) {\n if (args[i] === '-') {\n checkVariable(args[i + 1]);\n var b = args[i + 1].calc();\n if (i > 0 && typeof args[i - 1] !== 'string') {\n args.splice(i, 1, '+');\n if (b instanceof Date) {\n b = Date.parse(b);\n checkVariable(args[i - 1]);\n var a = args[i - 1].calc();\n if (a instanceof Date) {\n a = Date.parse(a) / MS_PER_DAY;\n b = b / MS_PER_DAY;\n args.splice(i - 1, 1, new RawValue(a));\n }\n }\n args.splice(i + 1, 1, new RawValue(-b));\n }\n else {\n if (typeof b === 'string') {\n throw new Error('#VALUE!');\n }\n args.splice(i, 2, new RawValue(-b));\n }\n }\n }\n }\n\n self.calc = function() {\n let args = self.args.concat();\n exec('^', args, function(a, b) {\n return Math.pow(+a, +b);\n });\n exec_minus(args);\n exec('/', args, function(a, b) {\n if (b == 0) {\n throw Error('#DIV/0!');\n }\n return (+a) / (+b);\n });\n exec('*', args, function(a, b) {\n return (+a) * (+b);\n });\n exec('+', args, function(a, b) {\n if (a instanceof Date && typeof b === 'number') {\n b = b * MS_PER_DAY;\n }\n return (+a) + (+b);\n });\n exec('&', args, function(a, b) {\n return '' + a + b;\n });\n exec('<', args, function(a, b) {\n return a < b;\n });\n exec('>', args, function(a, b) {\n return a > b;\n });\n exec('>=', args, function(a, b) {\n return a >= b;\n });\n exec('<=', args, function(a, b) {\n return a <= b;\n });\n exec('<>', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() !== b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return false;\n }\n return a !== b;\n });\n exec('=', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return true;\n }\n if ((a == null && b === 0) || (a === 0 && b == null)) {\n return true;\n }\n if (typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase()) {\n return true;\n }\n return a === b;\n });\n if (args.length == 1) {\n if (typeof(args[0].calc) !== 'function') {\n return args[0];\n }\n else {\n return args[0].calc();\n }\n }\n };\n\n var last_arg;\n self.push = function(buffer) {\n if (buffer) {\n var v = str_2_val(buffer, formula);\n if (((v === '=') && (last_arg == '>' || last_arg == '<')) || (last_arg == '<' && v === '>')) {\n self.args[self.args.length - 1] += v;\n }\n else {\n self.args.push(v);\n }\n last_arg = v;\n //console.log(self.id, '-->', v);\n }\n };\n};","\"use strict\";\n\nmodule.exports = function LazyValue(fn) {\n this.calc = function() {\n return fn();\n };\n};\n","const dynamicArrayFormulas = [\n 'FILTER',\n];\n\nmodule.exports = dynamicArrayFormulas;","\"use strict\";\n\nmodule.exports = function UserFnExecutor(user_function) {\n var self = this;\n self.name = 'UserFn';\n self.args = [];\n self.calc = function() {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n }, result;\n try {\n result = user_function.apply(self, self.args.map(f=>f.calc()));\n } catch (e) {\n if (user_function.name === 'is_blank'\n && errorValues[e.message] !== undefined) {\n // is_blank applied to an error cell doesn't propagate the error\n result = 0;\n }\n else if (user_function.name === 'iserror'\n && errorValues[e.message] !== undefined) {\n // iserror applied to an error doesn't propagate the error and returns true\n result = true;\n }\n else {\n throw e;\n }\n }\n return result;\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};","\"use strict\";\n\nmodule.exports = function UserRawFnExecutor(user_function, formula) {\n var self = this;\n self.name = 'UserRawFn';\n self.args = [];\n self.calc = function() {\n try {\n return user_function.apply(self, self.args);\n } catch(e) {\n // debug\n // console.log('----------------', user_function);\n // console.log(formula.name);\n // console.log(self);\n throw e;\n }\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};\n","\"use strict\";\n\n// +---------------------+\n// | FORMULAS REGISTERED |\n// +---------------------+\nlet formulas = {\n 'FLOOR': Math.floor,\n '_xlfn.FLOOR.MATH': Math.floor,\n 'FLOOR.MATH': Math.floor,\n 'ABS': Math.abs,\n 'SQRT': Math.sqrt,\n 'VLOOKUP': vlookup,\n 'MAX': max,\n 'SUM': sum,\n 'MIN': min,\n 'CONCATENATE': concatenate,\n 'PMT': pmt,\n 'COUNTA': counta,\n 'IRR': irr,\n 'NORM.INV': normsInv,\n '_xlfn.NORM.INV': normsInv,\n 'STDEV': stDeviation,\n 'AVERAGE': avg,\n 'EXP': EXP,\n 'LN': Math.log,\n '_xlfn.VAR.P': var_p,\n 'VAR.P': var_p,\n '_xlfn.COVARIANCE.P': covariance_p,\n 'COVARIANCE.P': covariance_p,\n 'TRIM': trim,\n 'LEN': len,\n 'ISBLANK': is_blank,\n 'HLOOKUP': hlookup,\n 'INDEX': index,\n 'MATCH': match,\n 'SUMPRODUCT': sumproduct,\n 'ISNUMBER': isnumber,\n 'TODAY': today,\n 'ISERROR': iserror,\n 'TIME': time,\n 'DAY': day,\n 'MONTH': month,\n 'YEAR': year,\n 'RIGHT': right,\n 'LEFT': left,\n 'IFS': ifs,\n 'ROUND': round,\n 'CORREL': correl, // missing test\n 'SUMIF': sumif, // missing test,\n 'CHOOSE': choose,\n 'SUBSTITUTE': substitute,\n 'CEILING': ceiling,\n};\n\nfunction choose(option) {\n return arguments[option];\n}\n\nfunction sumif(){\n\n let elementToSum = arguments[1];\n let sumResult = 0;\n\n [].slice.call(arguments)[0][0].forEach((elt,key) =>{\n \n if (elt!==null){\n //if the element is not a string but a number, number has no replace function, so converting to string.\n elt = elt.toString();\n if( elt.replace(/\\'/g, \"\") === elementToSum){\n if (!isNaN([].slice.call(arguments)[2][0][key])){\n sumResult += [].slice.call(arguments)[2][0][key]\n }\n }\n }\n });\n return sumResult\n}\n\nfunction correl(a,b){\n\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n\n if (a.length !== b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / (a.length-1);\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n var sa = 0;\n var sb=0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n\n sa+=Math.pow(a[i],2);\n sb+=Math.pow(b[i],2);\n }\n\n sa=Math.sqrt(sa/inv_n);\n sb=Math.sqrt(sb/inv_n);\n\n return s / (inv_n*sa*sb);\n}\n\nfunction round(value, decimalPlaces) {\n if (arguments.length === 0) throw new Error(\"Err:511\");\n if (arguments.length === 1) return Math.round(value);\n let roundMeasure = Math.pow(10, decimalPlaces);\n return Math.round(roundMeasure*value)/roundMeasure\n}\n\nfunction today() {\n var today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n}\n\nfunction isnumber(x) {\n return !isNaN(x);\n}\n\nfunction sumproduct() {\n var parseNumber = function (string) {\n if (string === undefined || string === '' || string === null) {\n return 0;\n }\n if (!isNaN(string)) {\n return parseFloat(string);\n }\n return 0;\n },\n consistentSizeRanges = function (matrixArray) {\n var getRowCount = function(matrix) {\n return matrix.length;\n },\n getColCount = function(matrix) {\n return matrix[0].length;\n },\n rowCount = getRowCount(matrixArray[0]),\n colCount = getColCount(matrixArray[0]);\n\n for (var i = 1; i < matrixArray.length; i++) {\n if (getRowCount(matrixArray[i]) !== rowCount\n || getColCount(matrixArray[i]) !== colCount) {\n return false;\n }\n }\n return true;\n };\n\n if (!arguments || arguments.length === 0) {\n throw Error('#VALUE!');\n }\n if (!consistentSizeRanges(arguments)) {\n throw Error('#VALUE!');\n }\n // throw error if any of the cells passed in arguments is in error\n for (var i = 0; i < arguments.length; i++) {\n var row = arguments[i];\n if (Array.isArray(row)) {\n for (var j = 0; j < row.length; j++) {\n var col = row[j];\n if (Array.isArray(col)) {\n for (var k = 0; k < col.length; k++) {\n var cell = col[k];\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n else {\n var cell = col;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n }\n else {\n var cell = row;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n\n var arrays = arguments.length + 1;\n var result = 0;\n var product;\n var k;\n var _i;\n var _ij;\n for (var i = 0; i < arguments[0].length; i++) {\n if (!(arguments[0][i] instanceof Array)) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _i = parseNumber(arguments[k - 1][i]);\n\n product *= _i;\n }\n result += product;\n } else {\n for (var j = 0; j < arguments[0][i].length; j++) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _ij = parseNumber(arguments[k - 1][i][j]);\n\n product *= _ij;\n }\n result += product;\n }\n }\n }\n return result;\n}\n\nfunction match_less_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] < lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] > indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match_exactly_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n lookupValue = lookupValue.replace(/\\?/g, '.');\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1\n && typeof matrix[idx][0] === 'string') {\n if (matrix[idx][0].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n } else if (typeof matrix[idx] === 'string') {\n if (matrix[idx].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n\n }\n throw Error('#N/A');\n}\n\nfunction match_exactly_non_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1) {\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n }\n }\n } else if (matrix[idx] === lookupValue) {\n return idx + 1;\n }\n }\n throw Error('#N/A');\n}\n\n// +---------------------+\n// | THE IMPLEMENTATIONS |\n// +---------------------+\n\n\nfunction match_greater_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx]) && matrix[idx].length > 0) {\n // For array in column\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx][0] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n } else if (matrix[idx][0] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n }\n }\n } else {\n // For array in row\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match(lookupValue, matrix, matchType) {\n if (Array.isArray(matrix)\n && matrix.length === 1\n && Array.isArray(matrix[0])) {\n matrix = matrix[0];\n }\n if (!lookupValue && !matrix) {\n throw Error('#N/A');\n }\n if (arguments.length === 2) {\n matchType = 1;\n }\n if (!(matrix instanceof Array)) {\n throw Error('#N/A');\n }\n if (matchType === 0) {\n if (typeof lookupValue === 'string') {\n return match_exactly_string(matrix, lookupValue);\n } else {\n return match_exactly_non_string(matrix, lookupValue);\n }\n } else if (matchType === 1) {\n return match_less_than_or_equal(matrix, lookupValue);\n } else if (matchType === -1) {\n return match_greater_than_or_equal(matrix, lookupValue);\n } else {\n throw Error('#N/A');\n }\n}\n\nfunction index(matrix, row_num, column_num) {\n if (row_num <= matrix.length) {\n var row = matrix[row_num - 1];\n if (Array.isArray(row)) {\n if (!column_num) {\n return row;\n } else if (column_num <= row.length) {\n return row[column_num - 1];\n }\n } else {\n return matrix[row_num];\n }\n }\n throw Error('#REF!');\n}\n\n// impl ported from https://github.com/FormulaPages/hlookup\nfunction hlookup(needle, table, index, exactmatch) {\n if (typeof needle === \"undefined\" || (0, is_blank)(needle)) {\n throw Error('#N/A');\n }\n\n index = index || 0;\n let row = table[0], i, searchingFor;\n\n if (typeof needle === 'string') {\n searchingFor = needle.toLowerCase();\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i].toLowerCase().indexOf(searchingFor) !== -1) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n } else {\n searchingFor = needle;\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i] === searchingFor) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n }\n throw Error('#N/A');\n}\n\nfunction len(a) {\n return ('' + a).length;\n}\n\nfunction trim(a) {\n return ('' + a).trim();\n}\n\nfunction is_blank(a) {\n // console.log(a)\n return !a;\n}\n\nfunction covariance_p(a, b) {\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n if (a.length != b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / a.length;\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n }\n return s * inv_n;\n}\n\nfunction getArrayOfNumbers(range) {\n var arr = [];\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n if (typeof(matrix[j]) == 'number') {\n arr.push(matrix[j]);\n }\n else if (Array.isArray(matrix[j])) {\n for (var k = matrix[j].length; k--;) {\n if (typeof(matrix[j][k]) == 'number') {\n arr.push(matrix[j][k]);\n }\n }\n }\n // else {\n // wtf is that?\n // }\n }\n }\n else {\n if (typeof(arg) == 'number') {\n arr.push(arg);\n }\n }\n }\n return arr;\n}\n\nfunction var_p() {\n var average = avg.apply(this, arguments);\n var s = 0.0;\n var c = 0;\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n s += Math.pow(matrix[j][k] - average, 2);\n c++;\n }\n }\n }\n }\n else {\n s += Math.pow(arg - average, 2);\n c++;\n }\n }\n return s / c;\n}\n\nfunction EXP(n) {\n return Math.pow(Math.E, n);\n}\n\nfunction avg() {\n var aux = counta.apply(this, arguments);\n if (aux == 0) {\n throw Error('#DIV/0!');\n }\n return sum.apply(this, arguments) / aux;\n}\n\nfunction stDeviation() {\n var array = getArrayOfNumbers(arguments);\n\n function _mean(array) {\n return array.reduce(function(a, b) {\n return a + b;\n }) / array.length;\n }\n var mean = _mean(array),\n dev = array.map(function(itm) {\n return (itm - mean) * (itm - mean);\n });\n return Math.sqrt(dev.reduce(function(a, b) {\n return a + b;\n }) / (array.length - 1));\n}\n\n/// Original C++ implementation found at http://www.wilmott.com/messageview.cfm?catid=10&threadid=38771\n/// C# implementation found at http://weblogs.asp.net/esanchez/archive/2010/07/29/a-quick-and-dirty-implementation-of-excel-norminv-function-in-c.aspx\n/*\n * Compute the quantile function for the normal distribution.\n *\n * For small to moderate probabilities, algorithm referenced\n * below is used to obtain an initial approximation which is\n * polished with a final Newton step.\n *\n * For very large arguments, an algorithm of Wichura is used.\n *\n * REFERENCE\n *\n * Beasley, J. D. and S. G. Springer (1977).\n * Algorithm AS 111: The percentage points of the normal distribution,\n * Applied Statistics, 26, 118-121.\n *\n * Wichura, M.J. (1988).\n * Algorithm AS 241: The Percentage Points of the Normal Distribution.\n * Applied Statistics, 37, 477-484.\n */\nfunction normsInv(p, mu, sigma) {\n if (p < 0 || p > 1) {\n throw \"The probality p must be bigger than 0 and smaller than 1\";\n }\n if (sigma < 0) {\n throw \"The standard deviation sigma must be positive\";\n }\n\n if (p == 0) {\n return -Infinity;\n }\n if (p == 1) {\n return Infinity;\n }\n if (sigma == 0) {\n return mu;\n }\n\n var q, r, val;\n\n q = p - 0.5;\n\n /*-- use AS 241 --- */\n /* double ppnd16_(double *p, long *ifault)*/\n /* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3\n Produces the normal deviate Z corresponding to a given lower\n tail area of P; Z is accurate to about 1 part in 10**16.\n */\n if (Math.abs(q) <= .425) { /* 0.075 <= p <= 0.925 */\n r = .180625 - q * q;\n val =\n q * (((((((r * 2509.0809287301226727 +\n 33430.575583588128105) * r + 67265.770927008700853) * r +\n 45921.953931549871457) * r + 13731.693765509461125) * r +\n 1971.5909503065514427) * r + 133.14166789178437745) * r +\n 3.387132872796366608) / (((((((r * 5226.495278852854561 +\n 28729.085735721942674) * r + 39307.89580009271061) * r +\n 21213.794301586595867) * r + 5394.1960214247511077) * r +\n 687.1870074920579083) * r + 42.313330701600911252) * r + 1);\n }\n else { /* closer than 0.075 from {0,1} boundary */\n\n /* r = min(p, 1-p) < 0.075 */\n if (q > 0)\n r = 1 - p;\n else\n r = p;\n\n r = Math.sqrt(-Math.log(r));\n /* r = sqrt(-log(r)) <==> min(p, 1-p) = exp( - r^2 ) */\n\n if (r <= 5) { /* <==> min(p,1-p) >= exp(-25) ~= 1.3888e-11 */\n r += -1.6;\n val = (((((((r * 7.7454501427834140764e-4 +\n .0227238449892691845833) * r + .24178072517745061177) *\n r + 1.27045825245236838258) * r +\n 3.64784832476320460504) * r + 5.7694972214606914055) *\n r + 4.6303378461565452959) * r +\n 1.42343711074968357734) / (((((((r *\n 1.05075007164441684324e-9 + 5.475938084995344946e-4) *\n r + .0151986665636164571966) * r +\n .14810397642748007459) * r + .68976733498510000455) *\n r + 1.6763848301838038494) * r +\n 2.05319162663775882187) * r + 1);\n }\n else { /* very close to 0 or 1 */\n r += -5;\n val = (((((((r * 2.01033439929228813265e-7 +\n 2.71155556874348757815e-5) * r +\n .0012426609473880784386) * r + .026532189526576123093) *\n r + .29656057182850489123) * r +\n 1.7848265399172913358) * r + 5.4637849111641143699) *\n r + 6.6579046435011037772) / (((((((r *\n 2.04426310338993978564e-15 + 1.4215117583164458887e-7) *\n r + 1.8463183175100546818e-5) * r +\n 7.868691311456132591e-4) * r + .0148753612908506148525) * r + .13692988092273580531) * r +\n .59983220655588793769) * r + 1);\n }\n\n if (q < 0.0) {\n val = -val;\n }\n }\n\n return mu + sigma * val;\n}\n\nfunction irr(range, guess) {\n var min = -2.0;\n var max = 1.0;\n var n = 0;\n do {\n var guest = (min + max) / 2;\n var NPV = 0;\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n NPV += arg[0] / Math.pow((1 + guest), i);\n }\n if (NPV > 0) {\n if (min === max) {\n max += Math.abs(guest);\n }\n min = guest;\n }\n else {\n max = guest;\n }\n n++;\n } while (Math.abs(NPV) > 0.000001 && n < 100000);\n //console.log(n);\n return guest;\n}\n\nfunction counta() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n r++;\n }\n }\n }\n }\n else {\n if (arg !== null && arg !== undefined) {\n r++;\n }\n }\n }\n return r;\n}\n\nfunction pmt(rate_per_period, number_of_payments, present_value, future_value, type) {\n type = type || 0;\n future_value = future_value || 0;\n if (rate_per_period != 0.0) {\n // Interest rate exists\n var q = Math.pow(1 + rate_per_period, number_of_payments);\n return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));\n\n }\n else if (number_of_payments != 0.0) {\n // No interest rate, but number of payments exists\n return -(future_value + present_value) / number_of_payments;\n }\n return 0;\n}\n\nfunction concatenate() {\n var r = '';\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (arg === null || arg === undefined) continue;\n r += arg;\n }\n return r;\n}\n\nfunction sum() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (!isNaN(matrix[j][k])) {\n r += +matrix[j][k];\n }\n }\n }\n }\n else {\n r += +arg;\n }\n }\n return r;\n}\n\nfunction max() {\n var max = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (max == null || (col[k] != null && max < col[k])) {\n max = col[k];\n }\n }\n }\n else if (max == null || (col != null && max < col)) {\n max = col;\n }\n }\n }\n else if (!isNaN(arg) && (max == null || (arg != null && max < arg))) {\n max = arg;\n }\n }\n return max;\n}\n\nfunction min() {\n var min = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (min == null || (col[k] != null && min > col[k])) {\n min = col[k];\n }\n }\n }\n else if (min == null || (col != null && min > col)) {\n min = col;\n }\n }\n }\n else if (!isNaN(arg) && (min == null || (arg != null && min > arg))) {\n min = arg;\n }\n }\n return min;\n}\n\nfunction vlookup(key, matrix, return_index, range_lookup=true) {\n var val = null;\n for (var i = 0; i < matrix.length; i++) {\n if (matrix[i][0] < key) {\n val = matrix[i][return_index - 1];\n }\n else if (matrix[i][0] == key) {\n return matrix[i][return_index - 1];\n }\n }\n if (range_lookup && val) {\n return val;\n }\n throw Error('#N/A');\n}\n\nfunction iserror() {\n // if an error is catched before getting there, true will be returned from the catch block\n // if we get here then it's not an error\n return false;\n}\n\nfunction time(hours, minutes, seconds) {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n return ((hours * 60 + minutes) * 60 + seconds) * 1000 / MS_PER_DAY;\n}\n\nfunction day(date) {\n if (!date.getDate) {\n throw Error('#VALUE!');\n }\n var day = date.getDate();\n if (isNaN(day)) {\n throw Error('#VALUE!');\n }\n return day;\n}\n\nfunction month(date) {\n if (!date.getMonth) {\n throw Error('#VALUE!');\n }\n var month = date.getMonth();\n if (isNaN(month)) {\n throw Error('#VALUE!');\n }\n return month + 1;\n}\n\nfunction year(date) {\n if (!date.getFullYear) {\n throw Error('#VALUE!');\n }\n var year = date.getFullYear();\n if (isNaN(year)) {\n throw Error('#VALUE!');\n }\n return year;\n}\n\nfunction right(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(text.length - number);\n}\n\nfunction left(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(0, number);\n}\n\nfunction ifs(/*_cond1, _val1, _cond2, _val2, _cond3, _val3, ... */) {\n for (var i = 0; i + 1 < arguments.length; i+=2) {\n var cond = arguments[i];\n var val = arguments[i+1];\n if (cond) {\n return val;\n }\n }\n throw Error('#N/A');\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\nfunction substitute(text, old_text, new_text, occurrence) {\n if(occurrence <= 0) {\n throw Error('#VALUE!');\n }\n if (!text || !old_text || (!new_text && new_text !== '')) {\n return text;\n } else if (occurrence === undefined) {\n return text.replace(new RegExp(escapeRegExp(old_text), 'g'), new_text);\n } else {\n var index = 0;\n var i = 0;\n while (text.indexOf(old_text, index) > 0) {\n index = text.indexOf(old_text, index + 1);\n i++;\n if (i === occurrence) {\n return text.substring(0, index) + new_text + text.substring(index + old_text.length);\n }\n }\n }\n };\n\nfunction ceiling(number, significance) {\n return Math.ceil(number / significance) * significance\n}\n\nmodule.exports = formulas;\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst RefValue = require('./RefValue.js');\n\nfunction raw_offset(cell_ref, rows, columns, height, width) {\n height = (height || new RawValue(1)).calc();\n width = (width || new RawValue(1)).calc();\n if (cell_ref.args.length === 1 && cell_ref.args[0].name === 'RefValue') {\n var ref_value = cell_ref.args[0];\n var parsed_ref = ref_value.parseRef();\n var col = col_str_2_int(parsed_ref.cell_name) + columns.calc();\n var col_str = int_2_col_str(col);\n var row = +parsed_ref.cell_name.replace(/^[A-Z]+/g, '') + rows.calc();\n var cell_name = parsed_ref.sheet_name + '!' + col_str + row;\n if (height === 1 && width === 1) {\n return new RefValue(cell_name, ref_value.formula).calc();\n }\n else {\n var end_range_col = int_2_col_str(col + width - 1);\n var end_range_row = row + height - 1;\n var end_range = end_range_col + end_range_row;\n var str_expression = cell_name + ':' + end_range;\n return new Range(str_expression, ref_value.formula).calc();\n }\n }\n}\n\nfunction iferror(cell_ref, onerrorvalue) {\n try {\n var value = cell_ref.calc();\n if (typeof value === 'number' && (isNaN(value) || value === Infinity || value === -Infinity)) {\n return onerrorvalue.calc();\n }\n return value;\n } catch (e) {\n return onerrorvalue.calc();\n }\n}\n\nfunction _if(condition, _then, _else) {\n if (condition.calc()) {\n // console.log(condition.formula.name)\n // if (condition.formula.name === 'P40') {\n // console.log('P40 =', _then.calc());\n // console.log(' -->', _then.args[1].calc());\n // }\n return _then.calc();\n }\n else {\n if (typeof _else === 'undefined') {\n return false;\n } else {\n return _else.calc();\n }\n }\n}\n\nfunction and() {\n for (var i = 0; i < arguments.length; i++) {\n if (!arguments[i].calc()) return false;\n }\n return true;\n}\n\nfunction _or() {\n for (var i = 0; i < arguments.length; i++) {\n if (arguments[i].calc()) return true;\n }\n return false;\n}\n\nfunction transpose(expressionWithRange) {\n let range = expressionWithRange.args[0];\n // console.log(expressionWithRange.args[0])\n // console.log(expressionWithRange.formula.wb.Sheets.Sheet1)\n // console.log(range.calc())\n let matrix = range.calc();\n let cellName = expressionWithRange.formula.name;\n let colRow = cellName.match(/([A-Z]+)([0-9]+)/);\n let sheet = expressionWithRange.formula.sheet;\n // console.log(colRow[1], colRow[2]);\n // console.log(col_str_2_int(colRow[1]));\n let colNumber = col_str_2_int(colRow[1]);\n let rowNumber = +colRow[2];\n for (let i = 0; i < matrix.length; i++) {\n let matrixRow = matrix[i];\n for (let j = 0; j < matrixRow.length; j++) {\n let destinationColumn = colNumber + i;\n let destinationRow = rowNumber + j;\n let value = matrixRow[j];\n // console.log(int_2_col_str(destinationColumn), destinationRow, value);\n sheet[int_2_col_str(destinationColumn) + destinationRow].v = value;\n }\n }\n // console.log(expressionWithRange.formula.name)\n return matrix[0][0];\n}\n\nfunction filter(range, condition) {\n let data = range.calc();\n let conditions = condition.calc();\n let cellName = range.formula.name;\n let colAndRow = cellName.match(/([A-Z]+)([0-9]+)/);\n let sheet = range.formula.sheet;\n let colNumber = col_str_2_int(colAndRow[1]);\n let rowNumber = +colAndRow[2];\n\n let returnValue = sheet[cellName].v;\n for (let i = 0; i < conditions[0].length; i++) {\n if (conditions[0][i]) {\n for (let row = 0; row < data.length; row++) {\n let destinationColumn = colNumber + i;\n let destinationRow = rowNumber + row;\n let destinationCellName = int_2_col_str(destinationColumn) + destinationRow;\n\n if (sheet[destinationCellName]) {\n sheet[destinationCellName].v = data[row][i];\n if (destinationCellName === cellName) {\n returnValue = data[row][i];\n }\n } else {\n sheet[destinationCellName] = { v: data[row][i] };\n }\n }\n }\n }\n return returnValue;\n}\n\nmodule.exports = {\n 'OFFSET': raw_offset,\n 'IFERROR': iferror,\n 'IF': _if,\n 'AND': and,\n 'OR': _or,\n 'TRANSPOSE': transpose,\n 'FILTER': filter\n};\n","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst str_2_val = require('./str_2_val.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\n\nclass Calculator {\n \n constructor(workbook, exec_formula) {\n this.workbook = workbook;\n this.expressions = [];\n this.exec_formula = exec_formula;\n this.variables = {};\n this.formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (let i = this.formulas.length - 1; i >= 0; i--) {\n let exp = exec_formula.build_expression(this.formulas[i]);\n this.expressions.push(exp);\n }\n this.calcNames();\n }\n \n setVar(var_name, value) {\n let variable = this.variables[var_name];\n if (variable) {\n variable.setValue(value);\n } else {\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, var_name, value);\n });\n }\n }\n \n getVars() {\n let vars = {};\n for (let k in this.variables) {\n vars[k] = this.variables[k].calc();\n }\n return vars;\n }\n \n calcNames() {\n if (!this.workbook || !this.workbook.Workbook || !this.workbook.Workbook.Names) {\n return;\n }\n this.workbook.Workbook.Names.forEach(item => {\n let val = this.getRef(item.Ref);\n this.variables[item.Name] = val;\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, item.Name);\n });\n });\n }\n \n getRef(ref_name) {\n if (!this.formulas.length) {\n throw new Error(\"No formula found.\");\n }\n let first_formula = this.formulas[0];\n let formula_ref = first_formula.formula_ref;\n let formula = {\n formula_ref: formula_ref,\n wb: this.workbook,\n exec_formula: this.exec_formula\n };\n return str_2_val(ref_name, formula);\n }\n \n setVarOfExpression(exp, var_name, value) {\n for (let i = 0; i < exp.args.length; i++) {\n let arg = exp.args[i];\n if (arg === var_name) {\n exp.args[i] = this.variables[var_name] || (this.variables[var_name] = new RawValue(value));\n } else if (typeof arg === 'object' && (arg.name === 'Expression' || arg.name === 'UserFn')) {\n this.setVarOfExpression(arg, var_name, value);\n }\n }\n }\n \n execute() {\n this.expressions.forEach(exp => {\n exp.update_cell_value();\n });\n }\n}\n\nmodule.exports = Calculator;"],"sourceRoot":""} \ No newline at end of file diff --git a/src/Exp.js b/src/Exp.js index 474f560..6e23342 100644 --- a/src/Exp.js +++ b/src/Exp.js @@ -3,6 +3,7 @@ const RawValue = require('./RawValue.js'); const Range = require('./Range.js'); const str_2_val = require('./str_2_val.js'); +const dynamicArrayFormulas = require('./dynamic_array_formulas.js'); const MS_PER_DAY = 24 * 60 * 60 * 1000; @@ -24,11 +25,43 @@ module.exports = function Exp(formula) { throw Error('#VALUE!'); } formula.cell.v = self.calc(); - if (typeof(formula.cell.v) === 'string') { - formula.cell.t = 's'; - } - else if (typeof(formula.cell.v) === 'number') { - formula.cell.t = 'n'; + formula.cell.t = getCellType(formula.cell.v); + + if (Array.isArray(formula.cell.v && formula.cell.name && formula.cell.f && formula.cell.f.match(new RegExp(dynamicArrayFormulas.join('|'), 'i')))) { + const array = formula.cell.v; + if (!validateResultMatrix(array)) { + throw new Error('#N/A'); + } + + const existingCell = formula.cell.name; + const existingCellLetter = existingCell.match(/[A-Z]+/)[0]; + const existingCellNumber = existingCell.match(/[0-9]+/)[0]; + + for (let i = 0; i < array.length; i++) { + const newCellNumber = parseInt(existingCellNumber) + i; + + for (let j = 0; j < array[i].length; j++) { + const newCellValue = array[i][j]; + let newCellType = getCellType(newCellValue); + + // original cell + if (i === 0 && j === 0) { + formula.cell.v = newCellValue; + if (newCellType) formula.cell.t = newCellType; + } + // other cells + else { + const newLetterIndex = existingCellLetter.charCodeAt(0) - 65 + j; + const newCellLetter = getCellLetter(newLetterIndex); + + const newCell = newCellLetter + newCellNumber; + formula.sheet[newCell] = { + v: newCellValue, + t: newCellType, + }; + } + } + } } } catch (e) { @@ -55,6 +88,40 @@ module.exports = function Exp(formula) { formula.status = 'done'; } } + + function getCellLetter(columnIndex) { + let newCellLetter = ''; + while (newLetterIndex >= 0) { + newCellLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[newLetterIndex % 26] + newCellLetter; + newLetterIndex = Math.floor(newLetterIndex / 26) - 1; + } + } + + function getCellType(cellValue) { + if (typeof(cellValue) === 'string') { + return 's'; + } + else if (typeof(cellValue) === 'number') { + return 'n'; + } + } + + function validateResultMatrix(result) { + // array must be greater than 0 and be symmetrical + if (Array.isArray(result)) { + for (let i = 0; i < result.length; i++) { + if (!(result[i] instanceof Array)) { + return false; + } + if (result[i].length !== result[0].length) { + return false; + } + } + } + + return true; + } + function isEmpty(value) { return value === undefined || value === null || value === ""; } diff --git a/src/dynamic_array_formulas.js b/src/dynamic_array_formulas.js new file mode 100644 index 0000000..c4ba60e --- /dev/null +++ b/src/dynamic_array_formulas.js @@ -0,0 +1,5 @@ +const dynamicArrayFormulas = [ + 'FILTER', +]; + +module.exports = dynamicArrayFormulas; \ No newline at end of file diff --git a/src/formulas-raw.js b/src/formulas-raw.js index 9877e20..f259fc8 100644 --- a/src/formulas-raw.js +++ b/src/formulas-raw.js @@ -116,7 +116,7 @@ function filter(range, condition) { let destinationColumn = colNumber + i; let destinationRow = rowNumber + row; let destinationCellName = int_2_col_str(destinationColumn) + destinationRow; - console.log({ destinationCellName, row, i, v: data[row][i] }) + if (sheet[destinationCellName]) { sheet[destinationCellName].v = data[row][i]; if (destinationCellName === cellName) { diff --git a/test/7-formula-raw.tests.js b/test/7-formula-raw.tests.js index e9bd432..3684496 100644 --- a/test/7-formula-raw.tests.js +++ b/test/7-formula-raw.tests.js @@ -3,7 +3,7 @@ const XLSX_CALC = require("../src"); const assert = require('assert'); -describe.only('raw formulas', () => { +describe('raw formulas', () => { it('should filter', () => { let workbook = { @@ -20,30 +20,77 @@ describe.only('raw formulas', () => { C5: {v: 'cccc'}, A9: {v: true}, - B9: {v: false}, + B9: {v: true}, C9: {v: false}, E3: {f: "FILTER(A3:C5,A9:C9)"}, } } }; + XLSX_CALC(workbook); + assert.equal(workbook.Sheets.Sheet1.E3.v, 'aa'); assert.equal(workbook.Sheets.Sheet1.E4.v, 'aaa'); assert.equal(workbook.Sheets.Sheet1.E5.v, 'aaaa'); - }) - it('set the matrix into cells', () => { - const matrix = [ - ['aa', 'bb', 'cc'], - ['aaa', 'bbb', 'ccc'], - ['aaaa', 'bbbb', 'cccc'] - ]; - const filter = { - SET_MATRIX: () => matrix, - } - XLSX_CALC.import_functions(filter) - let workbook = { Sheets: { Sheet1: { E3: { f: "SET_MATRIX()" } } } }; + assert.equal(workbook.Sheets.Sheet1.F3.v, 'bb'); + assert.equal(workbook.Sheets.Sheet1.F4.v, 'bbb'); + assert.equal(workbook.Sheets.Sheet1.F5.v, 'bbbb'); + }); + + it('should filter with no match', () => { + let workbook = { + Sheets: { + Sheet1: { + A3: {v: 'aa'}, + A4: {v: 'aaa'}, + A5: {v: 'aaaa'}, + B3: {v: 'bb'}, + B4: {v: 'bbb'}, + B5: {v: 'bbbb'}, + C3: {v: 'cc'}, + C4: {v: 'ccc'}, + C5: {v: 'cccc'}, + + A9: {v: false}, + B9: {v: false}, + C9: {v: false}, + + E3: {f: "FILTER(A3:C5,A9:C9)"}, + } + } + }; + + XLSX_CALC(workbook); + + assert.equal(workbook.Sheets.Sheet1.E3.v, undefined); + }); + + it('should filter with all match', () => { + let workbook = { + Sheets: { + Sheet1: { + A3: {v: 'aa'}, + A4: {v: 'aaa'}, + A5: {v: 'aaaa'}, + B3: {v: 'bb'}, + B4: {v: 'bbb'}, + B5: {v: 'bbbb'}, + C3: {v: 'cc'}, + C4: {v: 'ccc'}, + C5: {v: 'cccc'}, + + A9: {v: true}, + B9: {v: true}, + C9: {v: true}, + + E3: {f: "FILTER(A3:C5,A9:C9)"}, + } + } + }; + XLSX_CALC(workbook); + assert.equal(workbook.Sheets.Sheet1.E3.v, 'aa'); assert.equal(workbook.Sheets.Sheet1.E4.v, 'aaa'); assert.equal(workbook.Sheets.Sheet1.E5.v, 'aaaa'); @@ -53,5 +100,5 @@ describe.only('raw formulas', () => { assert.equal(workbook.Sheets.Sheet1.G3.v, 'cc'); assert.equal(workbook.Sheets.Sheet1.G4.v, 'ccc'); assert.equal(workbook.Sheets.Sheet1.G5.v, 'cccc'); - }) + }); }) \ No newline at end of file diff --git a/xlsx-calc.js b/xlsx-calc.js index e370017..a959282 100644 --- a/xlsx-calc.js +++ b/xlsx-calc.js @@ -1,2 +1,2 @@ -!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=8)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(4);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var u=r.split("!");a=i(u[0]),t=u[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var s,l=t.split(":"),c=parseInt(l[0].replace(/^[A-Z]+/,""),10)||0,h=l[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),s=parseInt(""==h?"500000":h,10);for(var p=n(l[0]),g=n(l[1]),v=[],w=c;w<=s;w++){var m=[];v.push(m);for(var A=p;A<=g;A++){var y=o(A)+w,x=a+"!"+y,E=e.formula_ref[x];if(E){if("new"===E.status)e.exec_formula(E);else if("working"===E.status){if(E.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(E)}"e"===f[y].t?m.push(f[y]):m.push(f[y].v)}else f[y]?"e"===f[y].t?m.push(f[y]):m.push(f[y].v):m.push(null)}}return v}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(6),i=t(12),a=t(3);let f,u;function s(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(u!==e.wb)return u=e.wb,f=null,s(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),s(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return s(e,t)?r(s(e,t),t):e}},function(r,e,t){"use strict";const n=t(4);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(9),a=t(7),f=t(17);var u=function(r){for(var e=a(r,i),t=e.length-1;t>=0;t--)i(e[t])};u.calculator=function(r){return new f(r,i)},u.set_fx=i.set_fx,u.exec_fx=i.exec_fx,u.col_str_2_int=o,u.int_2_col_str=n,u.import_functions=i.import_functions,u.import_raw_functions=i.import_raw_functions,u.xlsx_Fx=i.xlsx_Fx,u.localizeFunctions=i.localizeFunctions,u.XLSX_CALC=u,r.exports=u},function(r,e,t){"use strict";const n=t(10);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,u(e,{prefix:n+"."}))}}function u(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function s(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function l(r){s(r).update_cell_value()}f(t(15)),a(t(16)),l.set_fx=function(r,e){o[r]=e},l.exec_fx=function(r,e){return o[r].apply(this,e)},l.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},l.import_functions=f,l.import_raw_functions=a,l.build_expression=s,l.xlsx_Fx=o,r.exports=l},function(r,e,t){const n=t(11),o=t(0),i=t(13),a=t(14),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,u=e.xlsx_Fx||{},s=e.xlsx_raw_Fx||{},l=r.cell.f;"="==l[0]&&(l=l.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function w(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=v,h=""):"'"===e?(A=w,h="'"):"("===e?function(){var e,t=h.trim(),o=u[t],f=s[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,y=0;y0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),u(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),l("^",r,(function(r,e){return Math.pow(+r,+e)})),l("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),l("*",r,(function(r,e){return+r*+e})),l("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),l("&",r,(function(r,e){return""+r+e})),l("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),l(">=",r,(function(r,e){return r>=e})),l("<=",r,(function(r,e){return r<=e})),l("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!f(r)||!f(e))&&r!==e})),l("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!f(r)||!f(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r==e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e,t){"use strict";r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t,n={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43};try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){if("is_blank"===r.name&&void 0!==n[e.message])t=0;else{if("iserror"!==r.name||void 0===n[e.message])throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";let n={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":p,"_xlfn.NORM.INV":p,STDEV:function(){var r=l(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:h,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":c,"VAR.P":c,"_xlfn.COVARIANCE.P":s,"COVARIANCE.P":s,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:u,HLOOKUP:function(r,e,t,n){if(void 0===r||u(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e}};function o(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function i(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function v(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=n},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(0),a=t(3),f=t(6);r.exports={OFFSET:function(r,e,t,u,s){if(u=(u||new i(1)).calc(),s=(s||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var l=r.args[0],c=l.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),v=c.sheet_name+"!"+p+g;if(1===u&&1===s)return new f(v,l.formula).calc();var w=n(h+s-1);return new a(v+":"+(w+(g+u-1)),l.formula).calc()}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){return r.calc()?e.calc():void 0!==t&&t.calc()},AND:function(){for(var r=0;r=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); +!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=8)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(4);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var l=r.split("!");a=i(l[0]),t=l[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var u,s=t.split(":"),c=parseInt(s[0].replace(/^[A-Z]+/,""),10)||0,h=s[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),u=parseInt(""==h?"500000":h,10);for(var p=n(s[0]),g=n(s[1]),v=[],w=c;w<=u;w++){var m=[];v.push(m);for(var A=p;A<=g;A++){var y=o(A)+w,x=a+"!"+y,E=e.formula_ref[x];if(E){if("new"===E.status)e.exec_formula(E);else if("working"===E.status){if(E.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(E)}"e"===f[y].t?m.push(f[y]):m.push(f[y].v)}else f[y]?"e"===f[y].t?m.push(f[y]):m.push(f[y].v):m.push(null)}}return v}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(6),i=t(12),a=t(3);let f,l;function u(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(l!==e.wb)return l=e.wb,f=null,u(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),u(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return u(e,t)?r(u(e,t),t):e}},function(r,e,t){"use strict";const n=t(4);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(9),a=t(7),f=t(18);var l=function(r,e){for(var t=a(r,i),n=t.length-1;n>=0;n--)try{i(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};l.calculator=function(r){return new f(r,i)},l.set_fx=i.set_fx,l.exec_fx=i.exec_fx,l.col_str_2_int=o,l.int_2_col_str=n,l.import_functions=i.import_functions,l.import_raw_functions=i.import_raw_functions,l.xlsx_Fx=i.xlsx_Fx,l.localizeFunctions=i.localizeFunctions,l.XLSX_CALC=l,r.exports=l},function(r,e,t){"use strict";const n=t(10);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,l(e,{prefix:n+"."}))}}function l(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function u(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function s(r){u(r).update_cell_value()}f(t(16)),a(t(17)),s.set_fx=function(r,e){o[r]=e},s.exec_fx=function(r,e){return o[r].apply(this,e)},s.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},s.import_functions=f,s.import_raw_functions=a,s.build_expression=u,s.xlsx_Fx=o,r.exports=s},function(r,e,t){const n=t(11),o=t(0),i=t(14),a=t(15),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,l=e.xlsx_Fx||{},u=e.xlsx_raw_Fx||{},s=r.cell.f;"="==s[0]&&(s=s.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function w(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=v,h=""):"'"===e?(A=w,h="'"):"("===e?function(){var e,t=h.trim(),o=l[t],f=u[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,y=0;y=0;)e="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[newLetterIndex%26]+e,newLetterIndex=Math.floor(newLetterIndex/26)-1}function u(r){return"string"==typeof r?"s":"number"==typeof r?"n":void 0}function s(r){return null==r||""===r}function c(r){if("function"!=typeof r.calc)throw new Error("Undefined "+r)}function h(){return+t.formula.name.replace(/[^0-9]/g,"")}function p(r,e,t){for(var o=0;o0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),c(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),p("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),p("*",r,(function(r,e){return+r*+e})),p("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),p("&",r,(function(r,e){return""+r+e})),p("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),p(">=",r,(function(r,e){return r>=e})),p("<=",r,(function(r,e){return r<=e})),p("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!s(r)||!s(e))&&r!==e})),p("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!s(r)||!s(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e){r.exports=["FILTER"]},function(r,e,t){"use strict";r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t,n={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43};try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){if("is_blank"===r.name&&void 0!==n[e.message])t=0;else{if("iserror"!==r.name||void 0===n[e.message])throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";let n={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":p,"_xlfn.NORM.INV":p,STDEV:function(){var r=s(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:h,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":c,"VAR.P":c,"_xlfn.COVARIANCE.P":u,"COVARIANCE.P":u,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:l,HLOOKUP:function(r,e,t,n){if(void 0===r||l(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e}};function o(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function i(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function v(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=n},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(0),a=t(3),f=t(6);r.exports={OFFSET:function(r,e,t,l,u){if(l=(l||new i(1)).calc(),u=(u||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var s=r.args[0],c=s.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),v=c.sheet_name+"!"+p+g;if(1===l&&1===u)return new f(v,s.formula).calc();var w=n(h+u-1);return new a(v+":"+(w+(g+l-1)),s.formula).calc()}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){return r.calc()?e.calc():void 0!==t&&t.calc()},AND:function(){for(var r=0;r=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); //# sourceMappingURL=xlsx-calc.js.map \ No newline at end of file diff --git a/xlsx-calc.js.map b/xlsx-calc.js.map index 25de730..5d123cb 100644 --- a/xlsx-calc.js.map +++ b/xlsx-calc.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/RawValue.js","webpack:///./src/int_2_col_str.js","webpack:///./src/col_str_2_int.js","webpack:///./src/Range.js","webpack:///./src/getSanitizedSheetName.js","webpack:///./src/str_2_val.js","webpack:///./src/RefValue.js","webpack:///./src/find_all_cells_with_formulas.js","webpack:///./src/index.js","webpack:///./src/exec_formula.js","webpack:///./src/expression_builder.js","webpack:///./src/Exp.js","webpack:///./src/LazyValue.js","webpack:///./src/UserFnExecutor.js","webpack:///./src/UserRawFnExecutor.js","webpack:///./src/formulas.js","webpack:///./src/formulas-raw.js","webpack:///./src/Calculator.js"],"names":["root","factory","exports","module","define","amd","a","i","this","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","setValue","v","calc","modulo","dividend","columnName","guard","String","fromCharCode","col_str","colstr","replace","length","Math","pow","charCodeAt","col_str_2_int","int_2_col_str","getSanitizedSheetName","str_expression","formula","range_expression","sheet_name","sheet","indexOf","aux","split","wb","Sheets","max_row","arr","min_row","parseInt","str_max_row","min_col","max_col","matrix","row","push","j","cell_name","cell_full_name","formula_ref","status","exec_formula","cell","f","includes","Error","quotedMatch","match","RawValue","RefValue","LazyValue","Range","definedNames","getDefinedName","buffer","Workbook","Names","keys","values","forEach","Name","Ref","str_2_val","isNaN","trim","inner","substr","self","parseRef","resolved_ref","ref_cell","console","log","w","cells","find_all_cells_with_formulas","Calculator","mymodule","workbook","formulas","calculator","set_fx","exec_fx","import_functions","import_raw_functions","xlsx_Fx","localizeFunctions","XLSX_CALC","expression_builder","xlsx_raw_Fx","functions","opts","formulajs","prefix","obj","override","my_assign","dest","source","JSON","parse","stringify","k","build_expression","update_cell_value","fn","args","apply","dic","newName","oldName","Exp","UserFnExecutor","UserRawFnExecutor","common_operations","root_exp","str_formula","exp_obj","was_string","fn_stack","exp","string","char","state","start","single_quote","stack","trim_buffer","special","special_raw","ini_parentheses","pop","add_operation","exp_id","last_arg","isEmpty","checkVariable","getCurrentCellIndex","exec","op","splice","b","Array","isArray","e","id","errorValues","undefined","message","concat","Date","exec_minus","getTime","toLowerCase","user_function","result","map","floor","abs","sqrt","return_index","range_lookup","val","max","arguments","arg","col","sum","min","rate_per_period","number_of_payments","present_value","future_value","type","q","counta","range","guess","guest","NPV","normsInv","array","getArrayOfNumbers","_mean","reduce","mean","dev","itm","avg","E","var_p","covariance_p","is_blank","needle","table","index","exactmatch","searchingFor","row_num","column_num","lookupValue","matchType","match_exactly_string","match_exactly_non_string","match_less_than_or_equal","match_greater_than_or_equal","parseNumber","parseFloat","consistentSizeRanges","matrixArray","getRowCount","getColCount","rowCount","colCount","product","_i","_ij","arrays","x","today","setHours","hours","minutes","seconds","date","getDate","day","getMonth","month","getFullYear","year","text","number","substring","cond","decimalPlaces","round","roundMeasure","inv_n","avg_a","avg_b","sa","sb","elementToSum","sumResult","slice","elt","toString","option","old_text","new_text","occurrence","RegExp","significance","ceil","indexValue","idx","average","mu","sigma","Infinity","cell_ref","rows","columns","height","width","ref_value","parsed_ref","end_range_col","onerrorvalue","condition","_then","_else","expressionWithRange","colRow","colNumber","rowNumber","matrixRow","destinationColumn","destinationRow","expressions","variables","calcNames","var_name","variable","setVarOfExpression","vars","item","getRef","ref_name"],"mappings":"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","file":"xlsx-calc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","\"use strict\";\n\nmodule.exports = function RawValue(value) {\n this.setValue = function(v) {\n value = v;\n };\n this.calc = function() {\n return value;\n };\n};\n","\"use strict\";\n\nmodule.exports = function int_2_col_str(n) {\n var dividend = n + 1;\n var columnName = '';\n var modulo;\n var guard = 10;\n while (dividend > 0 && guard--) {\n modulo = (dividend - 1) % 26;\n columnName = String.fromCharCode(modulo + 65) + columnName;\n dividend = (dividend - modulo - 1) / 26;\n }\n return columnName;\n};","\"use strict\";\n\nmodule.exports = function col_str_2_int(col_str) {\n var r = 0;\n var colstr = col_str.replace(/[0-9]+$/, '');\n for (var i = colstr.length; i--;) {\n r += Math.pow(26, colstr.length - i - 1) * (colstr.charCodeAt(i) - 64);\n }\n return r - 1;\n};","\"use strict\";\n\nconst col_str_2_int = require('./col_str_2_int.js');\nconst int_2_col_str = require('./int_2_col_str.js');\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function Range(str_expression, formula) {\n this.calc = function() {\n var range_expression, sheet_name, sheet;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n range_expression = aux[1];\n }\n else {\n sheet_name = formula.sheet_name;\n range_expression = str_expression;\n }\n sheet = formula.wb.Sheets[sheet_name];\n var arr = range_expression.split(':');\n var min_row = parseInt(arr[0].replace(/^[A-Z]+/, ''), 10) || 0;\n var str_max_row = arr[1].replace(/^[A-Z]+/, '');\n var max_row;\n if (str_max_row === '' && sheet['!ref']) {\n str_max_row = sheet['!ref'].split(':')[1].replace(/^[A-Z]+/, '');\n }\n // the max is 1048576, but TLE\n max_row = parseInt(str_max_row == '' ? '500000' : str_max_row, 10);\n var min_col = col_str_2_int(arr[0]);\n var max_col = col_str_2_int(arr[1]);\n var matrix = [];\n for (var i = min_row; i <= max_row; i++) {\n var row = [];\n matrix.push(row);\n for (var j = min_col; j <= max_col; j++) {\n var cell_name = int_2_col_str(j) + i;\n var cell_full_name = sheet_name + '!' + cell_name;\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n } else if (formula_ref.status === 'working') {\n if (formula_ref.cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n }\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else if (sheet[cell_name]) {\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else {\n row.push(null);\n }\n }\n }\n return matrix;\n };\n};\n","\"use strict\";\n\nmodule.exports = function getSanitizedSheetName(sheet_name) {\n var quotedMatch = sheet_name.match(/^'(.*)'$/);\n if (quotedMatch) {\n return quotedMatch[1];\n }\n else {\n return sheet_name;\n }\n};\n","const RawValue = require('./RawValue.js');\nconst RefValue = require('./RefValue.js');\nconst LazyValue = require('./LazyValue.js');\nconst Range = require('./Range.js');\n\n// this is used to _cache_ range names so that it doesn't need to be queried\n// every time a range is used\nlet definedNames, wb;\nfunction getDefinedName(buffer, formula) {\n if (!(formula.wb.Workbook && formula.wb.Workbook.Names)) {\n return null;\n }\n if (wb !== formula.wb) {\n wb = formula.wb;\n definedNames = null;\n return getDefinedName(buffer, formula);\n }\n if (definedNames) {\n return definedNames[buffer];\n }\n const keys = Object.values(formula.wb.Workbook.Names);\n if (keys.length === 0) {\n return;\n }\n definedNames = {};\n keys.forEach(({ Name, Ref }) => {\n if (!Name.includes('.')) {\n definedNames[Name] = Ref;\n }\n });\n\n return getDefinedName(buffer, formula);\n}\n\nmodule.exports = function str_2_val(buffer, formula) {\n if (!isNaN(buffer)) {\n return new RawValue(+buffer);\n }\n if (buffer === 'TRUE') {\n return new RawValue(1);\n }\n if (typeof buffer !== 'string') {\n return buffer;\n }\n\n buffer = buffer.trim().replace(/\\$/g, '')\n\n if (buffer.match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/%$/)) {\n var inner = str_2_val(buffer.substr(0, buffer.length-1), formula)\n return new LazyValue(() => inner.calc() / 100)\n }\n if (getDefinedName(buffer, formula)) {\n return str_2_val(getDefinedName(buffer, formula), formula);\n }\n return buffer;\n};\n","\"use strict\";\n\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function RefValue(str_expression, formula) {\n var self = this;\n this.name = 'RefValue';\n this.str_expression = str_expression;\n this.formula = formula;\n\n self.parseRef = function() {\n var sheet, sheet_name, cell_name, cell_full_name;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n sheet = formula.wb.Sheets[sheet_name];\n cell_name = aux[1];\n }\n else {\n sheet = formula.sheet;\n sheet_name = formula.sheet_name;\n cell_name = str_expression;\n }\n if (!sheet) {\n throw Error(\"Sheet \" + sheet_name + \" not found.\");\n }\n cell_full_name = sheet_name + '!' + cell_name;\n return {\n sheet: sheet,\n sheet_name: sheet_name,\n cell_name: cell_name,\n cell_full_name: cell_full_name\n };\n };\n\n this.calc = function() {\n var resolved_ref = self.parseRef();\n var sheet = resolved_ref.sheet;\n var cell_name = resolved_ref.cell_name;\n var cell_full_name = resolved_ref.cell_full_name;\n var ref_cell = sheet[cell_name];\n if (!ref_cell) {\n return null;\n }\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n if (ref_cell.t === 'e') {\n console.log('ref is an error with new formula', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n else if (formula_ref.status === 'working') {\n if (ref_cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n return this.calc();\n }\n else if (formula_ref.status === 'done') {\n if (ref_cell.t === 'e') {\n console.log('ref is an error after formula eval', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n }\n else {\n if (ref_cell.t === 'e') {\n console.log('ref is an error with no formula', cell_name);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n };\n};\n","\"use strict\";\n\nmodule.exports = function find_all_cells_with_formulas(wb, exec_formula) {\n let formula_ref = {};\n let cells = [];\n for (let sheet_name in wb.Sheets) {\n let sheet = wb.Sheets[sheet_name];\n for (let cell_name in sheet) {\n if (sheet[cell_name] && sheet[cell_name].f) {\n let formula = formula_ref[sheet_name + '!' + cell_name] = {\n formula_ref: formula_ref,\n wb: wb,\n sheet: sheet,\n sheet_name: sheet_name,\n cell: sheet[cell_name],\n name: cell_name,\n status: 'new',\n exec_formula: exec_formula\n };\n cells.push(formula);\n }\n }\n }\n return cells;\n};\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst exec_formula = require('./exec_formula.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\nconst Calculator = require('./Calculator.js');\n\nvar mymodule = function(workbook) {\n var formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (var i = formulas.length - 1; i >= 0; i--) {\n exec_formula(formulas[i]);\n }\n};\n\nmymodule.calculator = function calculator(workbook) {\n return new Calculator(workbook, exec_formula);\n};\n\nmymodule.set_fx = exec_formula.set_fx;\nmymodule.exec_fx = exec_formula.exec_fx;\nmymodule.col_str_2_int = col_str_2_int;\nmymodule.int_2_col_str = int_2_col_str;\nmymodule.import_functions = exec_formula.import_functions;\nmymodule.import_raw_functions = exec_formula.import_raw_functions;\nmymodule.xlsx_Fx = exec_formula.xlsx_Fx;\nmymodule.localizeFunctions = exec_formula.localizeFunctions;\n\nmymodule.XLSX_CALC = mymodule\n\nmodule.exports = mymodule;\n","\"use strict\";\n\nconst expression_builder = require('./expression_builder.js');\n\nlet xlsx_Fx = {};\nlet xlsx_raw_Fx = {};\n\nimport_functions(require('./formulas.js'));\nimport_raw_functions(require('./formulas-raw.js'));\n\nfunction import_raw_functions(functions, opts) {\n for (var key in functions) {\n xlsx_raw_Fx[key] = functions[key];\n }\n}\n\nfunction import_functions(formulajs, opts) {\n opts = opts || {};\n var prefix = opts.prefix || '';\n for (var key in formulajs) {\n var obj = formulajs[key];\n if (typeof(obj) === 'function') {\n if (opts.override || !xlsx_Fx[prefix + key]) {\n xlsx_Fx[prefix + key] = obj;\n }\n // else {\n // console.log(prefix + key, 'already exists.');\n // console.log(' to override:');\n // console.log(' XLSX_CALC.import_functions(yourlib, {override: true})');\n // }\n }\n else if (typeof(obj) === 'object') {\n import_functions(obj, my_assign(opts, { prefix: key + '.' }));\n }\n }\n}\n\nfunction my_assign(dest, source) {\n var obj = JSON.parse(JSON.stringify(dest));\n for (var k in source) {\n obj[k] = source[k];\n }\n return obj;\n}\n\nfunction build_expression(formula) {\n return expression_builder(formula, {xlsx_Fx: xlsx_Fx, xlsx_raw_Fx: xlsx_raw_Fx});\n}\n\nfunction exec_formula(formula) {\n let root_exp = build_expression(formula);\n root_exp.update_cell_value();\n}\n\nexec_formula.set_fx = function set_fx(name, fn) {\n xlsx_Fx[name] = fn;\n};\n\nexec_formula.exec_fx = function exec_fx(name, args) {\n return xlsx_Fx[name].apply(this, args);\n};\n\nexec_formula.localizeFunctions = function(dic) {\n for (let newName in dic) {\n let oldName = dic[newName];\n if (xlsx_Fx[oldName]) {\n xlsx_Fx[newName] = xlsx_Fx[oldName];\n }\n if (xlsx_raw_Fx[oldName]) {\n xlsx_raw_Fx[newName] = xlsx_raw_Fx[oldName];\n }\n }\n};\n\nexec_formula.import_functions = import_functions;\nexec_formula.import_raw_functions = import_raw_functions;\nexec_formula.build_expression = build_expression;\nexec_formula.xlsx_Fx = xlsx_Fx;\nmodule.exports = exec_formula;\n","const Exp = require('./Exp.js');\nconst RawValue = require('./RawValue.js');\nconst UserFnExecutor = require('./UserFnExecutor.js');\nconst UserRawFnExecutor = require('./UserRawFnExecutor.js');\nconst common_operations = {\n '*': 'multiply',\n '+': 'plus',\n '-': 'minus',\n '/': 'divide',\n '^': 'power',\n '&': 'concat',\n '<': 'lt',\n '>': 'gt',\n '=': 'eq'\n};\n\nmodule.exports = function expression_builder(formula, opts) {\n formula.status = 'working';\n\n var xlsx_Fx = opts.xlsx_Fx || {};\n var xlsx_raw_Fx = opts.xlsx_raw_Fx || {};\n\n var root_exp;\n var str_formula = formula.cell.f;\n if (str_formula[0] == '=') {\n str_formula = str_formula.substr(1);\n }\n var exp_obj = root_exp = new Exp(formula);\n var buffer = '',\n was_string = false;\n var fn_stack = [{\n exp: exp_obj\n }];\n\n /**\n * state pattern in functional way\n */\n function string(char) {\n if (char === '\"') {\n exp_obj.push(new RawValue(buffer));\n was_string = true;\n buffer = '';\n state = start;\n } else {\n buffer += char;\n }\n }\n\n function single_quote(char) {\n if (char === \"'\") {\n state = start;\n }\n buffer += char;\n }\n\n function ini_parentheses() {\n var o, trim_buffer = buffer.trim(),\n special = xlsx_Fx[trim_buffer];\n var special_raw = xlsx_raw_Fx[trim_buffer];\n if (special_raw) {\n special = new UserRawFnExecutor(special_raw, formula);\n }\n else if (special) {\n special = new UserFnExecutor(special, formula);\n }\n else if (trim_buffer) {\n //Error: \"Worksheet 1\"!D145: Function INDEX not found\n throw new Error('\"' + formula.sheet_name + '\"!' + formula.name + ': Function ' + buffer + ' not found');\n }\n o = new Exp(formula);\n fn_stack.push({\n exp: o,\n special: special\n });\n exp_obj = o;\n buffer = '';\n }\n\n function end_parentheses() {\n var v, stack = fn_stack.pop();\n exp_obj = stack.exp;\n exp_obj.push(buffer);\n v = exp_obj;\n buffer = '';\n exp_obj = fn_stack[fn_stack.length - 1].exp;\n if (stack.special) {\n stack.special.push(v);\n exp_obj.push(stack.special);\n }\n else {\n exp_obj.push(v);\n }\n }\n\n function add_operation(char) {\n if (!was_string) {\n exp_obj.push(buffer);\n }\n was_string = false;\n exp_obj.push(char);\n buffer = '';\n }\n\n function start(char) {\n if (char === '\"') {\n state = string;\n buffer = '';\n } else if (char === \"'\") {\n state = single_quote;\n buffer = \"'\";\n } else if (char === '(') {\n ini_parentheses();\n } else if (char === ')') {\n end_parentheses();\n } else if (common_operations[char]) {\n add_operation(char);\n } else if (char === ',' && fn_stack[fn_stack.length - 1].special) {\n was_string = false;\n fn_stack[fn_stack.length - 1].exp.push(buffer);\n fn_stack[fn_stack.length - 1].special.push(fn_stack[fn_stack.length - 1].exp);\n fn_stack[fn_stack.length - 1].exp = exp_obj = new Exp(formula);\n buffer = '';\n } else if (char !== ' ') {\n buffer += char;\n }\n }\n \n var state = start;\n\n for (var i = 0; i < str_formula.length; i++) {\n state(str_formula[i]);\n }\n root_exp.push(buffer);\n return root_exp;\n\n}","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst str_2_val = require('./str_2_val.js');\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nvar exp_id = 0;\n\nmodule.exports = function Exp(formula) {\n var self = this;\n self.id = ++exp_id;\n self.args = [];\n self.name = 'Expression';\n self.update_cell_value = update_cell_value;\n self.formula = formula;\n \n function update_cell_value() {\n try {\n if (Array.isArray(self.args) \n && self.args.length === 1\n && self.args[0] instanceof Range) {\n throw Error('#VALUE!');\n }\n formula.cell.v = self.calc();\n if (typeof(formula.cell.v) === 'string') {\n formula.cell.t = 's';\n }\n else if (typeof(formula.cell.v) === 'number') {\n formula.cell.t = 'n';\n }\n }\n catch (e) {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n };\n if (errorValues[e.message] !== undefined) {\n formula.cell.t = 'e';\n formula.cell.w = e.message;\n formula.cell.v = errorValues[e.message];\n }\n else {\n throw e;\n }\n }\n finally {\n formula.status = 'done';\n }\n }\n function isEmpty(value) {\n return value === undefined || value === null || value === \"\";\n }\n \n function checkVariable(obj) {\n if (typeof obj.calc !== 'function') {\n throw new Error('Undefined ' + obj);\n }\n }\n\n function getCurrentCellIndex() {\n return +self.formula.name.replace(/[^0-9]/g, '');\n }\n \n function exec(op, args, fn) {\n for (var i = 0; i < args.length; i++) {\n if (args[i] === op) {\n try {\n if (i===0 && op==='+') {\n checkVariable(args[i + 1]);\n let r = args[i + 1].calc();\n args.splice(i, 2, new RawValue(r));\n } else {\n checkVariable(args[i - 1]);\n checkVariable(args[i + 1]);\n\n let a = args[i - 1].calc();\n let b = args[i + 1].calc();\n if (Array.isArray(a)) {\n a = a[getCurrentCellIndex() - 1][0];\n }\n if (Array.isArray(b)) {\n b = b[getCurrentCellIndex() - 1][0];\n }\n\n let r = fn(a, b);\n args.splice(i - 1, 3, new RawValue(r));\n i--;\n }\n }\n catch (e) {\n // console.log('[Exp.js] - ' + formula.name + ': evaluating ' + formula.cell.f + '\\n' + e.message);\n throw e;\n }\n }\n }\n }\n\n function exec_minus(args) {\n for (var i = args.length; i--;) {\n if (args[i] === '-') {\n checkVariable(args[i + 1]);\n var b = args[i + 1].calc();\n if (i > 0 && typeof args[i - 1] !== 'string') {\n args.splice(i, 1, '+');\n if (b instanceof Date) {\n b = Date.parse(b);\n checkVariable(args[i - 1]);\n var a = args[i - 1].calc();\n if (a instanceof Date) {\n a = Date.parse(a) / MS_PER_DAY;\n b = b / MS_PER_DAY;\n args.splice(i - 1, 1, new RawValue(a));\n }\n }\n args.splice(i + 1, 1, new RawValue(-b));\n }\n else {\n if (typeof b === 'string') {\n throw new Error('#VALUE!');\n }\n args.splice(i, 2, new RawValue(-b));\n }\n }\n }\n }\n\n self.calc = function() {\n let args = self.args.concat();\n exec_minus(args);\n exec('^', args, function(a, b) {\n return Math.pow(+a, +b);\n });\n exec('/', args, function(a, b) {\n if (b == 0) {\n throw Error('#DIV/0!');\n }\n return (+a) / (+b);\n });\n exec('*', args, function(a, b) {\n return (+a) * (+b);\n });\n exec('+', args, function(a, b) {\n if (a instanceof Date && typeof b === 'number') {\n b = b * MS_PER_DAY;\n }\n return (+a) + (+b);\n });\n exec('&', args, function(a, b) {\n return '' + a + b;\n });\n exec('<', args, function(a, b) {\n return a < b;\n });\n exec('>', args, function(a, b) {\n return a > b;\n });\n exec('>=', args, function(a, b) {\n return a >= b;\n });\n exec('<=', args, function(a, b) {\n return a <= b;\n });\n exec('<>', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() !== b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return false;\n }\n return a !== b;\n });\n exec('=', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return true;\n }\n if ((a == null && b === 0) || (a === 0 && b == null)) {\n return true;\n }\n if (typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase()) {\n return true;\n }\n return a == b;\n });\n if (args.length == 1) {\n if (typeof(args[0].calc) !== 'function') {\n return args[0];\n }\n else {\n return args[0].calc();\n }\n }\n };\n\n var last_arg;\n self.push = function(buffer) {\n if (buffer) {\n var v = str_2_val(buffer, formula);\n if (((v === '=') && (last_arg == '>' || last_arg == '<')) || (last_arg == '<' && v === '>')) {\n self.args[self.args.length - 1] += v;\n }\n else {\n self.args.push(v);\n }\n last_arg = v;\n //console.log(self.id, '-->', v);\n }\n };\n};","\"use strict\";\n\nmodule.exports = function LazyValue(fn) {\n this.calc = function() {\n return fn();\n };\n};\n","\"use strict\";\n\nmodule.exports = function UserFnExecutor(user_function) {\n var self = this;\n self.name = 'UserFn';\n self.args = [];\n self.calc = function() {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n }, result;\n try {\n result = user_function.apply(self, self.args.map(f=>f.calc()));\n } catch (e) {\n if (user_function.name === 'is_blank'\n && errorValues[e.message] !== undefined) {\n // is_blank applied to an error cell doesn't propagate the error\n result = 0;\n }\n else if (user_function.name === 'iserror'\n && errorValues[e.message] !== undefined) {\n // iserror applied to an error doesn't propagate the error and returns true\n result = true;\n }\n else {\n throw e;\n }\n }\n return result;\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};","\"use strict\";\n\nmodule.exports = function UserRawFnExecutor(user_function, formula) {\n var self = this;\n self.name = 'UserRawFn';\n self.args = [];\n self.calc = function() {\n try {\n return user_function.apply(self, self.args);\n } catch(e) {\n // debug\n // console.log('----------------', user_function);\n // console.log(formula.name);\n // console.log(self);\n throw e;\n }\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};\n","\"use strict\";\n\n// +---------------------+\n// | FORMULAS REGISTERED |\n// +---------------------+\nlet formulas = {\n 'FLOOR': Math.floor,\n '_xlfn.FLOOR.MATH': Math.floor,\n 'FLOOR.MATH': Math.floor,\n 'ABS': Math.abs,\n 'SQRT': Math.sqrt,\n 'VLOOKUP': vlookup,\n 'MAX': max,\n 'SUM': sum,\n 'MIN': min,\n 'CONCATENATE': concatenate,\n 'PMT': pmt,\n 'COUNTA': counta,\n 'IRR': irr,\n 'NORM.INV': normsInv,\n '_xlfn.NORM.INV': normsInv,\n 'STDEV': stDeviation,\n 'AVERAGE': avg,\n 'EXP': EXP,\n 'LN': Math.log,\n '_xlfn.VAR.P': var_p,\n 'VAR.P': var_p,\n '_xlfn.COVARIANCE.P': covariance_p,\n 'COVARIANCE.P': covariance_p,\n 'TRIM': trim,\n 'LEN': len,\n 'ISBLANK': is_blank,\n 'HLOOKUP': hlookup,\n 'INDEX': index,\n 'MATCH': match,\n 'SUMPRODUCT': sumproduct,\n 'ISNUMBER': isnumber,\n 'TODAY': today,\n 'ISERROR': iserror,\n 'TIME': time,\n 'DAY': day,\n 'MONTH': month,\n 'YEAR': year,\n 'RIGHT': right,\n 'LEFT': left,\n 'IFS': ifs,\n 'ROUND': round,\n 'CORREL': correl, // missing test\n 'SUMIF': sumif, // missing test,\n 'CHOOSE': choose,\n 'SUBSTITUTE': substitute,\n 'CEILING': ceiling,\n};\n\nfunction choose(option) {\n return arguments[option];\n}\n\nfunction sumif(){\n\n let elementToSum = arguments[1];\n let sumResult = 0;\n\n [].slice.call(arguments)[0][0].forEach((elt,key) =>{\n \n if (elt!==null){\n //if the element is not a string but a number, number has no replace function, so converting to string.\n elt = elt.toString();\n if( elt.replace(/\\'/g, \"\") === elementToSum){\n if (!isNaN([].slice.call(arguments)[2][0][key])){\n sumResult += [].slice.call(arguments)[2][0][key]\n }\n }\n }\n });\n return sumResult\n}\n\nfunction correl(a,b){\n\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n\n if (a.length !== b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / (a.length-1);\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n var sa = 0;\n var sb=0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n\n sa+=Math.pow(a[i],2);\n sb+=Math.pow(b[i],2);\n }\n\n sa=Math.sqrt(sa/inv_n);\n sb=Math.sqrt(sb/inv_n);\n\n return s / (inv_n*sa*sb);\n}\n\nfunction round(value, decimalPlaces) {\n if (arguments.length === 0) throw new Error(\"Err:511\");\n if (arguments.length === 1) return Math.round(value);\n let roundMeasure = Math.pow(10, decimalPlaces);\n return Math.round(roundMeasure*value)/roundMeasure\n}\n\nfunction today() {\n var today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n}\n\nfunction isnumber(x) {\n return !isNaN(x);\n}\n\nfunction sumproduct() {\n var parseNumber = function (string) {\n if (string === undefined || string === '' || string === null) {\n return 0;\n }\n if (!isNaN(string)) {\n return parseFloat(string);\n }\n return 0;\n },\n consistentSizeRanges = function (matrixArray) {\n var getRowCount = function(matrix) {\n return matrix.length;\n },\n getColCount = function(matrix) {\n return matrix[0].length;\n },\n rowCount = getRowCount(matrixArray[0]),\n colCount = getColCount(matrixArray[0]);\n\n for (var i = 1; i < matrixArray.length; i++) {\n if (getRowCount(matrixArray[i]) !== rowCount\n || getColCount(matrixArray[i]) !== colCount) {\n return false;\n }\n }\n return true;\n };\n\n if (!arguments || arguments.length === 0) {\n throw Error('#VALUE!');\n }\n if (!consistentSizeRanges(arguments)) {\n throw Error('#VALUE!');\n }\n // throw error if any of the cells passed in arguments is in error\n for (var i = 0; i < arguments.length; i++) {\n var row = arguments[i];\n if (Array.isArray(row)) {\n for (var j = 0; j < row.length; j++) {\n var col = row[j];\n if (Array.isArray(col)) {\n for (var k = 0; k < col.length; k++) {\n var cell = col[k];\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n else {\n var cell = col;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n }\n else {\n var cell = row;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n\n var arrays = arguments.length + 1;\n var result = 0;\n var product;\n var k;\n var _i;\n var _ij;\n for (var i = 0; i < arguments[0].length; i++) {\n if (!(arguments[0][i] instanceof Array)) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _i = parseNumber(arguments[k - 1][i]);\n\n product *= _i;\n }\n result += product;\n } else {\n for (var j = 0; j < arguments[0][i].length; j++) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _ij = parseNumber(arguments[k - 1][i][j]);\n\n product *= _ij;\n }\n result += product;\n }\n }\n }\n return result;\n}\n\nfunction match_less_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] < lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] > indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match_exactly_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n lookupValue = lookupValue.replace(/\\?/g, '.');\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1\n && typeof matrix[idx][0] === 'string') {\n if (matrix[idx][0].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n } else if (typeof matrix[idx] === 'string') {\n if (matrix[idx].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n\n }\n throw Error('#N/A');\n}\n\nfunction match_exactly_non_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1) {\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n }\n }\n } else if (matrix[idx] === lookupValue) {\n return idx + 1;\n }\n }\n throw Error('#N/A');\n}\n\n// +---------------------+\n// | THE IMPLEMENTATIONS |\n// +---------------------+\n\n\nfunction match_greater_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx]) && matrix[idx].length > 0) {\n // For array in column\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx][0] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n } else if (matrix[idx][0] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n }\n }\n } else {\n // For array in row\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match(lookupValue, matrix, matchType) {\n if (Array.isArray(matrix)\n && matrix.length === 1\n && Array.isArray(matrix[0])) {\n matrix = matrix[0];\n }\n if (!lookupValue && !matrix) {\n throw Error('#N/A');\n }\n if (arguments.length === 2) {\n matchType = 1;\n }\n if (!(matrix instanceof Array)) {\n throw Error('#N/A');\n }\n if (matchType === 0) {\n if (typeof lookupValue === 'string') {\n return match_exactly_string(matrix, lookupValue);\n } else {\n return match_exactly_non_string(matrix, lookupValue);\n }\n } else if (matchType === 1) {\n return match_less_than_or_equal(matrix, lookupValue);\n } else if (matchType === -1) {\n return match_greater_than_or_equal(matrix, lookupValue);\n } else {\n throw Error('#N/A');\n }\n}\n\nfunction index(matrix, row_num, column_num) {\n if (row_num <= matrix.length) {\n var row = matrix[row_num - 1];\n if (Array.isArray(row)) {\n if (!column_num) {\n return row;\n } else if (column_num <= row.length) {\n return row[column_num - 1];\n }\n } else {\n return matrix[row_num];\n }\n }\n throw Error('#REF!');\n}\n\n// impl ported from https://github.com/FormulaPages/hlookup\nfunction hlookup(needle, table, index, exactmatch) {\n if (typeof needle === \"undefined\" || (0, is_blank)(needle)) {\n throw Error('#N/A');\n }\n\n index = index || 0;\n let row = table[0], i, searchingFor;\n\n if (typeof needle === 'string') {\n searchingFor = needle.toLowerCase();\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i].toLowerCase().indexOf(searchingFor) !== -1) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n } else {\n searchingFor = needle;\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i] === searchingFor) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n }\n throw Error('#N/A');\n}\n\nfunction len(a) {\n return ('' + a).length;\n}\n\nfunction trim(a) {\n return ('' + a).trim();\n}\n\nfunction is_blank(a) {\n // console.log(a)\n return !a;\n}\n\nfunction covariance_p(a, b) {\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n if (a.length != b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / a.length;\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n }\n return s * inv_n;\n}\n\nfunction getArrayOfNumbers(range) {\n var arr = [];\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n if (typeof(matrix[j]) == 'number') {\n arr.push(matrix[j]);\n }\n else if (Array.isArray(matrix[j])) {\n for (var k = matrix[j].length; k--;) {\n if (typeof(matrix[j][k]) == 'number') {\n arr.push(matrix[j][k]);\n }\n }\n }\n // else {\n // wtf is that?\n // }\n }\n }\n else {\n if (typeof(arg) == 'number') {\n arr.push(arg);\n }\n }\n }\n return arr;\n}\n\nfunction var_p() {\n var average = avg.apply(this, arguments);\n var s = 0.0;\n var c = 0;\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n s += Math.pow(matrix[j][k] - average, 2);\n c++;\n }\n }\n }\n }\n else {\n s += Math.pow(arg - average, 2);\n c++;\n }\n }\n return s / c;\n}\n\nfunction EXP(n) {\n return Math.pow(Math.E, n);\n}\n\nfunction avg() {\n return sum.apply(this, arguments) / counta.apply(this, arguments);\n}\n\nfunction stDeviation() {\n var array = getArrayOfNumbers(arguments);\n\n function _mean(array) {\n return array.reduce(function(a, b) {\n return a + b;\n }) / array.length;\n }\n var mean = _mean(array),\n dev = array.map(function(itm) {\n return (itm - mean) * (itm - mean);\n });\n return Math.sqrt(dev.reduce(function(a, b) {\n return a + b;\n }) / (array.length - 1));\n}\n\n/// Original C++ implementation found at http://www.wilmott.com/messageview.cfm?catid=10&threadid=38771\n/// C# implementation found at http://weblogs.asp.net/esanchez/archive/2010/07/29/a-quick-and-dirty-implementation-of-excel-norminv-function-in-c.aspx\n/*\n * Compute the quantile function for the normal distribution.\n *\n * For small to moderate probabilities, algorithm referenced\n * below is used to obtain an initial approximation which is\n * polished with a final Newton step.\n *\n * For very large arguments, an algorithm of Wichura is used.\n *\n * REFERENCE\n *\n * Beasley, J. D. and S. G. Springer (1977).\n * Algorithm AS 111: The percentage points of the normal distribution,\n * Applied Statistics, 26, 118-121.\n *\n * Wichura, M.J. (1988).\n * Algorithm AS 241: The Percentage Points of the Normal Distribution.\n * Applied Statistics, 37, 477-484.\n */\nfunction normsInv(p, mu, sigma) {\n if (p < 0 || p > 1) {\n throw \"The probality p must be bigger than 0 and smaller than 1\";\n }\n if (sigma < 0) {\n throw \"The standard deviation sigma must be positive\";\n }\n\n if (p == 0) {\n return -Infinity;\n }\n if (p == 1) {\n return Infinity;\n }\n if (sigma == 0) {\n return mu;\n }\n\n var q, r, val;\n\n q = p - 0.5;\n\n /*-- use AS 241 --- */\n /* double ppnd16_(double *p, long *ifault)*/\n /* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3\n Produces the normal deviate Z corresponding to a given lower\n tail area of P; Z is accurate to about 1 part in 10**16.\n */\n if (Math.abs(q) <= .425) { /* 0.075 <= p <= 0.925 */\n r = .180625 - q * q;\n val =\n q * (((((((r * 2509.0809287301226727 +\n 33430.575583588128105) * r + 67265.770927008700853) * r +\n 45921.953931549871457) * r + 13731.693765509461125) * r +\n 1971.5909503065514427) * r + 133.14166789178437745) * r +\n 3.387132872796366608) / (((((((r * 5226.495278852854561 +\n 28729.085735721942674) * r + 39307.89580009271061) * r +\n 21213.794301586595867) * r + 5394.1960214247511077) * r +\n 687.1870074920579083) * r + 42.313330701600911252) * r + 1);\n }\n else { /* closer than 0.075 from {0,1} boundary */\n\n /* r = min(p, 1-p) < 0.075 */\n if (q > 0)\n r = 1 - p;\n else\n r = p;\n\n r = Math.sqrt(-Math.log(r));\n /* r = sqrt(-log(r)) <==> min(p, 1-p) = exp( - r^2 ) */\n\n if (r <= 5) { /* <==> min(p,1-p) >= exp(-25) ~= 1.3888e-11 */\n r += -1.6;\n val = (((((((r * 7.7454501427834140764e-4 +\n .0227238449892691845833) * r + .24178072517745061177) *\n r + 1.27045825245236838258) * r +\n 3.64784832476320460504) * r + 5.7694972214606914055) *\n r + 4.6303378461565452959) * r +\n 1.42343711074968357734) / (((((((r *\n 1.05075007164441684324e-9 + 5.475938084995344946e-4) *\n r + .0151986665636164571966) * r +\n .14810397642748007459) * r + .68976733498510000455) *\n r + 1.6763848301838038494) * r +\n 2.05319162663775882187) * r + 1);\n }\n else { /* very close to 0 or 1 */\n r += -5;\n val = (((((((r * 2.01033439929228813265e-7 +\n 2.71155556874348757815e-5) * r +\n .0012426609473880784386) * r + .026532189526576123093) *\n r + .29656057182850489123) * r +\n 1.7848265399172913358) * r + 5.4637849111641143699) *\n r + 6.6579046435011037772) / (((((((r *\n 2.04426310338993978564e-15 + 1.4215117583164458887e-7) *\n r + 1.8463183175100546818e-5) * r +\n 7.868691311456132591e-4) * r + .0148753612908506148525) * r + .13692988092273580531) * r +\n .59983220655588793769) * r + 1);\n }\n\n if (q < 0.0) {\n val = -val;\n }\n }\n\n return mu + sigma * val;\n}\n\nfunction irr(range, guess) {\n var min = -2.0;\n var max = 1.0;\n var n = 0;\n do {\n var guest = (min + max) / 2;\n var NPV = 0;\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n NPV += arg[0] / Math.pow((1 + guest), i);\n }\n if (NPV > 0) {\n if (min === max) {\n max += Math.abs(guest);\n }\n min = guest;\n }\n else {\n max = guest;\n }\n n++;\n } while (Math.abs(NPV) > 0.000001 && n < 100000);\n //console.log(n);\n return guest;\n}\n\nfunction counta() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n r++;\n }\n }\n }\n }\n else {\n if (arg !== null && arg !== undefined) {\n r++;\n }\n }\n }\n return r;\n}\n\nfunction pmt(rate_per_period, number_of_payments, present_value, future_value, type) {\n type = type || 0;\n future_value = future_value || 0;\n if (rate_per_period != 0.0) {\n // Interest rate exists\n var q = Math.pow(1 + rate_per_period, number_of_payments);\n return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));\n\n }\n else if (number_of_payments != 0.0) {\n // No interest rate, but number of payments exists\n return -(future_value + present_value) / number_of_payments;\n }\n return 0;\n}\n\nfunction concatenate() {\n var r = '';\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (arg === null || arg === undefined) continue;\n r += arg;\n }\n return r;\n}\n\nfunction sum() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (!isNaN(matrix[j][k])) {\n r += +matrix[j][k];\n }\n }\n }\n }\n else {\n r += +arg;\n }\n }\n return r;\n}\n\nfunction max() {\n var max = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (max == null || (col[k] != null && max < col[k])) {\n max = col[k];\n }\n }\n }\n else if (max == null || (col != null && max < col)) {\n max = col;\n }\n }\n }\n else if (!isNaN(arg) && (max == null || (arg != null && max < arg))) {\n max = arg;\n }\n }\n return max;\n}\n\nfunction min() {\n var min = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (min == null || (col[k] != null && min > col[k])) {\n min = col[k];\n }\n }\n }\n else if (min == null || (col != null && min > col)) {\n min = col;\n }\n }\n }\n else if (!isNaN(arg) && (min == null || (arg != null && min > arg))) {\n min = arg;\n }\n }\n return min;\n}\n\nfunction vlookup(key, matrix, return_index, range_lookup=true) {\n var val = null;\n for (var i = 0; i < matrix.length; i++) {\n if (matrix[i][0] < key) {\n val = matrix[i][return_index - 1];\n }\n else if (matrix[i][0] == key) {\n return matrix[i][return_index - 1];\n }\n }\n if (range_lookup && val) {\n return val;\n }\n throw Error('#N/A');\n}\n\nfunction iserror() {\n // if an error is catched before getting there, true will be returned from the catch block\n // if we get here then it's not an error\n return false;\n}\n\nfunction time(hours, minutes, seconds) {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n return ((hours * 60 + minutes) * 60 + seconds) * 1000 / MS_PER_DAY;\n}\n\nfunction day(date) {\n if (!date.getDate) {\n throw Error('#VALUE!');\n }\n var day = date.getDate();\n if (isNaN(day)) {\n throw Error('#VALUE!');\n }\n return day;\n}\n\nfunction month(date) {\n if (!date.getMonth) {\n throw Error('#VALUE!');\n }\n var month = date.getMonth();\n if (isNaN(month)) {\n throw Error('#VALUE!');\n }\n return month + 1;\n}\n\nfunction year(date) {\n if (!date.getFullYear) {\n throw Error('#VALUE!');\n }\n var year = date.getFullYear();\n if (isNaN(year)) {\n throw Error('#VALUE!');\n }\n return year;\n}\n\nfunction right(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(text.length - number);\n}\n\nfunction left(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(0, number);\n}\n\nfunction ifs(/*_cond1, _val1, _cond2, _val2, _cond3, _val3, ... */) {\n for (var i = 0; i + 1 < arguments.length; i+=2) {\n var cond = arguments[i];\n var val = arguments[i+1];\n if (cond) {\n return val;\n }\n }\n throw Error('#N/A');\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\nfunction substitute(text, old_text, new_text, occurrence) {\n if(occurrence <= 0) {\n throw Error('#VALUE!');\n }\n if (!text || !old_text || (!new_text && new_text !== '')) {\n return text;\n } else if (occurrence === undefined) {\n return text.replace(new RegExp(escapeRegExp(old_text), 'g'), new_text);\n } else {\n var index = 0;\n var i = 0;\n while (text.indexOf(old_text, index) > 0) {\n index = text.indexOf(old_text, index + 1);\n i++;\n if (i === occurrence) {\n return text.substring(0, index) + new_text + text.substring(index + old_text.length);\n }\n }\n }\n };\n\nfunction ceiling(number, significance) {\n return Math.ceil(number / significance) * significance\n}\n\nmodule.exports = formulas;\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst RefValue = require('./RefValue.js');\n\nfunction raw_offset(cell_ref, rows, columns, height, width) {\n height = (height || new RawValue(1)).calc();\n width = (width || new RawValue(1)).calc();\n if (cell_ref.args.length === 1 && cell_ref.args[0].name === 'RefValue') {\n var ref_value = cell_ref.args[0];\n var parsed_ref = ref_value.parseRef();\n var col = col_str_2_int(parsed_ref.cell_name) + columns.calc();\n var col_str = int_2_col_str(col);\n var row = +parsed_ref.cell_name.replace(/^[A-Z]+/g, '') + rows.calc();\n var cell_name = parsed_ref.sheet_name + '!' + col_str + row;\n if (height === 1 && width === 1) {\n return new RefValue(cell_name, ref_value.formula).calc();\n }\n else {\n var end_range_col = int_2_col_str(col + width - 1);\n var end_range_row = row + height - 1;\n var end_range = end_range_col + end_range_row;\n var str_expression = cell_name + ':' + end_range;\n return new Range(str_expression, ref_value.formula).calc();\n }\n }\n}\n\nfunction iferror(cell_ref, onerrorvalue) {\n try {\n var value = cell_ref.calc();\n if (typeof value === 'number' && (isNaN(value) || value === Infinity || value === -Infinity)) {\n return onerrorvalue.calc();\n }\n return value;\n } catch(e) {\n return onerrorvalue.calc();\n }\n}\n\nfunction _if(condition, _then, _else) {\n if (condition.calc()) {\n // console.log(condition.formula.name)\n // if (condition.formula.name === 'P40') {\n // console.log('P40 =', _then.calc());\n // console.log(' -->', _then.args[1].calc());\n // }\n return _then.calc();\n }\n else {\n if (typeof _else === 'undefined') {\n return false;\n } else {\n return _else.calc();\n }\n }\n}\n\nfunction and() {\n for (var i = 0; i < arguments.length; i++) {\n if(!arguments[i].calc()) return false;\n }\n return true;\n}\n\nfunction _or() {\n for (var i = 0; i < arguments.length; i++) {\n if(arguments[i].calc()) return true;\n }\n return false;\n}\n\nfunction transpose(expressionWithRange) {\n let range = expressionWithRange.args[0];\n // console.log(expressionWithRange.args[0])\n // console.log(expressionWithRange.formula.wb.Sheets.Sheet1)\n // console.log(range.calc())\n let matrix = range.calc();\n let cellName = expressionWithRange.formula.name;\n let colRow = cellName.match(/([A-Z]+)([0-9]+)/);\n let sheet = expressionWithRange.formula.sheet;\n // console.log(colRow[1], colRow[2]);\n // console.log(col_str_2_int(colRow[1]));\n let colNumber = col_str_2_int(colRow[1]);\n let rowNumber = +colRow[2];\n for (let i = 0; i < matrix.length; i++) {\n let matrixRow = matrix[i];\n for (let j = 0; j < matrixRow.length; j++) {\n let destinationColumn = colNumber + i;\n let destinationRow = rowNumber + j;\n let value = matrixRow[j];\n // console.log(int_2_col_str(destinationColumn), destinationRow, value);\n sheet[int_2_col_str(destinationColumn) + destinationRow].v = value;\n }\n }\n // console.log(expressionWithRange.formula.name)\n return matrix[0][0];\n}\n\nmodule.exports = {\n 'OFFSET': raw_offset,\n 'IFERROR': iferror,\n 'IF': _if,\n 'AND': and,\n 'OR': _or,\n 'TRANSPOSE': transpose\n};\n","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst str_2_val = require('./str_2_val.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\n\nclass Calculator {\n \n constructor(workbook, exec_formula) {\n this.workbook = workbook;\n this.expressions = [];\n this.exec_formula = exec_formula;\n this.variables = {};\n this.formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (let i = this.formulas.length - 1; i >= 0; i--) {\n let exp = exec_formula.build_expression(this.formulas[i]);\n this.expressions.push(exp);\n }\n this.calcNames();\n }\n \n setVar(var_name, value) {\n let variable = this.variables[var_name];\n if (variable) {\n variable.setValue(value);\n } else {\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, var_name, value);\n });\n }\n }\n \n getVars() {\n let vars = {};\n for (let k in this.variables) {\n vars[k] = this.variables[k].calc();\n }\n return vars;\n }\n \n calcNames() {\n if (!this.workbook || !this.workbook.Workbook || !this.workbook.Workbook.Names) {\n return;\n }\n this.workbook.Workbook.Names.forEach(item => {\n let val = this.getRef(item.Ref);\n this.variables[item.Name] = val;\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, item.Name);\n });\n });\n }\n \n getRef(ref_name) {\n if (!this.formulas.length) {\n throw new Error(\"No formula found.\");\n }\n let first_formula = this.formulas[0];\n let formula_ref = first_formula.formula_ref;\n let formula = {\n formula_ref: formula_ref,\n wb: this.workbook,\n exec_formula: this.exec_formula\n };\n return str_2_val(ref_name, formula);\n }\n \n setVarOfExpression(exp, var_name, value) {\n for (let i = 0; i < exp.args.length; i++) {\n let arg = exp.args[i];\n if (arg === var_name) {\n exp.args[i] = this.variables[var_name] || (this.variables[var_name] = new RawValue(value));\n } else if (typeof arg === 'object' && (arg.name === 'Expression' || arg.name === 'UserFn')) {\n this.setVarOfExpression(arg, var_name, value);\n }\n }\n }\n \n execute() {\n this.expressions.forEach(exp => {\n exp.update_cell_value();\n });\n }\n}\n\nmodule.exports = Calculator;"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/RawValue.js","webpack:///./src/int_2_col_str.js","webpack:///./src/col_str_2_int.js","webpack:///./src/Range.js","webpack:///./src/getSanitizedSheetName.js","webpack:///./src/str_2_val.js","webpack:///./src/RefValue.js","webpack:///./src/find_all_cells_with_formulas.js","webpack:///./src/index.js","webpack:///./src/exec_formula.js","webpack:///./src/expression_builder.js","webpack:///./src/Exp.js","webpack:///./src/LazyValue.js","webpack:///./src/dynamic_array_formulas.js","webpack:///./src/UserFnExecutor.js","webpack:///./src/UserRawFnExecutor.js","webpack:///./src/formulas.js","webpack:///./src/formulas-raw.js","webpack:///./src/Calculator.js"],"names":["root","factory","exports","module","define","amd","a","i","this","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","setValue","v","calc","modulo","dividend","columnName","guard","String","fromCharCode","col_str","colstr","replace","length","Math","pow","charCodeAt","col_str_2_int","int_2_col_str","getSanitizedSheetName","str_expression","formula","range_expression","sheet_name","sheet","indexOf","aux","split","wb","Sheets","max_row","arr","min_row","parseInt","str_max_row","min_col","max_col","matrix","row","push","j","cell_name","cell_full_name","formula_ref","status","exec_formula","cell","f","includes","Error","quotedMatch","match","RawValue","RefValue","LazyValue","Range","definedNames","getDefinedName","buffer","Workbook","Names","keys","values","forEach","Name","Ref","str_2_val","isNaN","trim","inner","substr","self","parseRef","resolved_ref","ref_cell","console","log","w","cells","find_all_cells_with_formulas","Calculator","mymodule","workbook","options","formulas","error","continue_after_error","log_error","calculator","set_fx","exec_fx","import_functions","import_raw_functions","xlsx_Fx","localizeFunctions","XLSX_CALC","expression_builder","xlsx_raw_Fx","functions","opts","formulajs","prefix","obj","override","my_assign","dest","source","JSON","parse","stringify","k","build_expression","update_cell_value","fn","args","apply","dic","newName","oldName","Exp","UserFnExecutor","UserRawFnExecutor","common_operations","root_exp","str_formula","exp_obj","was_string","fn_stack","exp","string","char","state","start","single_quote","stack","trim_buffer","special","special_raw","ini_parentheses","pop","add_operation","dynamicArrayFormulas","exp_id","last_arg","getCellLetter","columnIndex","newCellLetter","newLetterIndex","floor","getCellType","cellValue","isEmpty","checkVariable","getCurrentCellIndex","exec","op","splice","b","Array","isArray","e","id","RegExp","join","array","result","validateResultMatrix","existingCell","existingCellLetter","existingCellNumber","newCellNumber","newCellValue","newCellType","newCell","errorValues","undefined","message","concat","Date","exec_minus","getTime","toLowerCase","user_function","map","abs","sqrt","return_index","range_lookup","val","max","arguments","arg","col","sum","min","rate_per_period","number_of_payments","present_value","future_value","type","q","counta","range","guess","guest","NPV","normsInv","getArrayOfNumbers","_mean","reduce","mean","dev","itm","avg","E","var_p","covariance_p","is_blank","needle","table","index","exactmatch","searchingFor","row_num","column_num","lookupValue","matchType","match_exactly_string","match_exactly_non_string","match_less_than_or_equal","match_greater_than_or_equal","parseNumber","parseFloat","consistentSizeRanges","matrixArray","getRowCount","getColCount","rowCount","colCount","product","_i","_ij","arrays","x","today","setHours","hours","minutes","seconds","date","getDate","day","getMonth","month","getFullYear","year","text","number","substring","cond","decimalPlaces","round","roundMeasure","inv_n","avg_a","avg_b","sa","sb","elementToSum","sumResult","slice","elt","toString","option","old_text","new_text","occurrence","significance","ceil","indexValue","idx","average","mu","sigma","Infinity","cell_ref","rows","columns","height","width","ref_value","parsed_ref","end_range_col","onerrorvalue","condition","_then","_else","expressionWithRange","colRow","colNumber","rowNumber","matrixRow","destinationColumn","destinationRow","data","conditions","cellName","colAndRow","returnValue","destinationCellName","expressions","variables","calcNames","var_name","variable","setVarOfExpression","vars","item","getRef","ref_name"],"mappings":"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","file":"xlsx-calc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","\"use strict\";\n\nmodule.exports = function RawValue(value) {\n this.setValue = function(v) {\n value = v;\n };\n this.calc = function() {\n return value;\n };\n};\n","\"use strict\";\n\nmodule.exports = function int_2_col_str(n) {\n var dividend = n + 1;\n var columnName = '';\n var modulo;\n var guard = 10;\n while (dividend > 0 && guard--) {\n modulo = (dividend - 1) % 26;\n columnName = String.fromCharCode(modulo + 65) + columnName;\n dividend = (dividend - modulo - 1) / 26;\n }\n return columnName;\n};","\"use strict\";\n\nmodule.exports = function col_str_2_int(col_str) {\n var r = 0;\n var colstr = col_str.replace(/[0-9]+$/, '');\n for (var i = colstr.length; i--;) {\n r += Math.pow(26, colstr.length - i - 1) * (colstr.charCodeAt(i) - 64);\n }\n return r - 1;\n};","\"use strict\";\n\nconst col_str_2_int = require('./col_str_2_int.js');\nconst int_2_col_str = require('./int_2_col_str.js');\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function Range(str_expression, formula) {\n this.calc = function() {\n var range_expression, sheet_name, sheet;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n range_expression = aux[1];\n }\n else {\n sheet_name = formula.sheet_name;\n range_expression = str_expression;\n }\n sheet = formula.wb.Sheets[sheet_name];\n var arr = range_expression.split(':');\n var min_row = parseInt(arr[0].replace(/^[A-Z]+/, ''), 10) || 0;\n var str_max_row = arr[1].replace(/^[A-Z]+/, '');\n var max_row;\n if (str_max_row === '' && sheet['!ref']) {\n str_max_row = sheet['!ref'].split(':')[1].replace(/^[A-Z]+/, '');\n }\n // the max is 1048576, but TLE\n max_row = parseInt(str_max_row == '' ? '500000' : str_max_row, 10);\n var min_col = col_str_2_int(arr[0]);\n var max_col = col_str_2_int(arr[1]);\n var matrix = [];\n for (var i = min_row; i <= max_row; i++) {\n var row = [];\n matrix.push(row);\n for (var j = min_col; j <= max_col; j++) {\n var cell_name = int_2_col_str(j) + i;\n var cell_full_name = sheet_name + '!' + cell_name;\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n } else if (formula_ref.status === 'working') {\n if (formula_ref.cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n }\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else if (sheet[cell_name]) {\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else {\n row.push(null);\n }\n }\n }\n return matrix;\n };\n};\n","\"use strict\";\n\nmodule.exports = function getSanitizedSheetName(sheet_name) {\n var quotedMatch = sheet_name.match(/^'(.*)'$/);\n if (quotedMatch) {\n return quotedMatch[1];\n }\n else {\n return sheet_name;\n }\n};\n","const RawValue = require('./RawValue.js');\nconst RefValue = require('./RefValue.js');\nconst LazyValue = require('./LazyValue.js');\nconst Range = require('./Range.js');\n\n// this is used to _cache_ range names so that it doesn't need to be queried\n// every time a range is used\nlet definedNames, wb;\nfunction getDefinedName(buffer, formula) {\n if (!(formula.wb.Workbook && formula.wb.Workbook.Names)) {\n return null;\n }\n if (wb !== formula.wb) {\n wb = formula.wb;\n definedNames = null;\n return getDefinedName(buffer, formula);\n }\n if (definedNames) {\n return definedNames[buffer];\n }\n const keys = Object.values(formula.wb.Workbook.Names);\n if (keys.length === 0) {\n return;\n }\n definedNames = {};\n keys.forEach(({ Name, Ref }) => {\n if (!Name.includes('.')) {\n definedNames[Name] = Ref;\n }\n });\n\n return getDefinedName(buffer, formula);\n}\n\nmodule.exports = function str_2_val(buffer, formula) {\n if (!isNaN(buffer)) {\n return new RawValue(+buffer);\n }\n if (buffer === 'TRUE') {\n return new RawValue(1);\n }\n if (typeof buffer !== 'string') {\n return buffer;\n }\n\n buffer = buffer.trim().replace(/\\$/g, '')\n\n if (buffer.match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/%$/)) {\n var inner = str_2_val(buffer.substr(0, buffer.length-1), formula)\n return new LazyValue(() => inner.calc() / 100)\n }\n if (getDefinedName(buffer, formula)) {\n return str_2_val(getDefinedName(buffer, formula), formula);\n }\n return buffer;\n};\n","\"use strict\";\n\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function RefValue(str_expression, formula) {\n var self = this;\n this.name = 'RefValue';\n this.str_expression = str_expression;\n this.formula = formula;\n\n self.parseRef = function() {\n var sheet, sheet_name, cell_name, cell_full_name;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n sheet = formula.wb.Sheets[sheet_name];\n cell_name = aux[1];\n }\n else {\n sheet = formula.sheet;\n sheet_name = formula.sheet_name;\n cell_name = str_expression;\n }\n if (!sheet) {\n throw Error(\"Sheet \" + sheet_name + \" not found.\");\n }\n cell_full_name = sheet_name + '!' + cell_name;\n return {\n sheet: sheet,\n sheet_name: sheet_name,\n cell_name: cell_name,\n cell_full_name: cell_full_name\n };\n };\n\n this.calc = function() {\n var resolved_ref = self.parseRef();\n var sheet = resolved_ref.sheet;\n var cell_name = resolved_ref.cell_name;\n var cell_full_name = resolved_ref.cell_full_name;\n var ref_cell = sheet[cell_name];\n if (!ref_cell) {\n return null;\n }\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n if (ref_cell.t === 'e') {\n console.log('ref is an error with new formula', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n else if (formula_ref.status === 'working') {\n if (ref_cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n return this.calc();\n }\n else if (formula_ref.status === 'done') {\n if (ref_cell.t === 'e') {\n console.log('ref is an error after formula eval', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n }\n else {\n if (ref_cell.t === 'e') {\n console.log('ref is an error with no formula', cell_name);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n };\n};\n","\"use strict\";\n\nmodule.exports = function find_all_cells_with_formulas(wb, exec_formula) {\n let formula_ref = {};\n let cells = [];\n for (let sheet_name in wb.Sheets) {\n let sheet = wb.Sheets[sheet_name];\n for (let cell_name in sheet) {\n if (sheet[cell_name] && sheet[cell_name].f) {\n let formula = formula_ref[sheet_name + '!' + cell_name] = {\n formula_ref: formula_ref,\n wb: wb,\n sheet: sheet,\n sheet_name: sheet_name,\n cell: sheet[cell_name],\n name: cell_name,\n status: 'new',\n exec_formula: exec_formula\n };\n cells.push(formula);\n }\n }\n }\n return cells;\n};\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst exec_formula = require('./exec_formula.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\nconst Calculator = require('./Calculator.js');\n\nvar mymodule = function(workbook, options) {\n var formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (var i = formulas.length - 1; i >= 0; i--) {\n try {\n exec_formula(formulas[i]);\n } catch (error) {\n if (!options || !options.continue_after_error) {\n throw error\n }\n if (options.log_error) {\n console.log('error executing formula', 'sheet', formulas[i].sheet_name, 'cell', formulas[i].name, error)\n }\n }\n }\n};\n\nmymodule.calculator = function calculator(workbook) {\n return new Calculator(workbook, exec_formula);\n};\n\nmymodule.set_fx = exec_formula.set_fx;\nmymodule.exec_fx = exec_formula.exec_fx;\nmymodule.col_str_2_int = col_str_2_int;\nmymodule.int_2_col_str = int_2_col_str;\nmymodule.import_functions = exec_formula.import_functions;\nmymodule.import_raw_functions = exec_formula.import_raw_functions;\nmymodule.xlsx_Fx = exec_formula.xlsx_Fx;\nmymodule.localizeFunctions = exec_formula.localizeFunctions;\n\nmymodule.XLSX_CALC = mymodule\n\nmodule.exports = mymodule;\n","\"use strict\";\n\nconst expression_builder = require('./expression_builder.js');\n\nlet xlsx_Fx = {};\nlet xlsx_raw_Fx = {};\n\nimport_functions(require('./formulas.js'));\nimport_raw_functions(require('./formulas-raw.js'));\n\nfunction import_raw_functions(functions, opts) {\n for (var key in functions) {\n xlsx_raw_Fx[key] = functions[key];\n }\n}\n\nfunction import_functions(formulajs, opts) {\n opts = opts || {};\n var prefix = opts.prefix || '';\n for (var key in formulajs) {\n var obj = formulajs[key];\n if (typeof(obj) === 'function') {\n if (opts.override || !xlsx_Fx[prefix + key]) {\n xlsx_Fx[prefix + key] = obj;\n }\n // else {\n // console.log(prefix + key, 'already exists.');\n // console.log(' to override:');\n // console.log(' XLSX_CALC.import_functions(yourlib, {override: true})');\n // }\n }\n else if (typeof(obj) === 'object') {\n import_functions(obj, my_assign(opts, { prefix: key + '.' }));\n }\n }\n}\n\nfunction my_assign(dest, source) {\n var obj = JSON.parse(JSON.stringify(dest));\n for (var k in source) {\n obj[k] = source[k];\n }\n return obj;\n}\n\nfunction build_expression(formula) {\n return expression_builder(formula, {xlsx_Fx: xlsx_Fx, xlsx_raw_Fx: xlsx_raw_Fx});\n}\n\nfunction exec_formula(formula) {\n let root_exp = build_expression(formula);\n root_exp.update_cell_value();\n}\n\nexec_formula.set_fx = function set_fx(name, fn) {\n xlsx_Fx[name] = fn;\n};\n\nexec_formula.exec_fx = function exec_fx(name, args) {\n return xlsx_Fx[name].apply(this, args);\n};\n\nexec_formula.localizeFunctions = function(dic) {\n for (let newName in dic) {\n let oldName = dic[newName];\n if (xlsx_Fx[oldName]) {\n xlsx_Fx[newName] = xlsx_Fx[oldName];\n }\n if (xlsx_raw_Fx[oldName]) {\n xlsx_raw_Fx[newName] = xlsx_raw_Fx[oldName];\n }\n }\n};\n\nexec_formula.import_functions = import_functions;\nexec_formula.import_raw_functions = import_raw_functions;\nexec_formula.build_expression = build_expression;\nexec_formula.xlsx_Fx = xlsx_Fx;\nmodule.exports = exec_formula;\n","const Exp = require('./Exp.js');\nconst RawValue = require('./RawValue.js');\nconst UserFnExecutor = require('./UserFnExecutor.js');\nconst UserRawFnExecutor = require('./UserRawFnExecutor.js');\nconst common_operations = {\n '*': 'multiply',\n '+': 'plus',\n '-': 'minus',\n '/': 'divide',\n '^': 'power',\n '&': 'concat',\n '<': 'lt',\n '>': 'gt',\n '=': 'eq'\n};\n\nmodule.exports = function expression_builder(formula, opts) {\n formula.status = 'working';\n\n var xlsx_Fx = opts.xlsx_Fx || {};\n var xlsx_raw_Fx = opts.xlsx_raw_Fx || {};\n\n var root_exp;\n var str_formula = formula.cell.f;\n if (str_formula[0] == '=') {\n str_formula = str_formula.substr(1);\n }\n var exp_obj = root_exp = new Exp(formula);\n var buffer = '',\n was_string = false;\n var fn_stack = [{\n exp: exp_obj\n }];\n\n /**\n * state pattern in functional way\n */\n function string(char) {\n if (char === '\"') {\n exp_obj.push(new RawValue(buffer));\n was_string = true;\n buffer = '';\n state = start;\n } else {\n buffer += char;\n }\n }\n\n function single_quote(char) {\n if (char === \"'\") {\n state = start;\n }\n buffer += char;\n }\n\n function ini_parentheses() {\n var o, trim_buffer = buffer.trim(),\n special = xlsx_Fx[trim_buffer];\n var special_raw = xlsx_raw_Fx[trim_buffer];\n if (special_raw) {\n special = new UserRawFnExecutor(special_raw, formula);\n }\n else if (special) {\n special = new UserFnExecutor(special, formula);\n }\n else if (trim_buffer) {\n //Error: \"Worksheet 1\"!D145: Function INDEX not found\n throw new Error('\"' + formula.sheet_name + '\"!' + formula.name + ': Function ' + buffer + ' not found');\n }\n o = new Exp(formula);\n fn_stack.push({\n exp: o,\n special: special\n });\n exp_obj = o;\n buffer = '';\n }\n\n function end_parentheses() {\n var v, stack = fn_stack.pop();\n exp_obj = stack.exp;\n exp_obj.push(buffer);\n v = exp_obj;\n buffer = '';\n exp_obj = fn_stack[fn_stack.length - 1].exp;\n if (stack.special) {\n stack.special.push(v);\n exp_obj.push(stack.special);\n }\n else {\n exp_obj.push(v);\n }\n }\n\n function add_operation(char) {\n if (!was_string) {\n exp_obj.push(buffer);\n }\n was_string = false;\n exp_obj.push(char);\n buffer = '';\n }\n\n function start(char) {\n if (char === '\"') {\n state = string;\n buffer = '';\n } else if (char === \"'\") {\n state = single_quote;\n buffer = \"'\";\n } else if (char === '(') {\n ini_parentheses();\n } else if (char === ')') {\n end_parentheses();\n } else if (common_operations[char]) {\n add_operation(char);\n } else if (char === ',' && fn_stack[fn_stack.length - 1].special) {\n was_string = false;\n fn_stack[fn_stack.length - 1].exp.push(buffer);\n fn_stack[fn_stack.length - 1].special.push(fn_stack[fn_stack.length - 1].exp);\n fn_stack[fn_stack.length - 1].exp = exp_obj = new Exp(formula);\n buffer = '';\n } else if (char !== ' ') {\n buffer += char;\n }\n }\n \n var state = start;\n\n for (var i = 0; i < str_formula.length; i++) {\n state(str_formula[i]);\n }\n root_exp.push(buffer);\n return root_exp;\n\n}","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst str_2_val = require('./str_2_val.js');\nconst dynamicArrayFormulas = require('./dynamic_array_formulas.js');\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nvar exp_id = 0;\n\nmodule.exports = function Exp(formula) {\n var self = this;\n self.id = ++exp_id;\n self.args = [];\n self.name = 'Expression';\n self.update_cell_value = update_cell_value;\n self.formula = formula;\n \n function update_cell_value() {\n try {\n if (Array.isArray(self.args) \n && self.args.length === 1\n && self.args[0] instanceof Range) {\n throw Error('#VALUE!');\n }\n formula.cell.v = self.calc();\n formula.cell.t = getCellType(formula.cell.v);\n\n if (Array.isArray(formula.cell.v && formula.cell.name && formula.cell.f && formula.cell.f.match(new RegExp(dynamicArrayFormulas.join('|'), 'i')))) {\n const array = formula.cell.v;\n if (!validateResultMatrix(array)) {\n throw new Error('#N/A');\n }\n\n const existingCell = formula.cell.name;\n const existingCellLetter = existingCell.match(/[A-Z]+/)[0];\n const existingCellNumber = existingCell.match(/[0-9]+/)[0];\n\n for (let i = 0; i < array.length; i++) {\n const newCellNumber = parseInt(existingCellNumber) + i;\n\n for (let j = 0; j < array[i].length; j++) {\n const newCellValue = array[i][j];\n let newCellType = getCellType(newCellValue);\n\n // original cell\n if (i === 0 && j === 0) {\n formula.cell.v = newCellValue;\n if (newCellType) formula.cell.t = newCellType;\n } \n // other cells\n else {\n const newLetterIndex = existingCellLetter.charCodeAt(0) - 65 + j;\n const newCellLetter = getCellLetter(newLetterIndex);\n\n const newCell = newCellLetter + newCellNumber;\n formula.sheet[newCell] = {\n v: newCellValue,\n t: newCellType,\n };\n }\n }\n }\n }\n }\n catch (e) {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n };\n if (errorValues[e.message] !== undefined) {\n formula.cell.t = 'e';\n formula.cell.w = e.message;\n formula.cell.v = errorValues[e.message];\n }\n else {\n throw e;\n }\n }\n finally {\n formula.status = 'done';\n }\n }\n\n function getCellLetter(columnIndex) {\n let newCellLetter = '';\n while (newLetterIndex >= 0) {\n newCellLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[newLetterIndex % 26] + newCellLetter;\n newLetterIndex = Math.floor(newLetterIndex / 26) - 1;\n }\n }\n\n function getCellType(cellValue) {\n if (typeof(cellValue) === 'string') {\n return 's';\n }\n else if (typeof(cellValue) === 'number') {\n return 'n';\n }\n }\n\n function validateResultMatrix(result) {\n // array must be greater than 0 and be symmetrical\n if (Array.isArray(result)) {\n for (let i = 0; i < result.length; i++) {\n if (!(result[i] instanceof Array)) {\n return false;\n }\n if (result[i].length !== result[0].length) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n function isEmpty(value) {\n return value === undefined || value === null || value === \"\";\n }\n \n function checkVariable(obj) {\n if (typeof obj.calc !== 'function') {\n throw new Error('Undefined ' + obj);\n }\n }\n\n function getCurrentCellIndex() {\n return +self.formula.name.replace(/[^0-9]/g, '');\n }\n \n function exec(op, args, fn) {\n for (var i = 0; i < args.length; i++) {\n if (args[i] === op) {\n try {\n if (i===0 && op==='+') {\n checkVariable(args[i + 1]);\n let r = args[i + 1].calc();\n args.splice(i, 2, new RawValue(r));\n } else {\n checkVariable(args[i - 1]);\n checkVariable(args[i + 1]);\n\n let a = args[i - 1].calc();\n let b = args[i + 1].calc();\n if (Array.isArray(a)) {\n a = a[getCurrentCellIndex() - 1][0];\n }\n if (Array.isArray(b)) {\n b = b[getCurrentCellIndex() - 1][0];\n }\n\n let r = fn(a, b);\n args.splice(i - 1, 3, new RawValue(r));\n i--;\n }\n }\n catch (e) {\n // console.log('[Exp.js] - ' + formula.name + ': evaluating ' + formula.cell.f + '\\n' + e.message);\n throw e;\n }\n }\n }\n }\n\n function exec_minus(args) {\n for (var i = args.length; i--;) {\n if (args[i] === '-') {\n checkVariable(args[i + 1]);\n var b = args[i + 1].calc();\n if (i > 0 && typeof args[i - 1] !== 'string') {\n args.splice(i, 1, '+');\n if (b instanceof Date) {\n b = Date.parse(b);\n checkVariable(args[i - 1]);\n var a = args[i - 1].calc();\n if (a instanceof Date) {\n a = Date.parse(a) / MS_PER_DAY;\n b = b / MS_PER_DAY;\n args.splice(i - 1, 1, new RawValue(a));\n }\n }\n args.splice(i + 1, 1, new RawValue(-b));\n }\n else {\n if (typeof b === 'string') {\n throw new Error('#VALUE!');\n }\n args.splice(i, 2, new RawValue(-b));\n }\n }\n }\n }\n\n self.calc = function() {\n let args = self.args.concat();\n exec('^', args, function(a, b) {\n return Math.pow(+a, +b);\n });\n exec_minus(args);\n exec('/', args, function(a, b) {\n if (b == 0) {\n throw Error('#DIV/0!');\n }\n return (+a) / (+b);\n });\n exec('*', args, function(a, b) {\n return (+a) * (+b);\n });\n exec('+', args, function(a, b) {\n if (a instanceof Date && typeof b === 'number') {\n b = b * MS_PER_DAY;\n }\n return (+a) + (+b);\n });\n exec('&', args, function(a, b) {\n return '' + a + b;\n });\n exec('<', args, function(a, b) {\n return a < b;\n });\n exec('>', args, function(a, b) {\n return a > b;\n });\n exec('>=', args, function(a, b) {\n return a >= b;\n });\n exec('<=', args, function(a, b) {\n return a <= b;\n });\n exec('<>', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() !== b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return false;\n }\n return a !== b;\n });\n exec('=', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return true;\n }\n if ((a == null && b === 0) || (a === 0 && b == null)) {\n return true;\n }\n if (typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase()) {\n return true;\n }\n return a === b;\n });\n if (args.length == 1) {\n if (typeof(args[0].calc) !== 'function') {\n return args[0];\n }\n else {\n return args[0].calc();\n }\n }\n };\n\n var last_arg;\n self.push = function(buffer) {\n if (buffer) {\n var v = str_2_val(buffer, formula);\n if (((v === '=') && (last_arg == '>' || last_arg == '<')) || (last_arg == '<' && v === '>')) {\n self.args[self.args.length - 1] += v;\n }\n else {\n self.args.push(v);\n }\n last_arg = v;\n //console.log(self.id, '-->', v);\n }\n };\n};","\"use strict\";\n\nmodule.exports = function LazyValue(fn) {\n this.calc = function() {\n return fn();\n };\n};\n","const dynamicArrayFormulas = [\n 'FILTER',\n];\n\nmodule.exports = dynamicArrayFormulas;","\"use strict\";\n\nmodule.exports = function UserFnExecutor(user_function) {\n var self = this;\n self.name = 'UserFn';\n self.args = [];\n self.calc = function() {\n var errorValues = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B\n }, result;\n try {\n result = user_function.apply(self, self.args.map(f=>f.calc()));\n } catch (e) {\n if (user_function.name === 'is_blank'\n && errorValues[e.message] !== undefined) {\n // is_blank applied to an error cell doesn't propagate the error\n result = 0;\n }\n else if (user_function.name === 'iserror'\n && errorValues[e.message] !== undefined) {\n // iserror applied to an error doesn't propagate the error and returns true\n result = true;\n }\n else {\n throw e;\n }\n }\n return result;\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};","\"use strict\";\n\nmodule.exports = function UserRawFnExecutor(user_function, formula) {\n var self = this;\n self.name = 'UserRawFn';\n self.args = [];\n self.calc = function() {\n try {\n return user_function.apply(self, self.args);\n } catch(e) {\n // debug\n // console.log('----------------', user_function);\n // console.log(formula.name);\n // console.log(self);\n throw e;\n }\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};\n","\"use strict\";\n\n// +---------------------+\n// | FORMULAS REGISTERED |\n// +---------------------+\nlet formulas = {\n 'FLOOR': Math.floor,\n '_xlfn.FLOOR.MATH': Math.floor,\n 'FLOOR.MATH': Math.floor,\n 'ABS': Math.abs,\n 'SQRT': Math.sqrt,\n 'VLOOKUP': vlookup,\n 'MAX': max,\n 'SUM': sum,\n 'MIN': min,\n 'CONCATENATE': concatenate,\n 'PMT': pmt,\n 'COUNTA': counta,\n 'IRR': irr,\n 'NORM.INV': normsInv,\n '_xlfn.NORM.INV': normsInv,\n 'STDEV': stDeviation,\n 'AVERAGE': avg,\n 'EXP': EXP,\n 'LN': Math.log,\n '_xlfn.VAR.P': var_p,\n 'VAR.P': var_p,\n '_xlfn.COVARIANCE.P': covariance_p,\n 'COVARIANCE.P': covariance_p,\n 'TRIM': trim,\n 'LEN': len,\n 'ISBLANK': is_blank,\n 'HLOOKUP': hlookup,\n 'INDEX': index,\n 'MATCH': match,\n 'SUMPRODUCT': sumproduct,\n 'ISNUMBER': isnumber,\n 'TODAY': today,\n 'ISERROR': iserror,\n 'TIME': time,\n 'DAY': day,\n 'MONTH': month,\n 'YEAR': year,\n 'RIGHT': right,\n 'LEFT': left,\n 'IFS': ifs,\n 'ROUND': round,\n 'CORREL': correl, // missing test\n 'SUMIF': sumif, // missing test,\n 'CHOOSE': choose,\n 'SUBSTITUTE': substitute,\n 'CEILING': ceiling,\n};\n\nfunction choose(option) {\n return arguments[option];\n}\n\nfunction sumif(){\n\n let elementToSum = arguments[1];\n let sumResult = 0;\n\n [].slice.call(arguments)[0][0].forEach((elt,key) =>{\n \n if (elt!==null){\n //if the element is not a string but a number, number has no replace function, so converting to string.\n elt = elt.toString();\n if( elt.replace(/\\'/g, \"\") === elementToSum){\n if (!isNaN([].slice.call(arguments)[2][0][key])){\n sumResult += [].slice.call(arguments)[2][0][key]\n }\n }\n }\n });\n return sumResult\n}\n\nfunction correl(a,b){\n\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n\n if (a.length !== b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / (a.length-1);\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n var sa = 0;\n var sb=0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n\n sa+=Math.pow(a[i],2);\n sb+=Math.pow(b[i],2);\n }\n\n sa=Math.sqrt(sa/inv_n);\n sb=Math.sqrt(sb/inv_n);\n\n return s / (inv_n*sa*sb);\n}\n\nfunction round(value, decimalPlaces) {\n if (arguments.length === 0) throw new Error(\"Err:511\");\n if (arguments.length === 1) return Math.round(value);\n let roundMeasure = Math.pow(10, decimalPlaces);\n return Math.round(roundMeasure*value)/roundMeasure\n}\n\nfunction today() {\n var today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n}\n\nfunction isnumber(x) {\n return !isNaN(x);\n}\n\nfunction sumproduct() {\n var parseNumber = function (string) {\n if (string === undefined || string === '' || string === null) {\n return 0;\n }\n if (!isNaN(string)) {\n return parseFloat(string);\n }\n return 0;\n },\n consistentSizeRanges = function (matrixArray) {\n var getRowCount = function(matrix) {\n return matrix.length;\n },\n getColCount = function(matrix) {\n return matrix[0].length;\n },\n rowCount = getRowCount(matrixArray[0]),\n colCount = getColCount(matrixArray[0]);\n\n for (var i = 1; i < matrixArray.length; i++) {\n if (getRowCount(matrixArray[i]) !== rowCount\n || getColCount(matrixArray[i]) !== colCount) {\n return false;\n }\n }\n return true;\n };\n\n if (!arguments || arguments.length === 0) {\n throw Error('#VALUE!');\n }\n if (!consistentSizeRanges(arguments)) {\n throw Error('#VALUE!');\n }\n // throw error if any of the cells passed in arguments is in error\n for (var i = 0; i < arguments.length; i++) {\n var row = arguments[i];\n if (Array.isArray(row)) {\n for (var j = 0; j < row.length; j++) {\n var col = row[j];\n if (Array.isArray(col)) {\n for (var k = 0; k < col.length; k++) {\n var cell = col[k];\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n else {\n var cell = col;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n }\n else {\n var cell = row;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n\n var arrays = arguments.length + 1;\n var result = 0;\n var product;\n var k;\n var _i;\n var _ij;\n for (var i = 0; i < arguments[0].length; i++) {\n if (!(arguments[0][i] instanceof Array)) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _i = parseNumber(arguments[k - 1][i]);\n\n product *= _i;\n }\n result += product;\n } else {\n for (var j = 0; j < arguments[0][i].length; j++) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _ij = parseNumber(arguments[k - 1][i][j]);\n\n product *= _ij;\n }\n result += product;\n }\n }\n }\n return result;\n}\n\nfunction match_less_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] < lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] > indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match_exactly_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n lookupValue = lookupValue.replace(/\\?/g, '.');\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1\n && typeof matrix[idx][0] === 'string') {\n if (matrix[idx][0].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n } else if (typeof matrix[idx] === 'string') {\n if (matrix[idx].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n\n }\n throw Error('#N/A');\n}\n\nfunction match_exactly_non_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1) {\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n }\n }\n } else if (matrix[idx] === lookupValue) {\n return idx + 1;\n }\n }\n throw Error('#N/A');\n}\n\n// +---------------------+\n// | THE IMPLEMENTATIONS |\n// +---------------------+\n\n\nfunction match_greater_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx]) && matrix[idx].length > 0) {\n // For array in column\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx][0] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n } else if (matrix[idx][0] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n }\n }\n } else {\n // For array in row\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match(lookupValue, matrix, matchType) {\n if (Array.isArray(matrix)\n && matrix.length === 1\n && Array.isArray(matrix[0])) {\n matrix = matrix[0];\n }\n if (!lookupValue && !matrix) {\n throw Error('#N/A');\n }\n if (arguments.length === 2) {\n matchType = 1;\n }\n if (!(matrix instanceof Array)) {\n throw Error('#N/A');\n }\n if (matchType === 0) {\n if (typeof lookupValue === 'string') {\n return match_exactly_string(matrix, lookupValue);\n } else {\n return match_exactly_non_string(matrix, lookupValue);\n }\n } else if (matchType === 1) {\n return match_less_than_or_equal(matrix, lookupValue);\n } else if (matchType === -1) {\n return match_greater_than_or_equal(matrix, lookupValue);\n } else {\n throw Error('#N/A');\n }\n}\n\nfunction index(matrix, row_num, column_num) {\n if (row_num <= matrix.length) {\n var row = matrix[row_num - 1];\n if (Array.isArray(row)) {\n if (!column_num) {\n return row;\n } else if (column_num <= row.length) {\n return row[column_num - 1];\n }\n } else {\n return matrix[row_num];\n }\n }\n throw Error('#REF!');\n}\n\n// impl ported from https://github.com/FormulaPages/hlookup\nfunction hlookup(needle, table, index, exactmatch) {\n if (typeof needle === \"undefined\" || (0, is_blank)(needle)) {\n throw Error('#N/A');\n }\n\n index = index || 0;\n let row = table[0], i, searchingFor;\n\n if (typeof needle === 'string') {\n searchingFor = needle.toLowerCase();\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i].toLowerCase().indexOf(searchingFor) !== -1) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n } else {\n searchingFor = needle;\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i] === searchingFor) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n }\n throw Error('#N/A');\n}\n\nfunction len(a) {\n return ('' + a).length;\n}\n\nfunction trim(a) {\n return ('' + a).trim();\n}\n\nfunction is_blank(a) {\n // console.log(a)\n return !a;\n}\n\nfunction covariance_p(a, b) {\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n if (a.length != b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / a.length;\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n }\n return s * inv_n;\n}\n\nfunction getArrayOfNumbers(range) {\n var arr = [];\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n if (typeof(matrix[j]) == 'number') {\n arr.push(matrix[j]);\n }\n else if (Array.isArray(matrix[j])) {\n for (var k = matrix[j].length; k--;) {\n if (typeof(matrix[j][k]) == 'number') {\n arr.push(matrix[j][k]);\n }\n }\n }\n // else {\n // wtf is that?\n // }\n }\n }\n else {\n if (typeof(arg) == 'number') {\n arr.push(arg);\n }\n }\n }\n return arr;\n}\n\nfunction var_p() {\n var average = avg.apply(this, arguments);\n var s = 0.0;\n var c = 0;\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n s += Math.pow(matrix[j][k] - average, 2);\n c++;\n }\n }\n }\n }\n else {\n s += Math.pow(arg - average, 2);\n c++;\n }\n }\n return s / c;\n}\n\nfunction EXP(n) {\n return Math.pow(Math.E, n);\n}\n\nfunction avg() {\n var aux = counta.apply(this, arguments);\n if (aux == 0) {\n throw Error('#DIV/0!');\n }\n return sum.apply(this, arguments) / aux;\n}\n\nfunction stDeviation() {\n var array = getArrayOfNumbers(arguments);\n\n function _mean(array) {\n return array.reduce(function(a, b) {\n return a + b;\n }) / array.length;\n }\n var mean = _mean(array),\n dev = array.map(function(itm) {\n return (itm - mean) * (itm - mean);\n });\n return Math.sqrt(dev.reduce(function(a, b) {\n return a + b;\n }) / (array.length - 1));\n}\n\n/// Original C++ implementation found at http://www.wilmott.com/messageview.cfm?catid=10&threadid=38771\n/// C# implementation found at http://weblogs.asp.net/esanchez/archive/2010/07/29/a-quick-and-dirty-implementation-of-excel-norminv-function-in-c.aspx\n/*\n * Compute the quantile function for the normal distribution.\n *\n * For small to moderate probabilities, algorithm referenced\n * below is used to obtain an initial approximation which is\n * polished with a final Newton step.\n *\n * For very large arguments, an algorithm of Wichura is used.\n *\n * REFERENCE\n *\n * Beasley, J. D. and S. G. Springer (1977).\n * Algorithm AS 111: The percentage points of the normal distribution,\n * Applied Statistics, 26, 118-121.\n *\n * Wichura, M.J. (1988).\n * Algorithm AS 241: The Percentage Points of the Normal Distribution.\n * Applied Statistics, 37, 477-484.\n */\nfunction normsInv(p, mu, sigma) {\n if (p < 0 || p > 1) {\n throw \"The probality p must be bigger than 0 and smaller than 1\";\n }\n if (sigma < 0) {\n throw \"The standard deviation sigma must be positive\";\n }\n\n if (p == 0) {\n return -Infinity;\n }\n if (p == 1) {\n return Infinity;\n }\n if (sigma == 0) {\n return mu;\n }\n\n var q, r, val;\n\n q = p - 0.5;\n\n /*-- use AS 241 --- */\n /* double ppnd16_(double *p, long *ifault)*/\n /* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3\n Produces the normal deviate Z corresponding to a given lower\n tail area of P; Z is accurate to about 1 part in 10**16.\n */\n if (Math.abs(q) <= .425) { /* 0.075 <= p <= 0.925 */\n r = .180625 - q * q;\n val =\n q * (((((((r * 2509.0809287301226727 +\n 33430.575583588128105) * r + 67265.770927008700853) * r +\n 45921.953931549871457) * r + 13731.693765509461125) * r +\n 1971.5909503065514427) * r + 133.14166789178437745) * r +\n 3.387132872796366608) / (((((((r * 5226.495278852854561 +\n 28729.085735721942674) * r + 39307.89580009271061) * r +\n 21213.794301586595867) * r + 5394.1960214247511077) * r +\n 687.1870074920579083) * r + 42.313330701600911252) * r + 1);\n }\n else { /* closer than 0.075 from {0,1} boundary */\n\n /* r = min(p, 1-p) < 0.075 */\n if (q > 0)\n r = 1 - p;\n else\n r = p;\n\n r = Math.sqrt(-Math.log(r));\n /* r = sqrt(-log(r)) <==> min(p, 1-p) = exp( - r^2 ) */\n\n if (r <= 5) { /* <==> min(p,1-p) >= exp(-25) ~= 1.3888e-11 */\n r += -1.6;\n val = (((((((r * 7.7454501427834140764e-4 +\n .0227238449892691845833) * r + .24178072517745061177) *\n r + 1.27045825245236838258) * r +\n 3.64784832476320460504) * r + 5.7694972214606914055) *\n r + 4.6303378461565452959) * r +\n 1.42343711074968357734) / (((((((r *\n 1.05075007164441684324e-9 + 5.475938084995344946e-4) *\n r + .0151986665636164571966) * r +\n .14810397642748007459) * r + .68976733498510000455) *\n r + 1.6763848301838038494) * r +\n 2.05319162663775882187) * r + 1);\n }\n else { /* very close to 0 or 1 */\n r += -5;\n val = (((((((r * 2.01033439929228813265e-7 +\n 2.71155556874348757815e-5) * r +\n .0012426609473880784386) * r + .026532189526576123093) *\n r + .29656057182850489123) * r +\n 1.7848265399172913358) * r + 5.4637849111641143699) *\n r + 6.6579046435011037772) / (((((((r *\n 2.04426310338993978564e-15 + 1.4215117583164458887e-7) *\n r + 1.8463183175100546818e-5) * r +\n 7.868691311456132591e-4) * r + .0148753612908506148525) * r + .13692988092273580531) * r +\n .59983220655588793769) * r + 1);\n }\n\n if (q < 0.0) {\n val = -val;\n }\n }\n\n return mu + sigma * val;\n}\n\nfunction irr(range, guess) {\n var min = -2.0;\n var max = 1.0;\n var n = 0;\n do {\n var guest = (min + max) / 2;\n var NPV = 0;\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n NPV += arg[0] / Math.pow((1 + guest), i);\n }\n if (NPV > 0) {\n if (min === max) {\n max += Math.abs(guest);\n }\n min = guest;\n }\n else {\n max = guest;\n }\n n++;\n } while (Math.abs(NPV) > 0.000001 && n < 100000);\n //console.log(n);\n return guest;\n}\n\nfunction counta() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n r++;\n }\n }\n }\n }\n else {\n if (arg !== null && arg !== undefined) {\n r++;\n }\n }\n }\n return r;\n}\n\nfunction pmt(rate_per_period, number_of_payments, present_value, future_value, type) {\n type = type || 0;\n future_value = future_value || 0;\n if (rate_per_period != 0.0) {\n // Interest rate exists\n var q = Math.pow(1 + rate_per_period, number_of_payments);\n return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));\n\n }\n else if (number_of_payments != 0.0) {\n // No interest rate, but number of payments exists\n return -(future_value + present_value) / number_of_payments;\n }\n return 0;\n}\n\nfunction concatenate() {\n var r = '';\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (arg === null || arg === undefined) continue;\n r += arg;\n }\n return r;\n}\n\nfunction sum() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (!isNaN(matrix[j][k])) {\n r += +matrix[j][k];\n }\n }\n }\n }\n else {\n r += +arg;\n }\n }\n return r;\n}\n\nfunction max() {\n var max = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (max == null || (col[k] != null && max < col[k])) {\n max = col[k];\n }\n }\n }\n else if (max == null || (col != null && max < col)) {\n max = col;\n }\n }\n }\n else if (!isNaN(arg) && (max == null || (arg != null && max < arg))) {\n max = arg;\n }\n }\n return max;\n}\n\nfunction min() {\n var min = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (min == null || (col[k] != null && min > col[k])) {\n min = col[k];\n }\n }\n }\n else if (min == null || (col != null && min > col)) {\n min = col;\n }\n }\n }\n else if (!isNaN(arg) && (min == null || (arg != null && min > arg))) {\n min = arg;\n }\n }\n return min;\n}\n\nfunction vlookup(key, matrix, return_index, range_lookup=true) {\n var val = null;\n for (var i = 0; i < matrix.length; i++) {\n if (matrix[i][0] < key) {\n val = matrix[i][return_index - 1];\n }\n else if (matrix[i][0] == key) {\n return matrix[i][return_index - 1];\n }\n }\n if (range_lookup && val) {\n return val;\n }\n throw Error('#N/A');\n}\n\nfunction iserror() {\n // if an error is catched before getting there, true will be returned from the catch block\n // if we get here then it's not an error\n return false;\n}\n\nfunction time(hours, minutes, seconds) {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n return ((hours * 60 + minutes) * 60 + seconds) * 1000 / MS_PER_DAY;\n}\n\nfunction day(date) {\n if (!date.getDate) {\n throw Error('#VALUE!');\n }\n var day = date.getDate();\n if (isNaN(day)) {\n throw Error('#VALUE!');\n }\n return day;\n}\n\nfunction month(date) {\n if (!date.getMonth) {\n throw Error('#VALUE!');\n }\n var month = date.getMonth();\n if (isNaN(month)) {\n throw Error('#VALUE!');\n }\n return month + 1;\n}\n\nfunction year(date) {\n if (!date.getFullYear) {\n throw Error('#VALUE!');\n }\n var year = date.getFullYear();\n if (isNaN(year)) {\n throw Error('#VALUE!');\n }\n return year;\n}\n\nfunction right(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(text.length - number);\n}\n\nfunction left(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(0, number);\n}\n\nfunction ifs(/*_cond1, _val1, _cond2, _val2, _cond3, _val3, ... */) {\n for (var i = 0; i + 1 < arguments.length; i+=2) {\n var cond = arguments[i];\n var val = arguments[i+1];\n if (cond) {\n return val;\n }\n }\n throw Error('#N/A');\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\nfunction substitute(text, old_text, new_text, occurrence) {\n if(occurrence <= 0) {\n throw Error('#VALUE!');\n }\n if (!text || !old_text || (!new_text && new_text !== '')) {\n return text;\n } else if (occurrence === undefined) {\n return text.replace(new RegExp(escapeRegExp(old_text), 'g'), new_text);\n } else {\n var index = 0;\n var i = 0;\n while (text.indexOf(old_text, index) > 0) {\n index = text.indexOf(old_text, index + 1);\n i++;\n if (i === occurrence) {\n return text.substring(0, index) + new_text + text.substring(index + old_text.length);\n }\n }\n }\n };\n\nfunction ceiling(number, significance) {\n return Math.ceil(number / significance) * significance\n}\n\nmodule.exports = formulas;\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst RefValue = require('./RefValue.js');\n\nfunction raw_offset(cell_ref, rows, columns, height, width) {\n height = (height || new RawValue(1)).calc();\n width = (width || new RawValue(1)).calc();\n if (cell_ref.args.length === 1 && cell_ref.args[0].name === 'RefValue') {\n var ref_value = cell_ref.args[0];\n var parsed_ref = ref_value.parseRef();\n var col = col_str_2_int(parsed_ref.cell_name) + columns.calc();\n var col_str = int_2_col_str(col);\n var row = +parsed_ref.cell_name.replace(/^[A-Z]+/g, '') + rows.calc();\n var cell_name = parsed_ref.sheet_name + '!' + col_str + row;\n if (height === 1 && width === 1) {\n return new RefValue(cell_name, ref_value.formula).calc();\n }\n else {\n var end_range_col = int_2_col_str(col + width - 1);\n var end_range_row = row + height - 1;\n var end_range = end_range_col + end_range_row;\n var str_expression = cell_name + ':' + end_range;\n return new Range(str_expression, ref_value.formula).calc();\n }\n }\n}\n\nfunction iferror(cell_ref, onerrorvalue) {\n try {\n var value = cell_ref.calc();\n if (typeof value === 'number' && (isNaN(value) || value === Infinity || value === -Infinity)) {\n return onerrorvalue.calc();\n }\n return value;\n } catch (e) {\n return onerrorvalue.calc();\n }\n}\n\nfunction _if(condition, _then, _else) {\n if (condition.calc()) {\n // console.log(condition.formula.name)\n // if (condition.formula.name === 'P40') {\n // console.log('P40 =', _then.calc());\n // console.log(' -->', _then.args[1].calc());\n // }\n return _then.calc();\n }\n else {\n if (typeof _else === 'undefined') {\n return false;\n } else {\n return _else.calc();\n }\n }\n}\n\nfunction and() {\n for (var i = 0; i < arguments.length; i++) {\n if (!arguments[i].calc()) return false;\n }\n return true;\n}\n\nfunction _or() {\n for (var i = 0; i < arguments.length; i++) {\n if (arguments[i].calc()) return true;\n }\n return false;\n}\n\nfunction transpose(expressionWithRange) {\n let range = expressionWithRange.args[0];\n // console.log(expressionWithRange.args[0])\n // console.log(expressionWithRange.formula.wb.Sheets.Sheet1)\n // console.log(range.calc())\n let matrix = range.calc();\n let cellName = expressionWithRange.formula.name;\n let colRow = cellName.match(/([A-Z]+)([0-9]+)/);\n let sheet = expressionWithRange.formula.sheet;\n // console.log(colRow[1], colRow[2]);\n // console.log(col_str_2_int(colRow[1]));\n let colNumber = col_str_2_int(colRow[1]);\n let rowNumber = +colRow[2];\n for (let i = 0; i < matrix.length; i++) {\n let matrixRow = matrix[i];\n for (let j = 0; j < matrixRow.length; j++) {\n let destinationColumn = colNumber + i;\n let destinationRow = rowNumber + j;\n let value = matrixRow[j];\n // console.log(int_2_col_str(destinationColumn), destinationRow, value);\n sheet[int_2_col_str(destinationColumn) + destinationRow].v = value;\n }\n }\n // console.log(expressionWithRange.formula.name)\n return matrix[0][0];\n}\n\nfunction filter(range, condition) {\n let data = range.calc();\n let conditions = condition.calc();\n let cellName = range.formula.name;\n let colAndRow = cellName.match(/([A-Z]+)([0-9]+)/);\n let sheet = range.formula.sheet;\n let colNumber = col_str_2_int(colAndRow[1]);\n let rowNumber = +colAndRow[2];\n\n let returnValue = sheet[cellName].v;\n for (let i = 0; i < conditions[0].length; i++) {\n if (conditions[0][i]) {\n for (let row = 0; row < data.length; row++) {\n let destinationColumn = colNumber + i;\n let destinationRow = rowNumber + row;\n let destinationCellName = int_2_col_str(destinationColumn) + destinationRow;\n\n if (sheet[destinationCellName]) {\n sheet[destinationCellName].v = data[row][i];\n if (destinationCellName === cellName) {\n returnValue = data[row][i];\n }\n } else {\n sheet[destinationCellName] = { v: data[row][i] };\n }\n }\n }\n }\n return returnValue;\n}\n\nmodule.exports = {\n 'OFFSET': raw_offset,\n 'IFERROR': iferror,\n 'IF': _if,\n 'AND': and,\n 'OR': _or,\n 'TRANSPOSE': transpose,\n 'FILTER': filter\n};\n","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst str_2_val = require('./str_2_val.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\n\nclass Calculator {\n \n constructor(workbook, exec_formula) {\n this.workbook = workbook;\n this.expressions = [];\n this.exec_formula = exec_formula;\n this.variables = {};\n this.formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (let i = this.formulas.length - 1; i >= 0; i--) {\n let exp = exec_formula.build_expression(this.formulas[i]);\n this.expressions.push(exp);\n }\n this.calcNames();\n }\n \n setVar(var_name, value) {\n let variable = this.variables[var_name];\n if (variable) {\n variable.setValue(value);\n } else {\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, var_name, value);\n });\n }\n }\n \n getVars() {\n let vars = {};\n for (let k in this.variables) {\n vars[k] = this.variables[k].calc();\n }\n return vars;\n }\n \n calcNames() {\n if (!this.workbook || !this.workbook.Workbook || !this.workbook.Workbook.Names) {\n return;\n }\n this.workbook.Workbook.Names.forEach(item => {\n let val = this.getRef(item.Ref);\n this.variables[item.Name] = val;\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, item.Name);\n });\n });\n }\n \n getRef(ref_name) {\n if (!this.formulas.length) {\n throw new Error(\"No formula found.\");\n }\n let first_formula = this.formulas[0];\n let formula_ref = first_formula.formula_ref;\n let formula = {\n formula_ref: formula_ref,\n wb: this.workbook,\n exec_formula: this.exec_formula\n };\n return str_2_val(ref_name, formula);\n }\n \n setVarOfExpression(exp, var_name, value) {\n for (let i = 0; i < exp.args.length; i++) {\n let arg = exp.args[i];\n if (arg === var_name) {\n exp.args[i] = this.variables[var_name] || (this.variables[var_name] = new RawValue(value));\n } else if (typeof arg === 'object' && (arg.name === 'Expression' || arg.name === 'UserFn')) {\n this.setVarOfExpression(arg, var_name, value);\n }\n }\n }\n \n execute() {\n this.expressions.forEach(exp => {\n exp.update_cell_value();\n });\n }\n}\n\nmodule.exports = Calculator;"],"sourceRoot":""} \ No newline at end of file diff --git a/xlsx-calc.min.js b/xlsx-calc.min.js index e370017..a959282 100644 --- a/xlsx-calc.min.js +++ b/xlsx-calc.min.js @@ -1,2 +1,2 @@ -!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=8)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(4);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var u=r.split("!");a=i(u[0]),t=u[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var s,l=t.split(":"),c=parseInt(l[0].replace(/^[A-Z]+/,""),10)||0,h=l[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),s=parseInt(""==h?"500000":h,10);for(var p=n(l[0]),g=n(l[1]),v=[],w=c;w<=s;w++){var m=[];v.push(m);for(var A=p;A<=g;A++){var y=o(A)+w,x=a+"!"+y,E=e.formula_ref[x];if(E){if("new"===E.status)e.exec_formula(E);else if("working"===E.status){if(E.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(E)}"e"===f[y].t?m.push(f[y]):m.push(f[y].v)}else f[y]?"e"===f[y].t?m.push(f[y]):m.push(f[y].v):m.push(null)}}return v}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(6),i=t(12),a=t(3);let f,u;function s(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(u!==e.wb)return u=e.wb,f=null,s(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),s(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return s(e,t)?r(s(e,t),t):e}},function(r,e,t){"use strict";const n=t(4);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(9),a=t(7),f=t(17);var u=function(r){for(var e=a(r,i),t=e.length-1;t>=0;t--)i(e[t])};u.calculator=function(r){return new f(r,i)},u.set_fx=i.set_fx,u.exec_fx=i.exec_fx,u.col_str_2_int=o,u.int_2_col_str=n,u.import_functions=i.import_functions,u.import_raw_functions=i.import_raw_functions,u.xlsx_Fx=i.xlsx_Fx,u.localizeFunctions=i.localizeFunctions,u.XLSX_CALC=u,r.exports=u},function(r,e,t){"use strict";const n=t(10);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,u(e,{prefix:n+"."}))}}function u(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function s(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function l(r){s(r).update_cell_value()}f(t(15)),a(t(16)),l.set_fx=function(r,e){o[r]=e},l.exec_fx=function(r,e){return o[r].apply(this,e)},l.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},l.import_functions=f,l.import_raw_functions=a,l.build_expression=s,l.xlsx_Fx=o,r.exports=l},function(r,e,t){const n=t(11),o=t(0),i=t(13),a=t(14),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,u=e.xlsx_Fx||{},s=e.xlsx_raw_Fx||{},l=r.cell.f;"="==l[0]&&(l=l.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function w(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=v,h=""):"'"===e?(A=w,h="'"):"("===e?function(){var e,t=h.trim(),o=u[t],f=s[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,y=0;y0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),u(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),l("^",r,(function(r,e){return Math.pow(+r,+e)})),l("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),l("*",r,(function(r,e){return+r*+e})),l("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),l("&",r,(function(r,e){return""+r+e})),l("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),l(">=",r,(function(r,e){return r>=e})),l("<=",r,(function(r,e){return r<=e})),l("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!f(r)||!f(e))&&r!==e})),l("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!f(r)||!f(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r==e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e,t){"use strict";r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t,n={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43};try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){if("is_blank"===r.name&&void 0!==n[e.message])t=0;else{if("iserror"!==r.name||void 0===n[e.message])throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";let n={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":p,"_xlfn.NORM.INV":p,STDEV:function(){var r=l(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:h,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":c,"VAR.P":c,"_xlfn.COVARIANCE.P":s,"COVARIANCE.P":s,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:u,HLOOKUP:function(r,e,t,n){if(void 0===r||u(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e}};function o(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function i(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function v(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=n},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(0),a=t(3),f=t(6);r.exports={OFFSET:function(r,e,t,u,s){if(u=(u||new i(1)).calc(),s=(s||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var l=r.args[0],c=l.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),v=c.sheet_name+"!"+p+g;if(1===u&&1===s)return new f(v,l.formula).calc();var w=n(h+s-1);return new a(v+":"+(w+(g+u-1)),l.formula).calc()}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){return r.calc()?e.calc():void 0!==t&&t.calc()},AND:function(){for(var r=0;r=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); +!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=8)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(4);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var l=r.split("!");a=i(l[0]),t=l[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var u,s=t.split(":"),c=parseInt(s[0].replace(/^[A-Z]+/,""),10)||0,h=s[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),u=parseInt(""==h?"500000":h,10);for(var p=n(s[0]),g=n(s[1]),v=[],w=c;w<=u;w++){var m=[];v.push(m);for(var A=p;A<=g;A++){var y=o(A)+w,x=a+"!"+y,E=e.formula_ref[x];if(E){if("new"===E.status)e.exec_formula(E);else if("working"===E.status){if(E.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(E)}"e"===f[y].t?m.push(f[y]):m.push(f[y].v)}else f[y]?"e"===f[y].t?m.push(f[y]):m.push(f[y].v):m.push(null)}}return v}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(6),i=t(12),a=t(3);let f,l;function u(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(l!==e.wb)return l=e.wb,f=null,u(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),u(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return u(e,t)?r(u(e,t),t):e}},function(r,e,t){"use strict";const n=t(4);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(9),a=t(7),f=t(18);var l=function(r,e){for(var t=a(r,i),n=t.length-1;n>=0;n--)try{i(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};l.calculator=function(r){return new f(r,i)},l.set_fx=i.set_fx,l.exec_fx=i.exec_fx,l.col_str_2_int=o,l.int_2_col_str=n,l.import_functions=i.import_functions,l.import_raw_functions=i.import_raw_functions,l.xlsx_Fx=i.xlsx_Fx,l.localizeFunctions=i.localizeFunctions,l.XLSX_CALC=l,r.exports=l},function(r,e,t){"use strict";const n=t(10);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,l(e,{prefix:n+"."}))}}function l(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function u(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function s(r){u(r).update_cell_value()}f(t(16)),a(t(17)),s.set_fx=function(r,e){o[r]=e},s.exec_fx=function(r,e){return o[r].apply(this,e)},s.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},s.import_functions=f,s.import_raw_functions=a,s.build_expression=u,s.xlsx_Fx=o,r.exports=s},function(r,e,t){const n=t(11),o=t(0),i=t(14),a=t(15),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,l=e.xlsx_Fx||{},u=e.xlsx_raw_Fx||{},s=r.cell.f;"="==s[0]&&(s=s.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function w(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=v,h=""):"'"===e?(A=w,h="'"):"("===e?function(){var e,t=h.trim(),o=l[t],f=u[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,y=0;y=0;)e="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[newLetterIndex%26]+e,newLetterIndex=Math.floor(newLetterIndex/26)-1}function u(r){return"string"==typeof r?"s":"number"==typeof r?"n":void 0}function s(r){return null==r||""===r}function c(r){if("function"!=typeof r.calc)throw new Error("Undefined "+r)}function h(){return+t.formula.name.replace(/[^0-9]/g,"")}function p(r,e,t){for(var o=0;o0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),c(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),p("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),p("*",r,(function(r,e){return+r*+e})),p("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),p("&",r,(function(r,e){return""+r+e})),p("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),p(">=",r,(function(r,e){return r>=e})),p("<=",r,(function(r,e){return r<=e})),p("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!s(r)||!s(e))&&r!==e})),p("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!s(r)||!s(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e){r.exports=["FILTER"]},function(r,e,t){"use strict";r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t,n={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43};try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){if("is_blank"===r.name&&void 0!==n[e.message])t=0;else{if("iserror"!==r.name||void 0===n[e.message])throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";let n={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":p,"_xlfn.NORM.INV":p,STDEV:function(){var r=s(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:h,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":c,"VAR.P":c,"_xlfn.COVARIANCE.P":u,"COVARIANCE.P":u,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:l,HLOOKUP:function(r,e,t,n){if(void 0===r||l(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e}};function o(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function i(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function v(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=n},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(0),a=t(3),f=t(6);r.exports={OFFSET:function(r,e,t,l,u){if(l=(l||new i(1)).calc(),u=(u||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var s=r.args[0],c=s.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),v=c.sheet_name+"!"+p+g;if(1===l&&1===u)return new f(v,s.formula).calc();var w=n(h+u-1);return new a(v+":"+(w+(g+l-1)),s.formula).calc()}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){return r.calc()?e.calc():void 0!==t&&t.calc()},AND:function(){for(var r=0;r=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); //# sourceMappingURL=xlsx-calc.js.map \ No newline at end of file