https://medium.com/@Marioskif/javascript-daily-tips-67-how-to-use-javascripts-bigint-for-arbitrary-precision-arithmetic-080a6204ba09